szczepienia.github.io icon indicating copy to clipboard operation
szczepienia.github.io copied to clipboard

Źródło danych

Open gagyn opened this issue 3 years ago • 15 comments

Cześć, z ciekawości pytam, w jaki sposób uzyskujesz dane? Ręcznie, czy jest jakiś endpoint z którego wszystko pobierasz? Czy są one na bieżąco aktualizowane?

gagyn avatar Apr 23 '21 11:04 gagyn

Ze strony erejestracji, tam jak wejdziesz to widać endpointy. Aktualizacje obecnie starm się robić raz na godzinę (póki co robie to ręcznie, ale niedługo przejde na automat).

szczepienia avatar Apr 23 '21 11:04 szczepienia

Szukam i nie widzę. Widać je po zalogowaniu? Czy trzeba mieć już wystawione skierowanie?

gagyn avatar Apr 23 '21 11:04 gagyn

Trzeba mieć wystawione skierowanie, wtedy pokaże się wyszukiwarka i tam w tle już widać jakie endpointy lecą.

szczepienia avatar Apr 23 '21 11:04 szczepienia

A dobra, wszystko jasne, dzięki za odpowiedź :) To trzymam kciucki za automatyzację tego 👍 Pewnie na github actions?

gagyn avatar Apr 23 '21 11:04 gagyn

Tak, dokładnie na github actions :)

szczepienia avatar Apr 23 '21 12:04 szczepienia

@szczepienia Czy mógłbyś podać te endpointy? Jest jakiś sposób, żeby poprawić wydajność/zwiększyć przepustowość aby była możliwość dodania większej liczby miast/punktów?

themysteq avatar Apr 29 '21 08:04 themysteq

@szczepienia gdybyś ujawnił (ujawniła?) kod źródłowy scrapera to pewnie znalazłoby się trochę osób, które chętnie pomogły by w optymalizacji 🙂

Korzystając z okazji – dzięki! Świetny pomysł, ja już zaoszczędziłem kilkadziesiąt kilometrów i dzień urlopu.

rogatty avatar Apr 29 '21 14:04 rogatty

Przyłączam się do sugestii od @rogatty Otwarte źródło pozwoliło by nam dodać jakieś fajniejsze ficzery, jak np wyszukiwanie wg odległości itp. Jeszcze sporo ludzi będzie z tego korzystać, my pewnie też po drugą dawkę :)

Też korzystając z okazji - dzięki! Tak jak @rogatty zaoszczędziłem dzięki tobie parę kilometrów i dzień urlopu!

pawelchcki avatar Apr 29 '21 18:04 pawelchcki

Nie ma problemu z optymalizacją, tylko z tym, że prędzej czy później moja metoda zostanie zablokowana przez MZ, im więcej osób będzie w tem sam sposób używało tym szybciej to się stanie. Moge zapuścić wyszukiwanie nawet co 5 min dla całej Polski, ale pewnie na drugi dzień dostane blokadę.

Już zniknęło wyszukiwanie J&J, wolałbym, żeby pozostałe rodzaje pozostały.

BTW. na drugą dawkę nie umawiasz się sam, tylko punkt w ktorym się zaszczepisz umawia Ciebie na temin wewnętrzny (nie widoczny w wyszukiwaniu) do tego samego punktu (tego nie da się zmienić chyba, że punkt przestanie istnieć)i nie możesz zmenić daty inaczej niż dzwoniąc do danego punktu.

Najczęściej przybijają Ci pieczątkę z datą i zero negocjacji :)

szczepienia avatar Apr 29 '21 19:04 szczepienia

@szczepienia udało Cię złapać kontakt z kimś bliżej MC lub COI? Może da radę dostać od nich jakieś API Proxy z kluczami dla wybrańców + rate limiting.

Pytanie tylko czy cały ten pomysł nie jest przeciwko idei programu szczepień (aka hakowanie procesu) i komuś z góry przestanie się podobać i poleci blokada.

themysteq avatar May 02 '21 12:05 themysteq

To tak w ramach burzy mózgów. Ponieważ zabrali mi wejście z którego korzystałem, zostało tylko oficjalne. Więc jeśli strona miała by działać to musiałbym codziennie z rana otrzymywać:

  1. Ciasteczko patient_sid
  2. header X-Csrf-Token
  3. prescriptionId

W skali kraju pewnie by się znalazły chętne osoby aby takie dane przekazać (jedyne co haker mógłby z tym zrobić to odwołać wizytę). Sesja jest otwarta 12 godzin, więc dało by się z tym pracować.

