CoderCastrov logo
CoderCastrov
Вакцины

9 строк кода до вакцины от COVID-19

9 строк кода до вакцины от COVID-19
просмотров
6 мин чтение
#Вакцины

Прошли те времена, когда на распродаже были только флагманские телефоны или билеты в кино. Теперь настало время флеш-бронирования вакцины.

После того, как началась пандемия, ситуация осталась примерно такой же, но теперь это не просто телефон или билет, это спасительная жизнь "вакцина". Не просто производить вакцины в такой стране, как Индия, с населением более 1,3 миллиарда человек. Поэтому спрос намного превышает предложение.

Недавно правительство Индии объявило, что вакцинироваться смогут люди в возрасте от 18 до 45 лет. Для этого был создан портал, где люди могут зарегистрироваться и забронировать свои слоты. Но учитывая количество слотов, которых всего 200-300 в районе, и количество людей, бронирующих их, в сотнях тысяч, бронирование становится вызовом.

Источник: Изображение из приложения COWIN от правительства Индии. Это изображение доступных или забронированных слотов для определенного почтового индекса

Будучи программистом, я хочу упростить свою жизнь. Я хочу, чтобы кто-то проверял для меня доступность слота, а затем уведомлял меня, чтобы я мог забронировать его легко. Поэтому я написал этот скрипт, который будет делать работу за меня, пока я могу сосредоточиться на других вещах.

Самый простой способ: расширение для Chrome

Если вы не хотите ничего программировать, то есть простой выход. Расширение для Chrome, которое вы можете скачать: https://chrome.google.com/webstore/detail/covid-vaccine-slot-checke/hmmahfccoaoebmjhmcnbbomomkimomhi

Здесь вы просто можете указать почтовые индексы или свой район, который вы хотите проверять, и оно будет проверять их для вас с выбранным интервалом.

Поэтому я настоятельно рекомендую вам использовать его, если вы не хотите настраивать ничего самостоятельно. Но я хотел чего-то большего. Что, если я далеко от своего ноутбука? в другой комнате или на улице? Поэтому я хочу получать уведомления через текстовое сообщение. И это послужило мотивацией для создания этого скрипта. Настройка простая; может занять 5-10 минут, и после этого вы можете свободно перемещаться (конечно, не без маски :) ).

Что делает скрипт?

Доступно общедоступное API, которое мы можем использовать для запроса результатов.

Скрипт опрашивает сервер COWIN каждую минуту и проверяет, есть ли доступные слоты. Если есть, он отправляет мне текстовое сообщение. Я делаю это каждую минуту, потому что я не хочу перегружать серверы частыми запросами.

Для настройки этого требуется три шага:

Источник: Мой личный аккаунт Twilio (некоторая информация замазана)
  1. 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

  1. Запланируйте скрипт:

Windows: Если у вас есть компьютер с операционной системой Windows, вы можете запланировать задачу с помощью встроенного планировщика:

**i) Создайте планировщик задач: **Перейдите в планировщик задач Windows -> Нажмите на "Создать задачу" в правой панели -> Укажите имя задачи -> нажмите на "Изменить пользователя или группы", введите "SYSTEM", а затем "OK".

Для того, чтобы не показывался черный экран при каждом запуске задачи, необходимо указать пользователя/группу SYSTEM

ii) Настройте действия: Перейдите во вкладку "Действия" и добавьте новое действие. Перейдите к скрипту и нажмите "OK". Затем перейдите к вкладке "Условия" и снимите флажок "Запускать задачу только при подключении компьютера к сети переменного тока".

Снимите флажок, чтобы скрипт выполнялся даже при отсутствии подключения к сети переменного тока.

iii) Настройте триггер: Перейдите к вкладке "Триггер", выберите время для запуска задачи и добавьте 1 минуту в поле "Повторять задачу каждые:".

Добавьте 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.

Пока все, увидимся в следующей статье. А пока будьте в безопасности, оставайтесь дома, надевайте маску и прививайтесь!!