Categoría: Desarrollo

Artículos técnicos relacionados con la programación de aplicaciones para mediacenter

Desarrollo

Mod del skin Rapier para ver el argumento de los vídeos

Ahora que ha salido la versión definitiva de XBMC con el soporte al nuevo motor de skins, se ve un fallo en el mod de Rapier que hice para que saliera el argumento de los vídeos. Al final de este post puedes descargar la versión corregida.

Pelisalacarta con el skin Rapier modificado

Pelisalacarta con el skin Rapier modificado

Este skin es fantástico por varias razones, aparte de las puramente estéticas:

  • Ofrece un acabado muy profesional en los detalles: Vale, esto es precisamente un criterio estético 🙂
  • Respeta los iconos de las entradas: así puedes distinguir una carpeta de un vídeo, lo que resulta bastante útil.
  • Presenta más información en pantalla: aquí no tiene tanta importancia el fanart, y por tanto se aprovechan mejor los huecos. De ahí que haya resultado facil encontrar un hueco para poner la descripción.

Aún tiene algún problemilla que solucionar, como el hecho de que no se vea la barra de progreso mientras haces buffering, pero yo lo uso siempre por defecto desde hace tiempo.

Puedes descargarlo desde este enlace. En realidad sólo he cambiado un fichero (viewscommon.xml) pero he dejado la descarga completa para no complicar mucho la vida.

DesarrolloTutoriales

Como añadir canales a pelisalacarta (Parte 1)

Esta entrada es la primera de una serie.

Puedes leer la entrada siguiente en Cómo añadir canales a pelisalacarta – Parte 2 (Paginación, menús)

Si te interesa no te pierdas la sección guías de desarrollo

Este es el primer post de una serie donde voy a intentar contaros lo fácil que es añadir un nuevo canal al plugin pelisalacarta para XBMC, con la intención de animar a aquellos que tengan conocimientos de programación y conseguir que entre todos haya muchas webs de contenidos en castellano en XBMC.

La estructura de ficheros del plugin es muy sencilla, y tiene los siguientes elementos:

Directorios de pelisalacarta

Directorios

channels: Contiene un fichero en Python (.py) para cada canal del plugin: Cinetube, Seriesyonkis, etc.
servers: Contiene un fichero Python (.py) para cada servidor donde se alojan los vídeos: Megavideo, etc.
downloads: Es el directorio de descargas por defecto
resources/images: Donde se graban todas las imágenes del canal, iconos y demás
resources/language: Los literales traducidos en varios idiomas, grabados en un fichero xml.
resources/lib: El código común reutilizable en varios sitios.

Hay una serie de ficheros Python importantes que es necesario conocer para añadir un nuevo canal:

  • default.py: Es el que se ejecuta cada vez que accedes al plugin, abres una de sus carpetas o intentas ver uno de sus vídeos. No es necesario modificarlo, y básicamente lo que hace es invocar a pelisalacarta.py.
  • pelisalacarta.py: Extrae los parámetros más importantes de la petición y redirige al selector de canales channelselector.py.
  • channelselector.py: Tiene una lista manual de todos los canales activos en el plugin. Aquí es donde tenemos que añadir nuestro nuevo canal al final de la lista, usando como primer parámetro el nombre que se verá en pantalla y como segundo parámetro un nombre interno que usaremos como identificador del canal.
  • channels/nuevocanal.py: Este es el fichero que vamos a crear con el nuevo canal.
  • images/nuevocanal.png: Este es el fichero con el logotipo del canal.

¿A que parece sencillo? El primer paso es identificar una web que tenga contenido interesante, y que aloje los vídeos en uno de los servidores que pelisalacarta soporta: megavideo, tutv o stagevu. Para este tutorial vamos a coger Cinegratis.net que es una web bastante chula.

Veamos el proceso paso a paso:

1) Añadir el nuevo canal al fichero channelselector.py, al final de la lista. El primer parámetro es el nombre con que se verá el canal en la lista, el segundo es el nombre que usaremos para el thumbnail (cinegratis.png), el fichero con el canal (cinegratis.py), y en varias partes del código. El tercer parámetro es el nombre de la primera función a ejecutar dentro de cinegratis.py.

Antes

Antes

Despues

Despues

2) Hacer el thumbnail del canal como un PNG de 255×375 y grabarlo como images\cinegratis.png.