Problem jest taki: te dane wyciągnie tylko ktoś kto otworzy w przeglądarce DevToolsy (trzeba dorwać response na request https://pacjent.erejestracja.ezdrowie.gov.pl/api/patient/JAKIES_UUID ) (najlepiej "Copy as CURL").

No i teraz pytanie jak takie coś zrobić aby każda nie techniczna osoba była w stanie przesłać? (i w jaki sposób, pewnie tylko twitter i priv). Najprostsze to zrobić filmik :), ale nie wiem czy się znajdzie odważny który by przesłał mi te 3 dane (codziennie może być inna osoba).

szczepienia avatar May 04 '21 07:05 szczepienia

Skoro burza mózgów to zaproponuję inne podejście. Najczystsze wydaje mi się zastąpienie strony rozszerzeniem do przeglądarki. W ten sposób można by korzystać z ciastek użytkownika. Pewnie nie byłoby potrzeby scrape'owania wszystkich terminów w całej Polsce. Można by zrobić jakieś wstępne filtrowanie, np. po wybranym województwie. Być może rozwiązałoby to problem z małymi miejscowościami?

Możliwe, że to by wymagało napisania dużej ilości kodu od nowa, na co możesz nie mieć ochoty. Rzucam jako luźny pomysł :)

rogatty avatar May 04 '21 08:05 rogatty

Hej, a jest szansa żebyś wkleił urla do endpointu, który wyszukuje te terminy? Tak na własny użytek: chodzi o to żebym będąc zalogowana mogła sobie w dev toolsach to wywołać i podejrzeć terminy bez konieczności anulowania aktualnie umówionej wizyty. Po prostu mam już umówioną i nie chcę jej anulować, żeby sprawdzić co tam leci pod spodem :)

Czy dopiero jak masz aktywne prescription to ten endpoint ci cos zwróci? Szczerze mówiąc liczyłam na to że da się zwrócić listę terminów bez względu na aktywne skierowanie, tylko nie ma takiej możliwości z UI.

agahirsztritt avatar May 04 '21 12:05 agahirsztritt

Skoro burza mózgów to zaproponuję inne podejście. Najczystsze wydaje mi się zastąpienie strony rozszerzeniem do przeglądarki. W ten sposób można by korzystać z ciastek użytkownika. Pewnie nie byłoby potrzeby scrape'owania wszystkich terminów w całej Polsce. Można by zrobić jakieś wstępne filtrowanie, np. po wybranym województwie. Być może rozwiązałoby to problem z małymi miejscowościami?

Możliwe, że to by wymagało napisania dużej ilości kodu od nowa, na co możesz nie mieć ochoty. Rzucam jako luźny pomysł :)

Można napisać skrypt Greasemonkey/Tampermonkey, który wysyłałby tokeny do serwisu za zgodą użytkownika - najpierw by sprawdził czy jest taki token potrzebny (akcja użytkownika "Sprawdz czy potrzebujemy wsparcia!") a jeśli jest to pyta użytkownika drugi raz czy na pewno chce się nim podzielić i po potwierdzeniu wysyła go w dane miejsce. A z tego miejsca z drugiej strony aplikacja "szczepienia" wyciąga go sobie w celu pobrania danych. Wilk syty i owca cała a działa automatycznie.

themysteq avatar May 04 '21 13:05 themysteq

Hej, a jest szansa żebyś wkleił urla do endpointu, który wyszukuje te terminy?

  1. Zeby wyciagnac prescriptionId bedac umowionym:
curl 'https://pacjent.erejestracja.ezdrowie.gov.pl/api/patient/bf2259ff-da1c-4248-aa12-1161b0154c5c' \
  -H 'authority: pacjent.erejestracja.ezdrowie.gov.pl' \
  -H 'accept: application/json, text/plain, */*' \
  -H 'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0' \
  -H 'x-csrf-token: <do uzupelnienia z zapytania>' \
  -H 'sec-fetch-site: same-origin' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-dest: empty' \
  -H 'referer: https://pacjent.erejestracja.ezdrowie.gov.pl/wizyty' \
  -H 'accept-language: pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7' \
  -H 'cookie: patient_sid=<do uzupelnienia z cookies>' \
  --compressed

  1. Odpytanie endpointa mając (aktywne) prescriptionId opisane juz obok: `https://github.com/szczepienia/szczepienia.github.io/issues/40#issuecomment-831963796

Hieronim99 avatar May 04 '21 16:05 Hieronim99