szczepienia / szczepienia.github.io

Generacja danych w https://github.com/krzyk/szczepimy
https://szczepienia.github.io
92 stars 9 forks source link

Strona chwilowo nie aktualizowana #40

Closed szczepienia closed 3 years ago

szczepienia commented 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).

mostaszewski commented 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?

malysopel commented 3 years ago

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.

malysopel commented 3 years ago

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

2patryk commented 3 years ago

@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)

szczepienia commented 3 years ago

Potwierdzam, a tydzień temu można było jeszcze użyć ID skierowania od innej osoby.

szczepienia commented 3 years ago

@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

krzysiek1507 commented 3 years ago

A cov19.johnson_and_johnson nie zwracało?

szczepienia commented 3 years ago

J&J też zwraca, ale nie jeśli jesteś zaszczepiony już jedną dawką innej szczepionki :)

pogarek commented 3 years ago

tzn. zwracało :-)

filiplipinski commented 3 years ago

Hej, testuje i strzelam sobie do API, zwraca odpowiedź dla wszystkich miast, czy wiecie jak filtrować odpowiedź po miastach ?

pogarek commented 3 years ago

@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..

szczepienia commented 3 years ago

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.

ttomasz1 commented 3 years ago

@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 commented 3 years ago

@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)

pogarek commented 3 years ago

Zaloguj się do portalu w przeglądarce, F12 (Developer Mode) i szukasz w zakładce Network (Sieć)

heisenburgerous commented 3 years ago

Zrobił już ktoś może dla Krakowa??

malysopel commented 3 years ago

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

cytadela8 commented 3 years ago

@2patryk Działa! Ważna obserwacja: zaczęli wymagać sensownego User-Agenta. tzn. User-Agent: curl/7.76.1 nie przejdzie :P

szczepienia commented 3 years ago

@cytadela8 A tak z ciekawości, jaki dają resposne gdy jest niepoprawny/brakujący user-agent?

2patryk commented 3 years ago

@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)

cytadela8 commented 3 years ago

403 Forbidden. Wzialem user agent z przegladarki z sesji, takze moga jeszczr robic takie powiazanie.

mostaszewski commented 3 years ago

Ł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.

cytadela8 commented 3 years ago

Ja jeszcze nie przyjalem szczpienia. To moze miec wplyw jako, ze jesli przyjales szczepienie to nie mozesz sie samemu umowoc na druga dawke.

szczepienia commented 3 years ago

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.

szczepienia commented 3 years ago

@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.

pogarek commented 3 years ago

@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

szczepienia commented 3 years ago

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.

pogarek commented 3 years ago

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 .

szczepienia commented 3 years ago

Większości nie, ale jest ta sprytna mniejszość :)

Hieronim99 commented 3 years ago

podpowiecie jak prescriptionId wyciągnąć będąc umówiony na 1 termin? ;) x-csrf-token znalazłem w headerach, ale tego nie widzę..

pogarek commented 3 years ago

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 :-)

krzysiek1507 commented 3 years ago

W przeglądarce możesz sprawdzić body zapytania na /find. Tam powinno wszystko być.

krzysiek1507 commented 3 years ago

Aaaa, jesteś umówiony już. No to nie możesz szukać. 😅

pogarek commented 3 years ago

@Hieronim99 o cookie z patientid pamiętasz ?

Hieronim99 commented 3 years ago

@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.

trojanowski commented 3 years ago

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);
})();
Screenshot 2021-05-04 at 19 08 11
dilbert5150 commented 3 years ago

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.

pogarek commented 3 years ago

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. ;-)

mataha commented 3 years ago

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.

filiplipinski commented 3 years ago

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?

dilbert5150 commented 3 years ago

filip - bedziesz mogl. To samo robia na infolinii za Ciebie. Tylko uwazaj zeby nie przedobrzyc ;)

L0R3nz commented 3 years ago

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

szczepienia commented 3 years ago

Problem rozwiązany :)