import requests import json import time from datetime import datetime ''' python minimalna wersja: 3.6 zainstalowana paczka requests (python3 -m pip install requests) Tutaj poradnik od teekop jak znalesc cookie/csrf - https://www.wykop.pl/wpis/57267287/jak-znalezc-lepszy-termin-szczepienia-mimo-ze-jest/ ''' # WKLEJ TUTAJ SWOJE cookie,csrf i skierowanie COOKIE = 'tutaj wklej swoj cookie' # zeby wygladal podobnie jak -> 'patient_sid=b9341e35-60f0-46e9-8539-1c970d8782ad' CSRF = 'tutaj wklej swoj csrf' # zeby wygladal podobnie jak -> '7cf16c56-8269-4a11-11c4-fab0869a90c7' SKIEROWANIE = 'tutaj wklej swoj prescriptionId' # zeby wygladal podobnie jak -> 'eb44f331-111d-2cd-a111-495dd8d39406' # TUTAJ ZMIEN daty,miasto,rodzaj szczepionki itd STARTING_DATE = '2021-05-06' # data poczatkowa END_DATE = '2021-05-27' # data koncowa # 1 jesli chcesz szukac danej szczepionki i 0 jesli nie chcesz. SZCZEPIONKI = { "cov19.moderna" : 1, "cov19.pfizer": 1, "cov19.astra_zeneca": 0, "cov19.johnson_and_johnson": 1 } START_HOUR = '00:00' # godzina poczatkowa END_HOUR = '22:00' #godzina kokncowa JEDNOSTKA = '1261011' # https://bdl.stat.gov.pl/BDL/dane/teryt/jednostka# Krakow - 1261011 Warszawa - 1431171 itd WOJEWODZTWO = JEDNOSTKA[0:2] # Bierze 2 pierwsze cyfry z jednostki np(Krakow) - 1261011 -> '12' - // Warszawa 1431171 -> '14' ODSTEP_CZASU = 1 # w sekundach co ile ma szukac, ja uzywam normalnie 1 sekundy # POD TA LINIA NIE ZMIENIAJ CHYBA ZE WIESZ CO ROBISZ # ---------------------------------------- HEADERS = { 'authority': 'pacjent.erejestracja.ezdrowie.gov.pl', 'pragma': 'no-cache', 'cache-control': 'no-cache', 'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="90", "Google Chrome";v="90"', 'accept': 'application/json, text/plain, */*', 'x-csrf-token': CSRF, 'sec-ch-ua-mobile': '?0', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36', 'content-type': 'application/json;charset=UTF-8', 'origin': 'https://pacjent.erejestracja.ezdrowie.gov.pl', 'sec-fetch-site': 'same-origin', 'sec-fetch-mode': 'cors', 'sec-fetch-dest': 'empty', 'referer': 'https://pacjent.erejestracja.ezdrowie.gov.pl/rezerwacja-wizyty', 'accept-language': 'pl,en-US;q=0.9,en;q=0.8,zh-CN;q=0.7,zh-HK;q=0.6,zh-TW;q=0.5,zh;q=0.4,pl-PL;q=0.3', 'cookie': COOKIE, } def szukaj(): json = { 'dayRange': {'from': STARTING_DATE, 'to': END_DATE}, 'geoId': JEDNOSTKA, 'hourRange': {'from': START_HOUR, 'to': END_HOUR}, 'prescriptionId': SKIEROWANIE, 'voiId': WOJEWODZTWO, 'vaccineTypes': [sz for sz in SZCZEPIONKI if SZCZEPIONKI[sz] == 1] } r = requests.post('https://pacjent.erejestracja.ezdrowie.gov.pl/api/calendarSlots/find', headers=HEADERS, json=json) if r.status_code != 200: print(r.status_code) print(r.content) print("cos poszlo nie tak, sprawdz dane / czy nadal jestes nadal zalogowany na stronie") exit() szcz = [sz[6:] for sz in SZCZEPIONKI if SZCZEPIONKI[sz] == 1] print(f"{time.strftime('%H:%M:%S')} Szukam terminow od {STARTING_DATE} do {END_DATE} w godzinach {START_HOUR} - {END_HOUR} // Wybrane szczepionki: {'/'.join(szcz)}") appointments = r.json()['list'] if len(appointments) == 0: print(f"NIC NIE ZNALEZIONO :(") time.sleep(ODSTEP_CZASU) return for a in appointments: where = a['servicePoint'] data_szczepienia = datetime.strptime(a['startAt'], '%Y-%m-%dT%H:%M:%SZ') data_szczepienia = data_szczepienia.strftime('%Y-%m-%d %H:%M') aktualna_godzina = time.strftime('%H:%M:%S') print(f"{aktualna_godzina} {a['vaccineType'][6:]} {data_szczepienia} Miejsce: {where['name'][:50]} - {where['addressText']}") print(f"ODCZEKUJE {ODSTEP_CZASU}SEKUND PRZED KOLEJNYM WYSZUKANIEM\n\n\n") time.sleep(ODSTEP_CZASU) while True: szukaj()