Comment fonctionne Legado Reader et pourquoi une application Android a besoin d'un moteur JS intégré
Personnellement, je m'intéresse rarement aux lecteurs e-book mobiles. D'habitude, ce sont soit des surcouches de rendu texte système, soit des applications fermées bourrées de publicités et d'abonnements. Mais le dépôt Legado a attiré mon attention. Sous le capot de ce lecteur Android se cache une architecture qu'on s'attendrait davantage à trouver dans un outil de collecte de données côté serveur que dans un utilitaire de lecture de livres.
L'application est écrite en Kotlin et distribuée sous licence GPL-3.0. En substance, c'est un grattoir de pages web, un moteur d'exécution de scripts utilisateur et un serveur web local regroupés dans une seule interface mobile.
Ce qu'il y a à l'intérieur d'un grattoir mobile
Si vous regardez la liste des dépendances dans le README, la démarche de conception devient claire. Au lieu d'être fortement couplé à des formats ou sites spécifiques, les auteurs ont créé un outil flexible pour extraire du contenu de n'importe où.
Voici comment ce système fonctionne :
- Analyse HTML et JSON. Le projet utilise Jsoup, JsoupXpath et json-path. Le texte des chapitres, les titres et les tables des matières sont extraits des pages web via des requêtes XPath et JSONPath.
- Exécution JavaScript. Pour gérer les pages dynamiques, l'application intègre rhino-android (un port du moteur JS Mozilla Rhino). Si un site livre du contenu via des scripts côté client ou utilise un balisage non trivial, Legado exécute du JS personnalisé directement sur l'appareil.
- Serveur web local. Nanohttpd et nanohttpd-websocket sont utilisés. L'application démarre un serveur HTTP et WebSocket directement sur le smartphone. Vous pouvez entrer l'adresse IP du téléphone dans le navigateur de votre ordinateur pour lire des livres sur grand écran ou gérer les règles de parsing.
- Éditeur de code intégré à l'interface. La bibliothèque io.github.rosemoe:editor ajoute un éditeur de code avec coloration syntaxique. Vous pouvez ajuster une règle d'extraction de texte directement depuis l'écran du téléphone.
Comment fonctionne le concept de sources
La fonctionnalité principale de Legado est la séparabilité de la source de données par rapport au lecteur lui-même. L'application ne contient pas de base de données de livres intégrée. À la place, l'utilisateur importe des fichiers de configuration au format JSON.
Chacun de ces fichiers décrit la structure du site cible. Il spécifie les règles de recherche de livres, les chemins vers les chapitres et les sélecteurs pour extraire le texte. Si un site est protégé par des scripts simples, du code JS est intégré dans le configurateur. Le résultat est que le lecteur se transforme en un nettoyeur de contenu flexible : il supprime les bannières, formate les paragraphes et assemble un EPUB prêt à l'emploi à la volée.
Pour le travail avec du matériel linguistique, les auteurs ont intégré HanLP — une bibliothèque de traitement du langage naturel. Cela aide avec les textes chinois, le retour à la ligne correct et la conversion de caractères.
Défis potentiels auxquels vous pourriez être confronté
La documentation dans le dépôt lui-même est extrêmement clairsemée. Le README se limite à lister les bibliothèques utilisées et quelques liens. La majeure partie de la communauté et des règles de parsing prêtes à l'emploi sont concentrées sur l'internet chinois, donc de base vous ne trouverez pas grand-chose en anglais ou en russe.
Pour configurer l'extraction de livres depuis une ressource russe spécifique, vous devrez comprendre le format de source JSON de Legado et écrire les règles manuellement. D'un autre côté, l'éditeur intégré avec coloration syntaxique facilite cette tâche si vous êtes familier avec XPath.
Pourquoi étudier le code source de ce projet
Même si vous ne prévoyez pas de lire des romans web, la base de code de Legado est intéressante comme étude de cas technique.
- Architecture de traitement en arrière-plan. Le code démontre comment organiser le chargement et le parsing de pages en parallèle sans dégradation de l'interface.
- Intégration de composants serveur. Utiliser NanoHTTPD pour la communication téléphone-PC fournit un exemple pratique de construction d'interfaces hybrides locales.
- Exécution JS sécurisée sur Android. Le projet montre clairement le pairing Kotlin et Rhino pour gérer du code utilisateur.
Legado est un exemple intéressant de la façon dont des passionnés peuvent transformer une application mobile familière en une plateforme avancée pour travailler avec des données. Le projet mérite d'être cloné et étudié pour les développeurs Android cherchant des exemples pratiques d'intégration de technologies web, de moteurs de script et de services en arrière-plan en Kotlin.
Projets similaires