Hacer un plugin de XBMC es muy sencillo, lo que queda patente si echamos un vistazo al escaso número de líneas de código de algunos de los plugins más populares. Otra cosa es que la documentación que hay es escasa, y no muy buena.
Para simplificar el desarrollo de canales en pelisalacarta añadí en las primeras versiones algunos módulos comunes, recogiendo operaciones básicas como la descarga de páginas o la actualización automática. De esta forma me evitaba tener que pensar en resolver problemas comunes, y de paso simplificaba la vida a los colaboradores en el desarrollo.
Ahora en la nueva rama 3.X para no liarse mucho con el funcionamiento en cada plataforma he agrupado un poco mejor los elementos.
El paquete «core»
En esta nueva versión los módulos independientes de la plataforma se han agrupado todos en un paquete «core», para organizar el código fuente y simplificar las dependencias entre módulos.
Podemos encontrar módulos para resolver muchas de las necesidades básicas de pelisalacarta:
- config: Permite leer parámetros de configuración de forma independiente de la plataforma donde se ejecuta el plugin. La magia consiste en identificar en qué plataforma está corriendo y abrir el módulo «config» apropiado en el paquete «platform». No funciona mal, aunque a medida que se van añadiendo plataformas la cosa se complica.
- logger: Un sistema sencillo para escribir información de depuración, pero que sorprendentemente también cambia mucho de una plataforma a otra.
- downloadtools: Herramientas para descargar los ficheros, algo que en Python no está realmente bien resuelto. Este módulo tiene también funciones auxiliares interesantes para tratar el encoding.
- library: La aportación de Jurrabi para añadir series a la biblioteca de XBMC.
- samba: Un wrapper sobre smb/nmb, dos librerías de Python para tratar la conectividad con carpetas compartidas de Windows.
- updater: Verifica cada vez que inicias el plugin si hay nuevas versiones, y en caso afirmativo las descarga. La descompresión del ZIP se hace con el módulo ziptools, cuyo códig saqué buscándolo en Google
- xbmctools: Es donde está el menú que sale cuando eliges una película. Ha crecido tanto que hay que reescribirlo, no es un buen ejemplo de programación en Python 🙁
- scrapertools: Básicamente está todo lo necesario para la descarga de las páginas, se encarga de cosas tan exóticas como cambiar las cabeceras, gestionar las cookies, envios POST/GET, etc. Todo lo necesario para hacer creer a los sitios que en realidad XBMC es un navegador estándar.
El paquete «pelisalacarta/channels»
Contiene un módulo Python (un fichero .py) para cada canal y un ficheros xml asociado a cada uno de ellos para la actualización automática individual. Se llama así en lugar de llamarse simplemente «channels» con la idea de que algún día pelisalacarta, tvalacarta y otros plugins podrían llegar a ocupar la misma base de código fuente.
El paquete «platform»
La capacidad multiplataforma de pelisalacarta se basa en dos aspectos:
- Python: Es un lenguaje interpretado, que funciona en todas las plataformas gracias a que hay un intérprte para prácticamente cualquier sistema. Además es fácilmente empotrable dentro de otras aplicaciones, lo que lo convierte en una elección muy popular para hacer extensiones de sistemas existentes.
- El paquete estándar «platform» que proporciona al plugin funciones comunes de forma que no es necesario conocer su implementación específica en cada plataforma.
Hay un directorio para cada plataforma, que es ejecutado de forma selectiva desde diferentes puntos del plugin, y que proporciona:
- Programa principal: Es aquí donde se almacena el punto inicial de ejecución.
- Configuración: Es donde de verdad se implementa el acceso a los parámetros de configuración, traducciones y a parámetros genéricos. Es importante especialmente la función «get_data_path» para obtener una ruta donde poder escribir ficheros, y la función «get_runtime_path» para saber cual es la ruta principal del plugin.
- Logging: Desde un simple «print» en unas plataformas, hasta sistemas más exóticos como el de XBMC o Plex.
El paquete «server»
Este paquete ya estaba en versiones anteriores, y agrupa los conectores de los diferentes servidores. Es aquí donde está el importante módulo «servertools» que se encarga de la detección de vídeos en una página: Basta con que le des una cadena con una página HTML y te devuelve un listado de los vídeos que encuentra incluyendo además en qué servidor están alojados.
El directorio «resources»
Además de recoger las imágenes como en versiones anteriores, en este directorio se almacenan ahora los ficheros adicionales requeridos por las diferentes plataformas. Es como el cuarto trastero 🙂
El script build.xml
Un script de ANT se encarga de empaquetar pelisalacarta en cada una de sus versiones. Esto simplifica mucho el trabajo a la hora de preparar las distribuciones más habituales (xbmc), y hace posible el empaquetado de las versiones más exóticas como la de Plex Media Server, que tiene una estructura de directorios muy peculiar. Y aún queda trabajo para perfeccionarlo.