Wszystkie automatyzacje
    Case study · Dane ze stron do bazy

    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.

    Łukasz Chlebda 6 września 2026
    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.

    Krok po kroku

    Jak to działa

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

      Node.js
    2. 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.

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

      Neon
    4. 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.

    5. Sprawdzenie i publikacja

      Policzoną tabelę porównujemy z oficjalną tabelą ligi. Świeże dane wypuszcza na stronę człowiek, dopiero gdy wszystko się zgadza.

      Cloudflare
    Technologia

    Jakich narzędzi użyto w tej automatyzacji

    Node.js

    Node.js

    parser protokołów i skrypty odświeżania

    Neon Postgres

    Neon Postgres

    baza zdarzeń meczowych

    Widoki SQL (PostgreSQL)

    Widoki SQL (PostgreSQL)

    każda statystyka to jeden widok

    React

    React

    strona ze statystykami

    Vite

    Vite

    wypiek danych do statycznej strony

    Cloudflare

    Cloudflare

    hosting, publikacja w 2–3 minuty

    Efekt

    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.

    Więcej

    Powiązane automatyzacje

    Case study

    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.

    Zobacz
    Case study

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

    Zobacz
    Case study

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

    Zobacz
    Case study

    Automatyzacja pozyskiwania leadów

    Zamiast godzinami przeszukiwać Google Maps, proces sam znajduje firmy, sprawdza je i pisze spersonalizowaną wiadomość gotową do wysłania.

    Zobacz
    Case study

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

    Zobacz
    Case study

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

    Zobacz
    Case study

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

    Zobacz
    Case study

    Czat 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