Come funziona Legado Reader e perché un'app Android ha bisogno di un motore JS integrato
Personalmente, raramente presto attenzione agli e-reader mobile. Di solito sono semplici wrapper attorno al rendering del testo di sistema o app chiuse piene di pubblicità e abbonamenti. Ma il repository Legado ha catturato la mia attenzione. Sotto il cofano di questo reader Android si nasconde un'architettura che ti aspetteresti più facilmente di trovare in un potente strumento di raccolta dati lato server che in un'utilità di lettura per il tempo libero.
L'app è scritta in Kotlin e distribuita sotto licenza GPL-3.0. In sostanza, è un web page scraper, un motore di esecuzione di user script e un server web locale, il tutto in un'unica interfaccia mobile.
Cosa c'è dentro uno scraper mobile
Se guardi la lista delle dipendenze nel README, diventa chiaro come gli autori abbiano affrontato il design. Invece di essere strettamente accoppiato a formati o siti web specifici, hanno creato uno strumento flessibile per estrarre contenuti da qualsiasi luogo.
Ecco come funziona questo sistema:
- Parsing HTML e JSON. Il progetto usa Jsoup, JsoupXpath e json-path. Il testo dei capitoli, i titoli e i sommari vengono estratti dalle pagine web usando query XPath e JSONPath.
- Esecuzione JavaScript. Per gestire le pagine dinamiche, l'app incorpora rhino-android (una porta del motore JS Mozilla Rhino). Se un sito fornisce contenuti tramite script lato client o usa markup non banali, Legado esegue JS personalizzato direttamente sul dispositivo.
- Server web locale. Vengono utilizzati Nanohttpd e nanohttpd-websocket. L'app avvia un server HTTP e WebSocket direttamente sullo smartphone. Puoi inserire l'indirizzo IP del telefono nel browser del computer per leggere i libri su uno schermo grande o gestire le regole di parsing.
- Editor di codice integrato nell'interfaccia utente. La libreria io.github.rosemoe:editor aggiunge un editor di codice con evidenziazione della sintassi. Puoi modificare una regola di estrazione del testo direttamente dallo schermo del telefono.
Come funziona il concetto di sorgente
La caratteristica principale di Legado è la separabilità della sorgente dati dal reader stesso. L'app non contiene un database di libri integrato. Invece, l'utente importa file di configurazione in formato JSON.
Ogni tale file descrive la struttura del sito target. Specifica le regole di ricerca per i libri, i percorsi ai capitoli e i selettori per l'estrazione del testo. Se un sito è protetto da script semplici, il codice JS viene incorporato nel configuratore. Il risultato è che il reader si trasforma in un pulitore di contenuti flessibile: rimuove i banner, formatta i paragrafi e assembla un EPUB pronto all'uso al volo.
Per lavorare con materiale linguistico, gli autori hanno integrato HanLP — una libreria di elaborazione del linguaggio naturale. Questo aiuta con i testi cinesi, il corretto ritorno a capo delle parole e la conversione dei caratteri.
Sfide potenziali che potresti incontrare
La documentazione nel repository stesso è estremamente scarsa. Il README si limita a elencare le librerie utilizzate e un paio di link. La maggior parte della comunità e delle regole di parsing pronte sono concentrate nell'internet cinese, quindi out of the box non troverai molto in inglese o russo.
Per configurare l'estrazione di libri da una risorsa specifica in lingua russa, dovrai capire il formato JSON sorgente di Legado e scrivere le regole manualmente. D'altra parte, l'editor integrato con evidenziazione rende tutto più semplice se conosci XPath.
Perché studiare il codice sorgente di questo progetto
Anche se non hai intenzione di leggere romanzi web, il codebase di Legado è interessante come caso di studio tecnico.
- Architettura di elaborazione in background. Il codice dimostra come organizzare il caricamento e il parsing delle pagine in parallelo senza degradazione dell'interfaccia utente.
- Integrazione di componenti server. L'uso di NanoHTTPD per la comunicazione telefono-PC fornisce un esempio pratico di costruzione di interfacce ibride locali.
- Esecuzione JS sicura su Android. Il progetto mostra chiaramente l'accoppiamento Kotlin e Rhino per la gestione del codice utente.
Legado è un esempio interessante di come gli appassionati possano trasformare una familiare app mobile in una piattaforma avanzata per lavorare con i dati. Il progetto vale la pena di essere clonato e studiato per gli sviluppatori Android che cercano esempi pratici di integrazione di tecnologie web, motori di scripting e servizi in background in Kotlin.
Progetti correlati