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.

20 comentarios

  1. Jesús:

    He seguido tu tutorial y ya tengo listo mi primer canal añadido a pelisalacarta. Toma los datos de divxonline y me ha costado unas horillas porque además soy nuevo en python…

    Lo que no sé ahora es cómo contactar contigo (igual está tu mail por ahí, pero no lo he visto) por si lo quieres añadir oficialmente a tvalacarta…

    Aunque ya es completamente funcional, sigo trabajando en él porque me gustaría añadirle las notas de las películas (sacadas de filmaffinity.com) para que salga junto al título en la lista de películas. Ya tengo extraídas las notas y me queda añadir al plugin un dict para que al construir la lista inserte la nota.

    Puedes contestarme al mail del post.

  2. Enhorabuena!

    Mi e-mail está en la página de contacto, pero ya te respondo por e-mail.

  3. Hola Jesus:
    Yo tambien me anime a hacer mi primer canal gracias a este excelente tutorial, Aunque ya esta funcional me gustaria que lo probaras, te lo he enviado a tu correo de contacto para que lo veas; ahi te explico con mas detalles.
    Muy buena idea lo del Baretail ayuda muchisimo jejeje…

  4. Gracias @bandavi, recibido!

  5. acá va una para agregar : http://www.cinenuclear.tv/
    sds

  6. Gracias 🙂

  7. roliverosc 15/06/2011 en 11:59

    Hola muchas gracias por los contenidos de tu blog, igual que tu me he estoy haciendo muy aficionado a este software y me estoy planteando hacer algo para colaborar a la comunidad.

    P.D: La última versión de tvalacarta no funciona bien con los canales haber si puedes ir mirándolo haber que problema hay.

    Muchas gracias.

  8. roliverosc 15/06/2011 en 12:14

    Con que editor trabajo para xbmc me imagino que con eclipse, no?

  9. Gracias, a ver si te animas 🙂

    Yo últimamente trabajo con Komodo, es mucho más rápido que Eclipse y en general me gusta mucho más.

    Tengo que actualizar algunos canales de tvalacarta… con el tiempo se van rompiendo.

  10. hola, pues no se que es lo que hago mal que no lo consigo!!! podrian agregar http://www.sidereel.com?

  11. ¿Donde te has quedado?

    Sidereel es una página chula, ya me la han sugerido por otros sitios.

  12. Buenos dias,

    Me gustaria añadir un canal soy un poco novato en todo esto he intentado editar el archivo channelselector.py pero no encuentro donde añadir el canal que que mi archivo es un poco diferente y estoy completamente perdido el tutorial aun esta operativo?

  13. Hombre, ya tiene ¡4 años! pero básicamente el proceso es el mismo.

    En el channelselector hay una lista de canales, ahora se listan de una forma distinta pero coge la linea de cualquiera de ellos, cópialo y modifica lo que pone para que salga el tuyo.

    Los canales del tutorial siguen valiendo aunque ten en cuenta la parte de «Multiplataforma» para que funcionen en otras plataformas además de en XBMC:

    http://www.mimediacenter.info/guias-de-desarrollo/

  14. Gracias por la respuesta conseguí editar el canal pero sacar la información de la pagina (Mecanoscrit.cat) creo que es demasiado para mis conocimientos de informática… me encantaria saber y poder crear canales pero primero tendre que aprender mas programacion aun a si muchas gracias y saludos

  15. Hola
    Me gustaria si pe podrias echar una mano con el siguente sitio filme-noi.com.
    No consigo extraer los datos para tener una lista de peliculas.
    tengo el siguente error:
    [scrapertools.py] Peticion con timeout
    Traceback (most recent call last):
    File «C:\Users\bogdan\AppData\Roaming\XBMC\addons\plugin.video.pelisalacarta\core\scrapertools.py», line 442, in downloadpage
    handle=urlopen(req)
    File «C:\Program Files\XBMC\system\python\Lib\urllib2.py», line 126, in urlopen
    return _opener.open(url, data, timeout)
    File «C:\Program Files\XBMC\system\python\Lib\urllib2.py», line 397, in open
    response = meth(req, response)
    File «C:\Program Files\XBMC\system\python\Lib\urllib2.py», line 510, in http_response
    ‘http’, request, response, code, msg, hdrs)
    File «C:\Program Files\XBMC\system\python\Lib\urllib2.py», line 435, in error
    return self._call_chain(*args)
    File «C:\Program Files\XBMC\system\python\Lib\urllib2.py», line 369, in _call_chain
    result = func(*args)
    File «C:\Program Files\XBMC\system\python\Lib\urllib2.py», line 518, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
    HTTPError: HTTP Error 404: Not Found

  16. Pus aparentemente la URL que has puesto no funciona (da error 404), pero sin tener el código fuente a la vista poco más puedo decirte 🙂

  17. Hola
    He abierto un nuevo tema en el foro. Y e puesto el codigo + el log. Si lo podrias mirar te lo agradezco.

  18. Acabo de dar con este sitio y se me hace super interesante.

    Actualmente estoy intentando desarrollar «ALGO», para hacer lo siguiente:

    Montar un servidor para una LAN, esto esta pensado para ocupar de forma local y no en la WEB.

    Este servidor tendrá películas, series, vídeos, música y VIDEO de TV en VIVO.

    Al servidor se conectaran equipos raspberry pi con Raspbmc, para ver el contenido compartido.

    Actualmente tengo esto funcionando, pero de una forma muuuy simple, como quien dice, solo con lo que tiene XBMC de base.

    A que quiero llegar ?
    Tener un SKIN o pantalla de inicio o «ALGO», donde solo pueda seleccionar lo que esta compartido en el servidor y quitar todo lo demás (accesos no deseados, configuraciones, etc).

    Espero me puedas orientar un poco sobre el camino que tengo que tomar para poder desarrollar este «ALGO» que tengo en mente, considerando que soy bastante NUEVO en XBMC.

    Saludos desde México y gracias de antemano.

  19. Hola !! Tus blogs son muy interesantes pero tengo una pregunta: la verdad es que yo no tengo el kodi XBMC en mi ordenador, yo tengo un cajita y hay tengo mi kodi… como podria hacer esas configuraciones?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *