>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
Kotlin

Cómo funciona Legado Reader y por qué una app Android necesita un motor JS integrado

Personalmente, rara vez presto atención a los lectores electrónicos móviles. Por lo general, son envoltorios alrededor del renderizado de texto del sistema o aplicaciones cerradas llenas de anuncios y suscripciones. Pero el repositorio de Legado captó mi atención. Bajo el capó de este lector para Android hay una arquitectura que esperarías encontrar más en un potente sistema de extracción de datos del lado del servidor que en una utilidad de lectura de libros para el tiempo libre.

La aplicación está escrita en Kotlin y se distribuye bajo la licencia GPL-3.0. Básicamente, es un raspador de páginas web, un motor de ejecución de scripts de usuario y un servidor web local combinados en una única interfaz móvil.

Qué hay dentro de un raspador móvil

Si miras la lista de dependencias en el README, queda claro cómo los autores abordaron el diseño. En lugar de estar acoplado a formatos o sitios web específicos, crearon una herramienta flexible para extraer contenido de cualquier lugar.

Así es como funciona este sistema:

  • Análisis de HTML y JSON. El proyecto utiliza Jsoup, JsoupXpath y json-path. El texto de los capítulos, los títulos y las tablas de contenido se extraen de las páginas web usando consultas XPath y JSONPath.
  • Ejecución de JavaScript. Para manejar páginas dinámicas, la aplicación incluye rhino-android (un puerto del motor JS Mozilla Rhino). Si un sitio entrega contenido mediante scripts del lado del cliente o usa marcado no trivial, Legado ejecuta JS personalizado directamente en el dispositivo.
  • Servidor web local. Se utilizan Nanohttpd y nanohttpd-websocket. La aplicación inicia un servidor HTTP y WebSocket directamente en el smartphone. Puedes introducir la dirección IP del teléfono en el navegador de tu computadora para leer libros en una pantalla grande o gestionar las reglas de análisis.
  • Editor de código integrado en la interfaz. La librería io.github.rosemoe:editor añade un editor de código con resaltado de sintaxis. Puedes ajustar una regla de extracción de texto directamente desde la pantalla del teléfono.
idea

Cómo funciona el concepto de fuentes

La característica principal de Legado es la separabilidad de la fuente de datos del propio lector. La aplicación no contiene una base de datos de libros integrada. En cambio, el usuario importa archivos de configuración en formato JSON.

Cada uno de estos archivos describe la estructura del sitio objetivo. Especifica las reglas de búsqueda de libros, las rutas a los capítulos y los selectores para extraer texto. Si un sitio está protegido por scripts simples, el código JS se integra en el configurador. El resultado es que el lector se convierte en un limpiador de contenido flexible: elimina banners, formatea párrafos y ensambla un EPUB listo para usar sobre la marcha.

Para trabajar con material lingüístico, los autores integraron HanLP — una librería de procesamiento de lenguaje natural. Esto ayuda con los textos en chino, el ajuste correcto de palabras y la conversión de caracteres.

Posibles desafíos con los que podrías encontrarte

La documentación en el propio repositorio es extremadamente escasa. El README se limita a listar las librerías utilizadas y un par de enlaces. La mayor parte de la comunidad y las reglas de análisis listas para usar están concentradas en internet chino, así que de fábrica no encontrarás mucho en inglés o ruso.

Para configurar la extracción de libros de un recurso específico en ruso, necesitarás entender el formato JSON de fuentes de Legado y escribir las reglas manualmente. Por otro lado, el editor integrado con resaltado lo facilita si estás familiarizado con XPath.

Por qué estudiar el código fuente de este proyecto

Incluso si no planeas leer novelas web, la base de código de Legado es interesante como caso de estudio técnico.

  1. Arquitectura de procesamiento en segundo plano. El código demuestra cómo organizar la carga y el análisis de páginas en paralelo sin degradar la interfaz de usuario.
  2. Integración de componentes de servidor. Usar NanoHTTPD para la comunicación teléfono-PC proporciona un ejemplo práctico de construcción de interfaces híbridas locales.
  3. Ejecución segura de JS en Android. El proyecto muestra claramente el emparejamiento de Kotlin y Rhino para manejar código de usuario.

Legado es un ejemplo interesante de cómo los entusiastas pueden convertir una aplicación móvil familiar en una plataforma avanzada para trabajar con datos. El proyecto vale la pena clonar y estudiar para desarrolladores Android que buscan ejemplos prácticos de integración de tecnologías web, motores de scripting y servicios en segundo plano en Kotlin.

Proyectos relacionados