>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

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

Jak działa Legado Reader i dlaczego aplikacja Android potrzebuje wbudowanego silnika JS

Osobiście rzadko zwracam uwagę na mobilne czytniki e-booków. Zwykle są to albo nakładki na systemowe renderowanie tekstu, albo zamknięte aplikacje wypełnione reklamami i subskrypcjami. Jednak repozytorium Legado przyciągnęło moją uwagę. Pod maską tego czytnika na Androida kryje się architektura, której spodziewałbym się raczej w potężnym narzędziu do pozyskiwania danych po stronie serwera niż w aplikacji do czytania książek.

Aplikacja jest napisana w Kotlinie i dystrybuowana na licencji GPL-3.0. Zasadniczo stanowi scraper stron internetowych, silnik wykonywania skryptów użytkownika i lokalny serwer WWW zintegrowane w jeden mobilny interfejs.

Co kryje się w mobilnym scraperze

Jeśli spojrzysz na listę zależności w README, staje się jasne, jak autorzy podeszli do projektu. Zamiast być ściśle powiązany z konkretnymi formatami lub stronami, stworzyli elastyczne narzędzie do wydobywania treści z dowolnego źródła.

Oto jak działa ten system:

  • Parsowanie HTML i JSON. Projekt wykorzystuje Jsoup, JsoupXpath i json-path. Tekst rozdziałów, tytuły i spisy treści są wydobywane ze stron internetowych za pomocą zapytań XPath i JSONPath.
  • Wykonanie JavaScript. Aby obsłużyć dynamiczne strony, aplikacja osadza rhino-android (port silnika Mozilla Rhino JS). Jeśli strona dostarcza treść za pomocą skryptów po stronie klienta lub używa nietrywialnego markupu, Legado wykonuje niestandardowy JS bezpośrednio na urządzeniu.
  • Lokalny serwer WWW. Wykorzystywane są Nanohttpd i nanohttpd-websocket. Aplikacja uruchamia serwer HTTP i WebSocket bezpośrednio na smartfonie. Możesz wpisać adres IP telefonu w przeglądarce komputera, aby czytać książki na dużym ekranie lub zarządzać regułami parsowania.
  • Edytor kodu w interfejsie. Biblioteka io.github.rosemoe:editor dodaje edytor kodu z podświetlaniem składni. Możesz dostosować regułę wydobywania tekstu bezpośrednio z ekranu telefonu.
idea

Jak działa koncepcja źródeł

Główną cechą Legado jest oddzielanie źródła danych od samego czytnika. Aplikacja nie zawiera wbudowanej bazy książek. Zamiast tego użytkownik importuje pliki konfiguracyjne w formacie JSON.

Każdy taki plik opisuje strukturę strony docelowej. Określa reguły wyszukiwania książek, ścieżki do rozdziałów i selektory do wydobywania tekstu. Jeśli strona jest chroniona prostymi skryptami, kod JS jest osadzany w konfiguratorze. W rezultacie czytnik zamienia się w elastyczny cleaner treści: usuwa banery, formatuje akapity i składa gotowy EPUB w locie.

Do pracy z materiałem lingwistycznym autorzy zintegrowali HanLP — bibliotekę do przetwarzania języka naturalnego. Pomaga to w przypadku tekstów chińskich, prawidłowego zawijania wyrazów i konwersji znaków.

Potencjalne wyzwania, z którymi możesz się spotkać

Dokumentacja w samym repozytorium jest niezwykle skąpa. README ogranicza się do wymienienia używanych bibliotek i kilku linków. Większość społeczności i gotowych reguł parsowania jest skoncentrowana w chińskim internecie, więc od razu nie znajdziesz zbyt wiele w języku angielskim czy rosyjskim.

Aby skonfigurować wydobywanie książek z konkretnego rosyjskojęzycznego źródła, musisz zrozumieć format JSON źródeł w Legado i napisać reguły ręcznie. Z drugiej strony wbudowany edytor z podświetlaniem to ułatwia, jeśli znasz XPath.

Dlaczego warto badać kod źródłowy tego projektu

Nawet jeśli nie planujesz czytać powieści internetowych, baza kodu Legado jest interesująca jako studium przypadku.

  1. Architektura przetwarzania w tle. Kod demonstruje, jak zorganizować równoległe ładowanie i parsowanie stron bez pogorszenia interfejsu użytkownika.
  2. Osadzanie komponentów serwerowych. Użycie NanoHTTPD do komunikacji telefon-PC dostarcza praktyczny przykład budowania lokalnych hybrydowych interfejsów.
  3. Bezpieczne wykonanie JS na Androidzie. Projekt wyraźnie pokazuje parowanie Kotlina i Rhino do obsługi kodu użytkownika.

Legado to interesujący przykład tego, jak entuzjaści mogą przekształcić znaną aplikację mobilną w zaawansowaną platformę do pracy z danymi. Projekt warto sklonować i przestudiować programistom Androida szukającym praktycznych przykładów integracji technologii webowych, silników skryptowych i usług działających w tle w Kotlinie.

Powiązane projekty