9 строк кода до вакцины от COVID-19
Прошли те времена, когда на распродаже были только флагманские телефоны или билеты в кино. Теперь настало время флеш-бронирования вакцины.
После того, как началась пандемия, ситуация осталась примерно такой же, но теперь это не просто телефон или билет, это спасительная жизнь "вакцина". Не просто производить вакцины в такой стране, как Индия, с населением более 1,3 миллиарда человек. Поэтому спрос намного превышает предложение.
Недавно правительство Индии объявило, что вакцинироваться смогут люди в возрасте от 18 до 45 лет. Для этого был создан портал, где люди могут зарегистрироваться и забронировать свои слоты. Но учитывая количество слотов, которых всего 200-300 в районе, и количество людей, бронирующих их, в сотнях тысяч, бронирование становится вызовом.
Будучи программистом, я хочу упростить свою жизнь. Я хочу, чтобы кто-то проверял для меня доступность слота, а затем уведомлял меня, чтобы я мог забронировать его легко. Поэтому я написал этот скрипт, который будет делать работу за меня, пока я могу сосредоточиться на других вещах.
Самый простой способ: расширение для Chrome
Если вы не хотите ничего программировать, то есть простой выход. Расширение для Chrome, которое вы можете скачать: https://chrome.google.com/webstore/detail/covid-vaccine-slot-checke/hmmahfccoaoebmjhmcnbbomomkimomhi
Здесь вы просто можете указать почтовые индексы или свой район, который вы хотите проверять, и оно будет проверять их для вас с выбранным интервалом.
Поэтому я настоятельно рекомендую вам использовать его, если вы не хотите настраивать ничего самостоятельно. Но я хотел чего-то большего. Что, если я далеко от своего ноутбука? в другой комнате или на улице? Поэтому я хочу получать уведомления через текстовое сообщение. И это послужило мотивацией для создания этого скрипта. Настройка простая; может занять 5-10 минут, и после этого вы можете свободно перемещаться (конечно, не без маски :) ).
Что делает скрипт?
Доступно общедоступное API, которое мы можем использовать для запроса результатов.
Скрипт опрашивает сервер COWIN каждую минуту и проверяет, есть ли доступные слоты. Если есть, он отправляет мне текстовое сообщение. Я делаю это каждую минуту, потому что я не хочу перегружать серверы частыми запросами.
Для настройки этого требуется три шага:
- 9 строк кода для 2 доз вакцины
Здесь я использую Twilio Python API для отправки SMS, когда доступен любой центр для бронирования.
Итак, без дальнейших обсуждений, позвольте мне показать вам эти 9 строк, которые делают повторяющуюся работу за меня. Но перед этим давайте напишем некоторые конфигурации, такие как почтовые индексы, URL-адреса и т. д.
import requests
import json
from twilio.rest import Client
import datetime**############################################################## Twilio SID, Auth Token, pincodes, TO_NUMBER, FROM_NUMBER, MIN_AGE_LIMIT to be configured as per your Twilio Account and requirements ##############################################################**
_client = Client("AC4a****************************94", "a8f**********************18") #Twilio SID and Auth Tokenpincodes = ["133001", "134003"] # Почтовые индексы в соответствии с вашими требованиямиTO_NUMBER = "+91*******596" # Номер, на который будет отправлено SMSFROM_NUMBER = "+16*******65" # Номер телефона, предоставленный TwilioMIN_AGE_LIMIT = "18" # Возрастное ограничение - либо 18, либо 45_**_##############################################################_**next_date = (datetime.datetime.today().date() +
datetime.timedelta(1)).strftime("%d-%m-%y")
cowin_base_url = "[https://www.cowin.gov.in/api/v2/appointment/sessions/public/calendarByPin?pincode=](https://www.cowin.gov.in/api/v2/appointment/sessions/public/calendarByPin?pincode=)"**1.** **for each_pincode in pincodes:2. cowin_url = cowin_base_url + \ each_pincode + \ "&date=" + next_date3. cowin_response = requests.get(cowin_url)4. cowin_json = 5. json.loads(cowin_response. \ content.decode('utf8'). \ replace("'", ‘"’))6. for each_center in cowin_json.get('centers'):7. for each_session in each_center.get('sessions'):8. if int(each_session.get('available_capacity')) > 0 \ and int(each_session.get('min_age_limit')) == \ int(_MIN_AGE_LIMIT)_:9. client.messages.create(to=TO_NUMBER, from_=FROM_NUMBER, body= script_name + each_session.get('vaccine').upper() + " Vaccine is available at " + each_center.get('name') + " on " + each_session.get('date') + " for age above " + str(each_session.get('min_age_limit')) + ". Slots available: " + str(each_session.get('slots')) + ". Only " + str(each_session.get('available_capacity')) + " bookings left. Book now and get Vaccinated !!")**
Просто скопируйте приведенный выше код, поместите его в любой текстовый файл и сохраните его как файл .py. Обновите SSID и Auth token из вашей учетной записи Twilio и укажите интересующие вас почтовые индексы. Давайте назовем его cowin_scrape.py или вы можете сразу получить код из моего репозитория на GitHub ниже:
tseth92/vaccine_booking
Этот репозиторий помогает вам забронировать слот для получения вакцины от COVID-19 в Индии с портала COWIN, отправляя вам...
github.com
- Запланируйте скрипт:
Windows: Если у вас есть компьютер с операционной системой Windows, вы можете запланировать задачу с помощью встроенного планировщика:
**i) Создайте планировщик задач: **Перейдите в планировщик задач Windows -> Нажмите на "Создать задачу" в правой панели -> Укажите имя задачи -> нажмите на "Изменить пользователя или группы", введите "SYSTEM", а затем "OK".
ii) Настройте действия: Перейдите во вкладку "Действия" и добавьте новое действие. Перейдите к скрипту и нажмите "OK". Затем перейдите к вкладке "Условия" и снимите флажок "Запускать задачу только при подключении компьютера к сети переменного тока".
iii) Настройте триггер: Перейдите к вкладке "Триггер", выберите время для запуска задачи и добавьте 1 минуту в поле "Повторять задачу каждые:".
Нажмите "OK" и готово. Проверьте, как показано на скриншоте. Время следующего запуска должно отобразиться через 1 минуту, и оно будет обновляться каждую минуту.
Поздравляю!! Теперь вы можете расслабиться и ждать. Вы будете уведомлены, когда вакцина станет доступной в интересующих вас почтовых индексах. Когда она станет доступной, вы получите уведомление по SMS, аналогичное следующему:
Все это может показаться довольно много работы, но на самом деле это займет всего 5-10 минут. Создайте учетную запись в Twilio, скопируйте код в нужное место и обновите учетные данные и почтовый индекс, а затем настройте планировщик.
А если у меня MAC или Ubuntu?
Если у вас установлена MAC или Ubuntu, эта техника планировщика работать не будет. В этом случае вам пригодится наш старый, но надежный инструмент - CRONtab. Для этого задача cron будет выполняться в соответствии с вашим расписанием.
Откройте терминал и введите следующую команду:
crontab -e
В редакторе vim нажмите i для вставки, затем введите следующее:*/1 * * * * C:\Users\tseth\Documents\cowin_scripts\cowin_script.py >> C:\Users\tseth\Documents\cowin_scripts\cowin_script_log.txt 2>&1## Путь к вашему файлу журнала может быть абсолютным путем вашего
И все готово. Честно говоря, мне нравится cron больше, чем планировщики. Но планировщики предоставляют больше гибкости в отношении некоторых условий, например, если вы хотите запускать задачу только при подключении к сети переменного тока и т.д.
Детали кода:
Код очень простой, но я хотел дать некоторые пояснения, если кто-то заинтересован.
Сначала объявляются импорты и некоторые переменные, которые мы будем использовать в нашем коде, что довольно просто.
С 1 по 5 строки мы просто перебираем все почтовые индексы, указанные пользователем. Следующие 6-9 строк мы просто перебираем каждую сессию и каждый центр и отправляем сообщение для каждой итерации.
Надеюсь, это поможет вам создать вашу систему уведомлений о вакцинации, и вы получите вакцину как можно скорее.
Если у вас возникнут проблемы при настройке, просто оставьте комментарий или свяжитесь со мной в LinkedIn.
Пока все, увидимся в следующей статье. А пока будьте в безопасности, оставайтесь дома, надевайте маску и прививайтесь!!