Jak zbudowano czytnik powieści internetowych QuickNovel w Kotlin
Miłośnicy azjatyckich powieści lekkich i anglojęzycznej fikcji z Royal Road regularnie napotykają ten sam problem. Czytanie powieści internetowych na telefonie przez przeglądarkę jest niewygodne: strony są zaśmiecone banerami, pojawiają się automatycznie odtwarzane filmy, a nawet nie można otworzyć rozdziału w metrze bez połączenia sieciowego.
Projekt QuickNovel próbuje radicalnie rozwiązać ten problem. To darmowa aplikacja na Androida typu open-source, która wydobywa czysty tekst z dziesiątek stron i przekształca go w porządne książki offline.
Dlaczego potrzebny jest osobny agregator
W przeciwieństwie do standardowych czytników, takich jak Moon+ Reader, QuickNovel obsługuje również dostarczanie treści. Autorzy nie przechowują książek na własnym serwerze — aplikacja działa podobnie do wyszukiwarki. Wpisujesz tytuł, QuickNovel wysyła żądania do obsługiwanych platform, pobiera strony HTML, oczyszcza je ze śmieci i składa rozdziały w ujednoliconą strukturę.
Lista źródeł obejmuje około czterdziestu zasobów. Wśród nich znajdują się duże anglojęzyczne katalogi, takie jak Royal Road, Scribble Hub i Anna's Archive, a także konkretne agregatory tłumaczeń.
Tak wygląda interfejs aplikacji podczas wyszukiwania i pobierania:

Co interesującego w kodzie źródłowym
Aplikacja jest całkowicie napisana w Kotlinie na licencji GPL-3.0. Jeśli tworzysz aplikacje na Androida, w kodzie repozytorium znajdziesz kilka praktycznych rozwiązań.
Modułowy system parserów
Najbardziej złożoną częścią takich aplikacji jest obsługa wielu różnych stron. W QuickNovel każde źródło jest opisane przez abstrakcję dostawcy. Klasa bazowa definiuje reguły wyszukiwania, pobierania metadanych i parsowania tekstu rozdziałów. Dodanie nowej strony sprowadza się do utworzenia jednego pliku z odpowiednimi selektorami CSS lub punktami końcowymi JSON.
Budowanie i pakowanie do EPUB
QuickNovel potrafi nie tylko renderować tekst w wbudowanym czytniku, ale także pakować pobrane rozdziały do standardowego formatu EPUB. Jest to wygodne, jeśli wolisz czytać za pomocą zewnętrznych czytników lub na czytniku e-booków.
Główny problem tego podejścia
Web scraping ma nieuniknioną wadę. Gdy tylko właściciele stron zmienią układ, przeniosą się na nową domenę lub włączą agresywną ochronę Cloudflare, parser przestaje działać.
W repozytorium projektu jest obecnie około 250 otwartych zgłoszeń. Większość z nich dotyczy niedziałających dostawców. Rozwój opiera się tutaj na aktywności społeczności: ktoś zauważa awarię, naprawia selektor CSS w kodzie i przesyła pull request.
Komu przyda się ten projekt
QuickNovel warto zainstalować, jeśli aktywnie czytasz fikcję internetową i chcesz pozbyć się reklam oraz zależności od łączności internetowej.
A dla programistów Kotlina to dobry przykład, jak zorganizować asynchroniczne ładowanie setek stron, operacje na systemie plików i parsowanie HTML w prawdziwej aplikacji mobilnej. Kod źródłowy jest dostępny na GitHubie.
Powiązane projekty