r/wroclaw 12d ago

Stronka z seansami wrocławskich kin

Jakiś czas temu znalazłem stronkę https://allekinos.de przedstawiającą seanse ze wszystkich kin z danego miasta w jednej dużej tabelce. Wydało mi się to bardzo czytelne i pomyślałem że chciałbym mieć taki widok na seanse we Wrocławiu, a że strona jest tylko na niemieckie kina, to zrobiłem polski odpowiednik: wszystkiekina.pl

Wrzucam na r/wroclaw, bo wydaje mi się że mam komplet wrocławskich kin: https://wszystkiekina.pl/cities/wroclaw.html, czyli sieciówki, Nowe Horyzonty i DCF, a w innych miastach jest na razie tylko rozkład z sieciówek.

Stronka najwygodniejsza jest na desktopie, na telefonie trochę traci na przejrzystości.

Polecam zjechać na sam dół, bo czasami trafiają się pojedyńcze seanse naprawdę ciekawych filmów w różnych losowych kinach

45 Upvotes

35 comments sorted by

View all comments

Show parent comments

3

u/Fisent 12d ago

Na szczęście na razie mnie nie blokują, staram się "grzecznie" zachowywać i puszczam scraping tylko raz dziennie w środku nocy z delayami między requestami - już ponad rok tak robię i działa. Jeśli pojawi się więcej użytkowników to pewnie dla spokoju będę prosił o dostępy

2

u/rwbdev_pl 12d ago

Jeżeli to nie tajemnica, możesz podać jaki wygląda workflow i jakich narzędzi użyłeś? Chciałem zrobić podobną stronkę z wydarzeniami z mojej pipidówy i zastanawiam się czego użyć. Na front na pewno pójdzie statyczna strona zrobiona w Astro, ale nie wiem jak i do jakiego backendu zapisywać to co pobiorę.

1

u/Fisent 11d ago

jak coś jeszcze chcesz wiedzieć to pytaj, mogę podesłać też kod, tylko musiałbym sprawdzić czy nie mam jakichś sekretów w kodzie

1

u/rwbdev_pl 11d ago

Dzięki za wyjaśnienie. Kodu nie potrzebuję. Bardziej chodziło mi o workflow. Wymyśliłem sobie, że pobrane i wyczyszczone dane będę zapisywał do tymczasowej bazy (staging) i stamtąd ręcznie zatwierdzał do bazy produkcyjnej. I z produkcyjnej będzie generowany plik ze stroną. Muszę się tylko doszkolić z CI, bo nigdy nie korzystałem z takiego rozwiązania. Druga sprawa to duplikaty wydarzeń - nie wymyśliłem jak sobie z tym poradzić. Jeszcze inną kwestią jest sposób podawania danych przez niektóre instytucje. Jeszcze dane z WordPress, nawet dodane jako zwykły wpis, da radę pobrać przez API, ale np. lokalna biblioteka podaje harmonogram wydarzeń w postaci pliku PDF z plakatem. Z tekstem zamienionym na krzywe i o wadze 20mb. Współczuję wszystkim, którzy korzystają z czytników ekranu.

1

u/Fisent 11d ago

Fajne podejście z CI-em, profesjonalne. Co do duplikatów to jedyny pomysł jaki mam, jeśli nie ma spójnych nazw ani innych idków to jakiś lokalny llm który mógłby przemielić nazwy i wykryć ewentualne duplikaty - przy kinach mam taki problem, że czasem nazwy się rozjeżdżają, np. część kin miała Gladiator 2, a część Gladiator II. Poprawić pojedynczy przypadek jest prosto, ale zawsze znajdzie się jakiś wyjątek, więc myślę czy nie zrobić dodatkowej weryfikacji jakimś małym LLMem działającym sobie powoli na serwerze.

Z tym pdfem bez tekstu rzeczywiście słabe. Używałem dwóch bibliotek do konwertowania pdfów które mogą się tu sprawdzić: https://github.com/datalab-to/marker i https://github.com/docling-project/docling . Oprócz samego OCRa potrafią też wyciągnąć strukturę danych z pdfa w różnych formatach, więc mogą sobie nieźle poradzić z takim plikiem.

1

u/rwbdev_pl 11d ago

Z duplikatem chciałem zrobić tak, żeby za id robił url do źródła i dopiero przy przenoszeniu do bazy produkcyjnej sprawdzić /fuzzy find/ czy na dany dzień jest już taka nazwa wydarzenia w danym miejscu.

OCR to nie problem. Problemem jest sposób podawania danych. Np. harmonogram na wakacje był podany bez godzin, a poszczególne wydarzenia miały swoje plakaty, już z godzinami, dodawane bliżej daty wydarzenia. Czasem łatwiej będzie coś wpisać ręcznie niż bawić się w mielenie PDFa.

No i jest jeszcze Facebook, gdzie niektórzy dodają "Wydarzenia", co można dostać przez API, a niektórzy piszą zwykłe posty jak im się akurat przypomni. A! No i terminarz żużla, oczywiście. Generalnie fajna łamigłówka z tego wychodzi :]