>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Kotlin

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:

Main screen Site search Downloads Book page Reading mode

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