Closed szczepienia closed 3 years ago
Niestety na chwilę obecną straciłem dostęp do systemu (pozdrawiam Panów z CEZ). Stan widoczny jest z godziny ok 00:45.
Może uda mi się dzisiaj naprawić, jeśli nie to od niedzieli 9 maja powinniśmy wrócić do działania (nie wiem jeszcze na jak długo).
Czy jest możliwość, żebyś udostępnił nam listę endpointów, z których korzystasz w celu pobierania terminów?
Czyli zablokowali Ci po prostu dostęp do api, czy były jakieś zmiany w endpointach, po których kod się rozjechał? Jeśli to pierwsze to może po prostu udostępnij listę endpointów i na szybko możnaby zrobić prostą listę z użyciem innych credentiali.
Swoją drogą to powinno być publiczne API i to by tylko odciążyło program szczepień, bo ludzie by się sami ogarniali co gdzie jak
@mostaszewski @malysopel Do wczoraj działał ten sposób:
POST https://pacjent.erejestracja.ezdrowie.gov.pl/api/calendarSlots/find
Body:
{
"dayRange": {
"from": "2021-05-04",
"to": "2021-06-30"
},
"hourRange": {
"from": "10:00",
"to": "12:00"
},
"prescriptionId": "IDSKIEROWANIA",
"voiId": "14",
"vaccineTypes": [
"cov19.pfizer",
"cov19.moderna",
"cov19.astra_zeneca",
]
}
W hederze musi się znaleźć cookie z patient_sid oraz x-csrf-token (do wyciągnięcia po zalogowaniu na https://pacjent.erejestracja.ezdrowie.gov.pl/wizyty)
Potwierdzam, a tydzień temu można było jeszcze użyć ID skierowania od innej osoby.
@malysopel Tylko dostęp do API. W jednym issue pisałem co brakuje, i tak jak @2patryk podał trzeba mieć trzy dane: csrf, patient_sid no i prescriptionId
A cov19.johnson_and_johnson
nie zwracało?
J&J też zwraca, ale nie jeśli jesteś zaszczepiony już jedną dawką innej szczepionki :)
tzn. zwracało :-)
Hej, testuje i strzelam sobie do API, zwraca odpowiedź dla wszystkich miast, czy wiecie jak filtrować odpowiedź po miastach ?
@filiplipinski geoID to id miasta , które znajdziesz na GUS Teryt. Można też szukać w danej placówce (servicepointId)
Jak ktoś nie jest po 1szej dawca to API mu , raczej , zwraca wyniki. Jak ktoś jest po 1szej dawce to , od nocy, nie zwraca..
można też szukac po simc: https://pacjent.erejestracja.ezdrowie.gov.pl/teryt/api/woj/18/simc?namePrefix=Rzeszów (i bierzesz parentId) - to jest geoId.
@filiplipinski czy mógłbyś podzielić się przykładowym curlem który Ci zwraca odpowiedzi? Mi się nie udało działającego requesta zbudować 😄
@filiplipinski czy mógłbyś podzielić się przykładowym curlem który Ci zwraca odpowiedzi? Mi się nie udało działającego requesta zbudować 😄
Zrobiłem dokładnie jak @2patryk napisał, zwróć uwagę na prescriptionId
w body, trzeba sprawdzić IdSkierowania w ePacjencie. (jest tam jakiś endpoint który zwraca appointments i prescriptions)
Zaloguj się do portalu w przeglądarce, F12 (Developer Mode) i szukasz w zakładce Network (Sieć)
Zrobił już ktoś może dla Krakowa??
Jak komuś nie działa request to można po prostu w devtool-network wybrać reqeust GET api/settings -> Copy as cURL i wrzucić do np. postmana jako import raw text, headersy już będę na 100% dobrze wypełnione
@2patryk Działa! Ważna obserwacja: zaczęli wymagać sensownego User-Agenta. tzn. User-Agent: curl/7.76.1 nie przejdzie :P
@cytadela8 A tak z ciekawości, jaki dają resposne gdy jest niepoprawny/brakujący user-agent?
@cytadela8 Ale to chyba tylko dla skierowań których realizacja jeszcze się nie rozpoczęła. W przypadku gdy ktoś przyjął pierwszą dawkę, API zwraca błąd (Do wczoraj jeszcze normalnie działało)
403 Forbidden. Wzialem user agent z przegladarki z sesji, takze moga jeszczr robic takie powiazanie.
Łapcie działający kod:
curl --location --request POST 'https://pacjent.erejestracja.ezdrowie.gov.pl/api/calendarSlots/find' \
--header 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0' \
--header 'Accept: application/json, text/plain, */*' \
--header 'Accept-Language: pl,en-US;q=0.7,en;q=0.3' \
--header 'Connection: keep-alive' \
--header 'Referer: https://pacjent.erejestracja.ezdrowie.gov.pl/' \
--header 'Cookie: patient_sid=<TUTAJ WASZ PATIENT_SID>' \
--header 'TE: Trailers' \
--header 'x-csrf-token: <TUTAJ WASZ x-csrf-token>' \
--header 'Content-Type: application/json' \
--data-raw '{
"dayRange": {
"from": "2021-05-04",
"to": "2021-05-09"
},
"hourRange": {
"from": "06:00",
"to": "20:00"
},
"prescriptionId": "<TUTAJ WASZ prescriptionId>",
"voiId": "<TUTAJ ID Z BAZY TERYT>",
"vaccineTypes": [
"cov19.pfizer",
"cov19.moderna",
"cov19.astra_zeneca"
]
}'
Wartość dla voidId możecie wziąć stąd: https://eteryt.stat.gov.pl/eTeryt/rejestr_teryt/udostepnianie_danych/baza_teryt/uzytkownicy_indywidualni/przegladanie/przegladanie.aspx?contrast=default
W przypadku wielkopolskiego będzie to "30", w przypadku dolnośląskiego będzie to "02" etc.
Ja jeszcze nie przyjalem szczpienia. To moze miec wplyw jako, ze jesli przyjales szczepienie to nie mozesz sie samemu umowoc na druga dawke.
Wartość dla województw możesz wziąść z wikipedii: https://pl.wikipedia.org/wiki/Wojew%C3%B3dztwo :
TERYT | Województwo | Siedziba | Powierzchnia[km²], 31.12.2018[3] | Ludność(30 VI 2020)[4] | Gęstość zaludnienia[osób/km²] | Poziomurbanizacji(31 XII 2018) | Stopa bezrobocia(I 2019)[5] | PKB na 1 mieszkańca(31 XII 2018) [zł][3] | Wyróżnik na tablicachrejestracyjnych |
---|---|---|---|---|---|---|---|---|---|
02 | dolnośląskie | Wrocław | 19 947 | 2 898 525 | 145,45 | 68,61% | 5,4% | 57 228 | D |
04 | kujawsko-pomorskie | Bydgoszcz1)Toruń2) | 17 972 | 2 069 273 | 115,62 | 59,09% | 9,2% | 41 875 | C |
06 | lubelskie | Lublin | 25 122 | 2 103 342 | 84,29 | 46,46% | 8,4% | 35 712 | L |
08 | lubuskie | Gorzów Wielkopolski1)Zielona Góra2) | 13 988 | 1 010 177 | 72,53 | 64,95% | 6,2% | 42 755 | F |
10 | łódzkie | Łódź | 18 219 | 2 448 713 | 135,37 | 62,55% | 6,3% | 48 126 | E |
12 | małopolskie | Kraków | 15 183 | 3 413 931 | 223,98 | 48,19% | 4,9% | 47 272 | K |
14 | mazowieckie | Warszawa | 35 558 | 5 428 031 | 151,96 | 64,40% | 5,1% | 83 123 | W |
16 | opolskie | Opole | 9412 | 980 771 | 104,82 | 53,30% | 6,6% | 41 080 | O |
18 | podkarpackie | Rzeszów | 17 846 | 2 125 901 | 119,30 | 41,09% | 9,1% | 36 088 | R |
20 | podlaskie | Białystok | 20 187 | 1 176 576 | 58,53 | 60,79% | 8,1% | 37 077 | B |
22 | pomorskie | Gdańsk | 18 321 | 2 346 717 | 127,44 | 63,66% | 5,2% | 50 001 | G |
24 | śląskie | Katowice | 12 333 | 4 508 078 | 367,59 | 76,73% | 4,5% | 53 654 | S |
26 | świętokrzyskie | Kielce | 11 711 | 1 230 044 | 106,02 | 44,86% | 8,7% | 36 970 | T |
28 | warmińsko-mazurskie | Olsztyn | 24 173 | 1 420 514 | 59,11 | 58,99% | 10,9% | 36 306 | N |
30 | wielkopolskie | Poznań | 29 826 | 3 500 361 | 117,14 | 54,27% | 3,3% | 56 496 | P |
32 | zachodniopomorskie | Szczecin | 22 897 | 1 693 219 | 74,31 | 68,50% | 7,8% | 43 150 | Z |
TERYT, czyli ta pierwsza liczba.
@2patryk I to błąd 500, więc coś się im tam w kodzie rozjechało, bo założyli, że nikt po pierwszej dawce nie będzie szukał. Gdyby to zrobili celowo to by poleciało jakieś 4xx.
@2patryk I to błąd 500, więc coś się im tam w kodzie rozjechało, bo założyli, że nikt po pierwszej dawce nie będzie szukał. Gdyby to zrobili celowo to by poleciało jakieś 4xx.
Tak, zamiast dać 403 dają 500 bez tekstu informującego co i jak. Działało do nocy. Wygląda na szybką implemenntację nowego ograniczenia. Chociaż z drugiej strony, czy 403 czy 500, to i tak nie jest to 200 :-P
Raczej mi wygląda, że leci im wyjątek i go nie złapali, niż na celowe ograniczenie.
No i tak naprawdę bardziej obciążają system osoby które mają tylko umówiony 1 termin (bo aktywnie szukają lepszego), niż te co są już po 1.
Ja pierwszą dawką przyjąłem tydzień temu.... Więc ten wyjątek musiałby się pojawić wcześniej niż dziś w nocy :-(
Podejrzewam że większość tych co mają 1szy termin to na stronie nic nie rusza, bo musieliby go anulować by wyszukać nowy. Raczej męczą 989 .
Większości nie, ale jest ta sprytna mniejszość :)
podpowiecie jak prescriptionId wyciągnąć będąc umówiony na 1 termin? ;) x-csrf-token znalazłem w headerach, ale tego nie widzę..
podpowiecie jak prescriptionId wyciągnąć będąc umówiony na 1 termin? ;) x-csrf-token znalazłem w headerach, ale tego nie widzę..
w odpowiedzi z /api/patent/guid . (jeśli dobrze pamiętam). F12 w przeglądarce i jedziesz :-)
W przeglądarce możesz sprawdzić body zapytania na /find
. Tam powinno wszystko być.
Aaaa, jesteś umówiony już. No to nie możesz szukać. 😅
@Hieronim99 o cookie z patientid pamiętasz ?
@Hieronim99 o cookie z patientid pamiętasz ?
to było to. Mój błąd polegał na tym że na api/patient/uuid wchodziłem z paska adresu więc nie doklejał cookie. Przy copy as cURL i zapytaniu z curla działa jak ta lala. Dzięki, troche dygresja sie wydłużyła.
Podsyłam tutaj snippet który działa u mnie (mam umówiony termin, ale jeszcze jestem przed pierwszą dawką). Wystarczy coś takiego wkleić w konsoli w narzędziach deweloperskich i dostaniemy tabelkę z podstawowymi danymi (testowane pod Firefoksem):
(async () => {
// Odpowiedni kod wg https://github.com/szczepienia/szczepienia.github.io/issues/40#issuecomment-831967983
// W przykładzie dla województwa małopolskiego
const TERYT = "12";
const ensureResponse = (response) => {
if (!response.ok) {
throw new Error(`Incorrect response status code: ${response.status}`);
}
};
const statusResponse = await fetch("/api/auth/status");
ensureResponse(statusResponse);
const csrfToken = statusResponse.headers.get("x-csrf-token");
const statusData = await statusResponse.json();
const userId = statusData.user.id;
const patientResponse = await fetch(`/api/patient/${userId}`, {
headers: { "x-csrf-token": csrfToken },
});
ensureResponse(patientResponse);
const patientData = await patientResponse.json();
const prescriptionId = patientData.prescriptions[0].id;
const searchResponse = await fetch("/api/calendarSlots/find", {
method: "POST",
headers: { "content-type": "application/json", "x-csrf-token": csrfToken },
body: JSON.stringify({
dayRange: {
from: "2021-05-04",
to: "2021-05-22",
},
hourRange: {
from: "06:00",
to: "23:00",
},
prescriptionId: prescriptionId,
voiId: TERYT,
vaccineTypes: [
"cov19.pfizer",
"cov19.moderna",
"cov19.astra_zeneca"
],
}),
});
ensureResponse(searchResponse);
const searchData = await searchResponse.json();
const table = searchData.list.map((item) => ({
Termin: new Date(item.startAt).toLocaleString('pl-PL'),
Miejsce: item.servicePoint.name,
Adres: item.servicePoint.addressText,
Szczepionka: item.vaccineType,
}));
console.table(table);
})();
Bardzo ładny snippecik :) Oszczędza czas wklejania wszystkiego w ręcznie robionym requescie! Widać, że jak się ograniczymy do pfizer/moderna, to dla mazowsza trafienie terminu to czysta ruletka. Terminy wpadają i znikają w ciągu sekund.
Nie wiem czy otworzyli już sloty na czerwiec, ale w mazowieckim, o Warszawie nie mówiąc, to terminy na maj zniknęły tydzień temu... Trzeba polować . Albo ręcznie , albo wspomóc się, jakimś, programem, który to zrobi za nas. ;-)
Nie wiem czy otworzyli już sloty na czerwiec, ale w mazowieckim, o Warszawie nie mówiąc, to terminy na maj zniknęły tydzień temu... Trzeba polować . Albo ręcznie , albo wspomóc się, jakimś, programem, który to zrobi za nas. ;-)
Otworzyli.
Trochę offtop, wie ktoś co się stanie gdy Anuluje wizytę? Bo zarezerwowałem wczoraj termin, ale to widzę po strzałach do API że mogę mieć dużo wcześniej, lecz nie wiem czy gdy Anuluję wizytę w epacjente to czy będę mógł ponownie wybrać termin?
filip - bedziesz mogl. To samo robia na infolinii za Ciebie. Tylko uwazaj zeby nie przedobrzyc ;)
Gdy chcecie użyć pola geoID aby wyszukać w danym mieście to warto pamiętać ze wartość którą uzyskujemy poprzez poniższy link (Dla Wrocławia 0264011) zawiera TERYT na 2 pierwszych znakach (Dolnośląskie ma wartość 02)
Wiec 0264011 -> 02 64011
https://pacjent.erejestracja.ezdrowie.gov.pl/teryt/api/woj/02/simc?namePrefix=Wroc
Problem rozwiązany :)
Niestety na chwilę obecną straciłem dostęp do systemu (pozdrawiam Panów z CEZ). Stan widoczny jest z godziny ok 00:45.
Może uda mi się dzisiaj naprawić, jeśli nie to od niedzieli 9 maja powinniśmy wrócić do działania (nie wiem jeszcze na jak długo).