Automatyzacja pobierania danych ze stron do własnej bazy
Protokoły meczowe ligi unihokeja leżały na cudzej stronie, po jednym na mecz. Zbudowaliśmy proces, który je pobiera, sprawdza i zapisuje we własnej bazie: 320 meczów i 3672 gole z pięciu sezonów.
- protokołów meczowych w bazie
- 320protokołów meczowych w bazie
- sezonów w jednym miejscu
- 5sezonów w jednym miejscu
- zgodność z oficjalną tabelą
- 1:1zgodność z oficjalną tabelą
Co było robione ręcznie
Ekstraliga unihokeja po każdym meczu publikuje protokół: kto strzelił, w której sekundzie, kto dostał karę i za co. Każdy protokół to osobna podstrona w serwisie związku. Żeby policzyć cokolwiek ponad wynik, trzeba przepisywać protokoły ręcznie, jeden po drugim.
Jeden sezon to ponad sześćdziesiąt meczów, a sezonów w archiwum jest pięć. Trzysta dwadzieścia protokołów przepisanych ręcznie to praca, do której nikt nie siada. Dlatego statystyk ponad tabelą i klasyfikacją strzelców w tej lidze po prostu nie było.
Co zbudowaliśmy
Zbudowaliśmy proces i uruchomiliśmy go u siebie, na własnym serwisie ze statystykami tej ligi. Proces sam chodzi po kalendarzu sezonu, pobiera każdy protokół i wyciąga z niego gole co do sekundy, asysty, kary, składy i frekwencję. Do bazy Postgres trafiają surowe zdarzenia, a każda statystyka to widok SQL. Nowy wskaźnik dopisujemy bez ponownego pobierania czegokolwiek.
Najwięcej pracy kosztowały pułapki źródła. Zawodnicy nie mają identyfikatorów, bramka samobójcza nie ma strzelca, a niewykorzystany karny wygląda w kodzie strony jak gol, choć golem nie jest. Flagi gry w przewadze mylą się w obie strony: w sezonie 2025/26 szesnaście goli w przewadze poszło bez flagi, a dwie flagi wisiały bez żadnej kary. Dlatego stan gry liczy własny silnik, z osi czasu kar.
Jak to działa
- 01
Wejście przez kalendarz
Proces chodzi wyłącznie po linkach z kalendarza sezonu. Adres meczu zgadnięty ręcznie kończy się odmową dostępu.
- 02
Odczyt protokołu
Ze strony meczu proces zbiera gole co do sekundy, asysty, kary, składy i frekwencję. Pobrany HTML zostaje w pamięci podręcznej, więc powtórka nie rusza sieci.
- 03
Sklejenie osób
Zawodnicy nie mają w źródle identyfikatorów, a imię i nazwisko bywają zamienione miejscami. Klucz osoby powstaje z posortowanych członów nazwy.
- 04
Przeliczenie kar
Kary 2, 5, 10 i 20 minut rządzą się różnymi regułami. Z osi czasu kar proces liczy przewagę i osłabienie, zamiast wierzyć flagom z protokołu.
Sprawdzenie i publikacja
Policzoną tabelę porównujemy z oficjalną tabelą ligi. Świeże dane wypuszcza na stronę człowiek, dopiero gdy wszystko się zgadza.
- 01Krok 01
Wejście przez kalendarz
Proces chodzi wyłącznie po linkach z kalendarza sezonu. Adres meczu zgadnięty ręcznie kończy się odmową dostępu.
- 02Krok 02
Odczyt protokołu
Ze strony meczu proces zbiera gole co do sekundy, asysty, kary, składy i frekwencję. Pobrany HTML zostaje w pamięci podręcznej, więc powtórka nie rusza sieci.
- 03Krok 03
Sklejenie osób
Zawodnicy nie mają w źródle identyfikatorów, a imię i nazwisko bywają zamienione miejscami. Klucz osoby powstaje z posortowanych członów nazwy.
- 04Krok 04
Przeliczenie kar
Kary 2, 5, 10 i 20 minut rządzą się różnymi regułami. Z osi czasu kar proces liczy przewagę i osłabienie, zamiast wierzyć flagom z protokołu.
- Krok 05
Sprawdzenie i publikacja
Policzoną tabelę porównujemy z oficjalną tabelą ligi. Świeże dane wypuszcza na stronę człowiek, dopiero gdy wszystko się zgadza.
Jakich narzędzi użyto w tej automatyzacji
Node.js
parser protokołów i skrypty odświeżania
Neon Postgres
baza zdarzeń meczowych
Widoki SQL (PostgreSQL)
każda statystyka to jeden widok
React
strona ze statystykami
Vite
wypiek danych do statycznej strony
Cloudflare
hosting, publikacja w 2–3 minuty
Co się zmieniło
Pięć sezonów, 320 meczów i 3672 gole leżą dziś w jednej bazie, nie w setkach protokołów. Tabela policzona ze zdarzeń zgadza się co do punktu z oficjalną tabelą ligi, a po każdej kolejce jedna komenda dokłada nowe mecze i od razu je sprawdza.
Ten sam schemat (pobrać z cudzej strony, sprawdzić z oryginałem i trzymać u siebie) przenosimy na firmy zależne od danych publikowanych przez kogoś innego: ceny konkurencji, ogłoszenia przetargowe, rejestry, notowania surowców.
Mają Państwo podobny proces u siebie?
Prosimy o kontakt i kilka zdań o tym, co zajmuje najwięcej czasu. Odezwiemy się, a jeśli to ma sens, pokażemy działającą próbkę na Państwa danych, zanim padnie słowo o cenie.
Powiązane automatyzacje
Automatyzacja treści na social media dla klubu sportowego
Po każdej kolejce ktoś musiał ręcznie sprawdzić tabelę, statystyki i napisać relację. Zbudowaliśmy proces, który pobiera dane z sieci, a AI pisze gotowe teksty do zatwierdzenia.
ZobaczAutomatyzacja księgowania faktur ze zdjęcia
Zamiast przepisywać każdą fakturę ręcznie do arkusza, wskazujemy plik, a AI odczytuje dane, przelicza walutę i zapisuje wpis w bazie.
ZobaczAutomatyzacja grafik na Instagram i Facebook
Spójne, markowe grafiki na social media składają się z gotowego systemu, zamiast być klikane od zera w Canvie.
ZobaczAutomatyzacja pozyskiwania leadów
Zamiast godzinami przeszukiwać Google Maps, proces sam znajduje firmy, sprawdza je i pisze spersonalizowaną wiadomość gotową do wysłania.
ZobaczAutomatyzacja rejestracji online i przypomnień SMS
W aplikacji kliniki rejestracje, potwierdzenia, przypomnienia i prośby o opinię dzieją się same. Mniej telefonów na recepcji, mniej nieodwołanych wizyt.
ZobaczPodmiana produktu na zdjęciu bez nowej sesji
Skład zestawu prezentowego zmienia się w trakcie sezonu, a zdjęcie przestaje się zgadzać. Zamiast nowej sesji: zaznaczenie produktu ramką, wybór zamiennika i cztery gotowe warianty po minucie.
ZobaczZestawy wielosztukowe dla 2700 produktów
Sklep sprzedaje ten sam produkt pojedynczo i w wielopakach. Każdy wielopak potrzebuje własnego zdjęcia, opisu i kodu. Proces przygotował 2692 takie zestawy.
ZobaczCzat nad raportem dziennym restauracji
Raport dzienny restauracji był wpisywany do Excela — każdy dzień jako osobna zakładka. Po ponad roku było ich 446. Dziś dane trafiają do bazy Postgres, którą odpytuje się czatem AI po polsku.
Zobacz