Icono de canal

Icono de canal

3) Probar el resultado hasta ahora, entrando en el plugin a ver si sale el canal 🙂

El nuevo canal ya sale en XBMC

El nuevo canal ya sale en XBMC

4) Copia uno de los ficheros de canales que hay en el directorio channels, y renómbralo a cinegratis.py. Uno sencillo que es el que vamos a usar ahora es pintadibujos.py.

5) Ábrelo con un editor y donde aparezca “pintadibujos” cámbialo por “cinegratis”

6) Cuando seleccionas el canal la primera función que se invoca es “mainlist”, donde el plugin va a la URL que le has indicado y extrae las películas para mostrarlas. Para Cinegratis la URL donde están los estrenos de las películas es http://www.cinegratis.net/index.php?module=peliculas, así que vamos a ponerla en el plugin.

Cambia la URL

Cambia la URL

Ahora viene la parte divertida, que es extraer del HTML de la página los datos de las películas. La magia se realiza gracias a las expresiones regulares y un poco de paciencia, y en realidad es muy sencillo porque apenas hay 4 trucos que resuelven la mayoría de los casoa.

Observando la página buscamos la primera película del listado:

El listado de películas

El listado de películas

En este caso se trata de la película “Lansky (1999)”. Si le das a “Ver código fuente” en el navegador y buscas el título la encontrarás enseguida, y normalmente el resto de películas se encuentran siempre una debajo de otra en una estructura repetida. En la captura he resaltado el título, argumento, enlace a la página de detalle y carátula de la película. Veréis que al final está ya el título de la siguiente película.

HTML de la página con los elementos resaltados

HTML de la página con los elementos resaltados

La expresión regular es sencilla si deduces la estructura del código. En este caso podemos ver que el título de la película está dentro de un tag <table>, en el primer <td>, y el argumento en el siguiente <div> que hay. En esa misma tabla está el enlace en un tag <a> y el thumbnail en un tag <img>. Veamos ahora la expresión regular, que describe exactamente lo mismo con su propia notación:

La expresión regular

La expresión regular

Es compleja, pero como todo es cuestión de práctica. Si la leemos por partes lo que significa es que el patrón que estás buscando:

  • “<table.*?<td.*?>”
  • Empieza en la cadena “<table”, luego tiene varios caracteres (representado por .*?) hasta llegar a un “<td”, y otros caracteres más hasta llegar a un “>” que es el cierre del tag td.
  • “([^<]+)<span”
  • Esta curiosa fórmula significa que a partir de ahí vale “cualquier cosa hasta encontrar el carácter <“, aunque podría haber puesto también “.*?”. Los paréntesis indican además que esa parte del texto me interesa.
  • Luego viene otra vez la expresión .*?, porque no interesa nada más hasta llegar al primer “<div>”
  • “<div align=’justify’>(.*?)</div>.*?”
  • Otra fórmula habitual que viene a significar hay un “<div>” con cosas dentro y luego un “</div>”. Muy normal en HTML.

Veréis que hay 4 paréntesis en la expresión regular, correspondiendo con el título (posición 0), argumento (posición 1), enlace a la página de detalle (posición 2) y thumbnail (posición 3). Con esto vamos a dar los dos últimos pasos de este tutorial.

7) Copia la expresión regular en la variable “patronvideos” tal como está en la captura.

8 ) Asigna valor a las variables que interpretan la expresión regular, utilizando el array “matches” que va a almacenar las cadenas de texto extraídas.

Asignando valores a las variables

Asignando valores a las variables

Vamos a dejarlo por aquí ahora, con el primer listado de películas de Cinegratis que ya podéis probar.

Si entráis en una película veréis que es totalmente funciona y que podéis reproducir los vídeos, siempre que estén en alguno de los servidores soportados por el plugin (normalmente están en Megavídeo) gracias a que el mecanismo que busca los enlaces es más o menos común para todos los canales.

Aún queda mucho por hacer, como añadir la paginación y poner más listados por categorías y cosas así, que iré añadiendo en sucesivas entregas de este tutorial.

En la captura podéis ver que las pruebas las hago con XBMC en modo ventana, y el log de xbmc siempre debajo usando la utilidad BareTail para verlo en tiempo real.

El listado de películas

El listado de películas

Puedes descargar la versión de cinegratis.py con los cambios ya realizados en este enlace.