Bot to notify when vaccine appointments are available.
Supports checking Hy-Vee, and sending notifications to Slack and Twitter.
Notifications are sent when a location has appointments. No more notifications are sent for that location until it becomes unavailable again.
PRs welcome to support other clinics or notification methods.
This project has no affiliation with any of the clinics mentioned.
Walmart data courtesy of covid-vaccine-spotter.
Slack
- Install docker
- Run
cp .env.template .env
- Fill in the variables in
.env
if you want slack or twitter integration. docker-compose up --build
- While logged into your slack account, go to https://api.slack.com/apps/
- Click
Create New App
- Choose a name and workspace
- Click
Permissions
, andAdd an OAuth Scope
- Add
chat:write:public
andchat:write
- At the top, click
Install to Workspace
- Copy your OAuth Token to use as
SLACK_BOT_TOKEN
- Apply for a Twitter Developer account
- Once you have the account, go to the Developer Portal
- Create a project and an app for your bot
- Add
Read & Write
permissions to your app - In
Keys & Tokens
, generate Consumer Keys and Access Token/Secret to use as environment variables
- Go to this page.
- Open the network tab of your browser, and search for a zip code
- On the request labeled
availability
, grab the request header namedX-XSRF-TOKEN
and set it to env varWALGREENS_X_XSRF_TOKEN
- In the cookies for walgreens.com, grab the cookie named
XSRF-TOKEN
and put its value in env varWALGREENS_XSRF_TOKEN_COOKIE
- Install pre-commit
pre-commit install
Lint is run as a pre-commit, or on-demand with pre-commit run --all-files
Required Environment Variables:
REDIS_URL
: A redis serviceVACCINE_CHECK_INTERVAL
: How often (in seconds) to checkRADIUS
: Within how many miles to check- Walmart only supports 10, 20, 25, 50, or 100. Otherwise they default to 50.
- CVS has a maximum of 25, vaccine-watch will use 25 for CVS if you set this higher.
LATITUDE
: Latitude of the location to check (e.g. 39.1040382)LONGITUDE
: Latitude of the location to check (e.g. -94.5701803)ZIP_CODE
: Zip Code of the location to check (e.g. 64106)
Optional Environment Variables:
ENABLE_HYVEE
: If you want to check Hy-Vee pharmaciesENABLE_WALGREENS
: If you want to check Walgreens pharmaciesENABLE_WALMART
: If you want to check Walmart pharmacies- CVS:
ENABLE_CVS
: If you want to check CVS pharmaciesCVS_ALLOW_LIST
: JSON of states and cities to be notified for. Only states in this list will be checked.- example:
{"MO": ["SAINT LOUIS"], "KS": []}
- example:
CVS_BLOCK_LIST
: (optional): JSON of states and cities to not be warned about new city for.- example:
{"MO": ["SAINT LOUIS"], "KS": []}
- example:
- Any city that CVS returns for the state(s) in the allow list that are not listed in either the allow or block list will cause a warning message to be logged. Then it may be added to the allow or block list depending on if you wish to have the locations in that city checked or not checked.
ENABLE_COSENTINOS
: If you want to check stores in the Cosentino's family (Kansas City only)ENABLE_BALLS
: If you want to check stores in the Ball's family (Kansas City only)- Slack:
SLACK_BOT_TOKEN
: Token for your slack integrationSLACK_TAG_CHANNEL
: If the channel should be tagged when appointments are availableSLACK_CHANNEL
: Channel for the bot to post in (e.g.#vaccine-watch
)
- Twitter:
TWITTER_CONSUMER_KEY
,TWITTER_CONSUMER_SECRET
,TWITTER_ACCESS_TOKEN_KEY
,TWITTER_ACCESS_TOKEN_SECRET
You can build a docker image with the Dockerfile, and run it with a redis server.
You can create an app in heroku, add a free redis plan, and push the source. Configure the dynos to enable clock
.