Od dłuższego czasu nosiłem się z zamiarem napisania - w pewnym sensie przepisania - narzędzia do generowania kanałów RSS/Atom dla stron, które tychże nie mają. Jakiś czas temu zrobiłem już podobne narzędzie, ale 1) było okropne, oraz 2) było w PHP, co sprawiało, że było okropne. Do nowej wersji zdecydowałem, że wybiorę Go - gdzieś przeczytałem, że bardziej się do tego nada, no i Miniflux, którego używam jako czytnika RSS, jest napisany w Go, i działa. Jeszcze nie wiem, czy będę żałował tej decyzji. Zobaczymy.
GoRSSet (zgadnijcie czemu) działa na prostej zasadzie. Na podstawie dostarczonej do niego "definicji", pobiera treść strony w HTMLu (lub JSONie, jeśli strona składa się z czterech plików JS), przy użyciu selektorów CSS (albo JSONPath) wyciąga sobie rzeczy takie jak tytuł, data, link, autor, treść, następnie skleja z tego wszystkiego XMLa, którego zapisuje do pliku. Koniec. Od tej pory ten statycznie zapisany plik jest kanałem. Teraz narzędzie wraz z definicjami wrzucasz na VPSa, odpalasz jakiegoś crona, żeby ten regenerował pliki/kanały, i gotowe, MOŻNA DAWAĆ SUBA. Dodany jest super prosty caching, który nie jest nigdy czyszczony, bo jeszcze nie zdążyłem tego dopisać.
Przypomniał mi się przy okazji mem, który Oliwier z Kontrabanda.net wrzucił na tajną grupę na forum Fundacji "Internet! Czas działać!", i zainspirowany nim, postanowiłem od razu dorzucić do projektu definicję dla wiadomości od Ministerstwa Cyfryzacji. Oryginalną piaskownicą dla obecnego projektu, oraz wersji w PHP, była strona dlapilota.pl, której kanał RSS jest jak Trójkąt Bermudzki, gdzie rzeczy losowo pojawiają się i znikają. Ze stronami ministerstw jest o tyle fajnie, że wszystkie z nich korzystają z dokładnie tego samego... yyy... CMSa? Nie wiem, z czego dokładnie - ale parsuje się je dokładnie tak samo. Więc jedną definicją jestem w stanie ogarnąć dużo ministerialnych kanałów naraz.
A jak już miałem te kilkanaście kanałów, to pomyślałem, że dobrze byłoby zrobić jakąś prostą warstwę prezentacji, więc od teraz generator oprócz kanałów generuje również elegancki indeks, a kanały RSS mają style, i przeglądarka potrafi je ładnie wyświetlić, zamiast tego paskudnego XMLa. Jak chcesz zobaczyć źródło, to klikasz prawym w przeglądarce i wybierasz "Pokaż źródło strony", ty chory...
Wszystko wrzuciłem na VPS Mikrus, który kupiłem nie wiem po co, ale teraz naprawdę się przydał. VPS nie ma adresu IPv4, i nie mogę podpiąć tam domeny tak, żeby w adresie nie było portu. Certyfikatu też mi się nie chciało, ale to jest coś, co napisałem dosłownie w dwa dni, więc proszę: http://srv36.mikr.us:20156/. Certyfikat się sam zadział! https://srv36-20156.wykr.es/ (dzięki Tymoteusz za protip!) To prowizorka, więc istnieje ryzyko, że będzie działać bardzo długo i bez problemów, ale nie daję gwarancji. Kanały odświeżane są co godzinę przy pomocy tego pięknego skryptu:
while true; do ./generate; sleep 3600; done
Jestę programistę.
