Skip to content

Instantly share code, notes, and snippets.

@varun160490
Last active June 9, 2021 06:07
Show Gist options
  • Save varun160490/1b325874ab4198d48440e9944a9d95a9 to your computer and use it in GitHub Desktop.
Save varun160490/1b325874ab4198d48440e9944a9d95a9 to your computer and use it in GitHub Desktop.
Working script to get vaccine availability alert on console as soon as a slot opens up in https://selfregistration.cowin.gov.in/
// This javascript code will alert you whenever some slot opens up on the given date within the given pincodes.
// This script will run every 2 seconds and check for availability of slots.
// Steps to use
// 1. Update pincodes,age,district_id,vaccine & vaccine_date.
// 2. Login to https://selfregistration.cowin.gov.in/
// 3. Right Click on the website
// 4. Click on Inspect
// 5. Switch to the Console Tab on the recently opened Inspect window
// 6. Copy paste the contents of this entire file - cowin_vaccination.js
// 7. Press Enter
var sleepNow = (delay) => new Promise((resolve) => setTimeout(resolve, delay))
var trialCounter = 1;
// Change the pincodes as per your city
var pincodes = [411001,411028,411057,410506,410501,411027,411017,411006,411033,411035,411041,412115,411044,411011,411027,411026,411001,411038,411018];
// Change the age as per your requirement
var age = 18; //45,18
// Change the distric id as per the city you are living in
var district_id = 363;
// Change the vaccine as per your need. Check comments on how to get distric id.
var vaccine = "COVAXIN"; // COVISHIELD,COVAXIN
// change the date to the date of slot booking
var vaccine_date = "29-05-2021";
// Enter dose = 1 for first dose, dose = 2 for second dose
var dose = 1;
function httpGet(theUrl)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.open( "GET", theUrl, false ); // false for synchronous request
xmlHttp.send( null );
return xmlHttp.responseText;
}
async function fetchByDistrict() {
console.log("Check: ", trialCounter++);
url = "https://cdn-api.co-vin.in/api/v2/appointment/sessions/public/calendarByDistrict?district_id="+district_id+"&date="+vaccine_date;
try {
centers = JSON.parse(httpGet(url)).centers;
} catch(e) {
console.log("error");
}
for (i in centers) {
center = centers[i];
for (j in center.sessions) {
session = center.sessions[j];
//console.log(session);
var available_capacity = 0;
if(dose==1)
available_capacity = session.available_capacity_dose1;
else if(dose==2)
available_capacity = session.available_capacity_dose2;
if (session.min_age_limit == age && session.available_capacity > 0 && session.vaccine == vaccine && pincodes.includes(center.pincode)) {
console.log("Vaccines available at : ", center.pincode, center.name, session.available_capacity);
var audio = new Audio('https://media.geeksforgeeks.org/wp-content/uploads/20190531135120/beep.mp3');
audio.play();
}
}
}
await sleepNow(2000);
fetchByDistrict();
}
fetchByDistrict();
@varun160490
Copy link
Author

Steps to get District Id:

  1. Log in to https://selfregistration.cowin.gov.in/
  2. Select State and District.
  3. Right-click on the website page.
  4. Click on Inspect.
  5. Switch to the Network Tab on the recently opened Inspect window.
  6. Click the search button and check for request with district id.
  7. Copy and Update the district id in the script.

Cowin Vaccination

@shantanuroy4u
Copy link

shantanuroy4u commented May 24, 2021

Thanks Varun :) . It is working as charm.I took the vaccine today
One suggestion -If we can use only through pincode then it may be more user friendlier

@varun160490
Copy link
Author

varun160490 commented May 28, 2021

@shantanuroy4u, Thanks buddy...
Earlier I created using pin code but suppose someone is using a lot of pincodes then it will increase load on CoWin servers...

@prasannamandhalapu
Copy link

Hi Varun...., Thanks for the amazing code . I have small query where we can get this district codes like you mentioned as 363 in your code as per the city. I am just trying it to find out for Hyderabad

@varun160490
Copy link
Author

@prasannamandhalapun,

Thanks.. I have already mentioned in my first comment how to find a district id. Anyway, the district id for Hyderabad is 581.

@jaweedt
Copy link

jaweedt commented Jun 1, 2021

Is the output supposed to show this:

Check: 1
polyfills.8c151b8375e767ff858f.js:1 [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
(anonymous) @ polyfills.8c151b8375e767ff858f.js:1
s. @ polyfills.8c151b8375e767ff858f.js:1
httpGet @ VM501:34
fetchByDistrict @ VM501:44
(anonymous) @ VM501:66
Promise {}
VM501:40 Check: 2
VM501:40 Check: 3
VM501:40 Check: 4
VM501:40 Check: 5
VM501:40 Check: 6
VM501:40 Check: 7
VM501:40 Check: 8
VM501:40 Check: 9
VM501:40 Check: 10
VM501:40 Check: 11
VM501:40 Check: 12
VM501:40 Check: 13
VM501:40 Check: 14
VM501:40 Check: 15
VM501:40 Check: 16
VM501:40 Check: 17
VM501:40 Check: 18
VM501:40 Check: 19
VM501:40 Check: 20
VM501:40 Check: 21
VM501:40 Check: 22
VM501:40 Check: 23
VM501:40 Check: 24

@varun160490
Copy link
Author

Is the output supposed to show this:

Check: 1
polyfills.8c151b8375e767ff858f.js:1 [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.
(anonymous) @ polyfills.8c151b8375e767ff858f.js:1
s. @ polyfills.8c151b8375e767ff858f.js:1
httpGet @ VM501:34
fetchByDistrict @ VM501:44
(anonymous) @ VM501:66
Promise {}
VM501:40 Check: 2
VM501:40 Check: 3

@jaweedt, this is correct. It is checking for slot every 3 seconds and will alert you as soon as the slot opens up...

@sidd1990
Copy link

sidd1990 commented Jun 5, 2021

Those looking for 2nd dose can replace "session.available_capacity" on line 55 and 56 with "session.available_capacity_dose2"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment