<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mi media center &#187; pelisalacarta</title>
	<atom:link href="http://www.mimediacenter.info/tag/pelisalacarta/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mimediacenter.info</link>
	<description>Ideas para llevar la experiencia multimedia al salón</description>
	<lastBuildDate>Tue, 22 Nov 2011 09:13:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Guía de desarrollo de pelisalacarta: Componentes internos del plugin</title>
		<link>http://www.mimediacenter.info/2011/04/26/guia-de-desarrollo-de-pelisalacarta-componentes-internos-del-plugin/</link>
		<comments>http://www.mimediacenter.info/2011/04/26/guia-de-desarrollo-de-pelisalacarta-componentes-internos-del-plugin/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 23:17:47 +0000</pubDate>
		<dc:creator>Jesus</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[guía de desarrollo]]></category>
		<category><![CDATA[pelisalacarta]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.mimediacenter.info/?p=321</guid>
		<description><![CDATA[Un breve repaso a los principales componentes internos de pelisalacarta, su motivación y función principal]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share"><div style="width:100px;" class="really_simple_share_facebook_like"> 
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.mimediacenter.info%2F2011%2F04%2F26%2Fguia-de-desarrollo-de-pelisalacarta-componentes-internos-del-plugin%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
					scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
			</div><div style="width:90px;" class="really_simple_share_google1"> 
				<g:plusone size="medium" href="http://www.mimediacenter.info/2011/04/26/guia-de-desarrollo-de-pelisalacarta-componentes-internos-del-plugin/" ></g:plusone>
			</div><div style="width:110px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Guía de desarrollo de pelisalacarta: Componentes internos del plugin" data-url="http://www.mimediacenter.info/2011/04/26/guia-de-desarrollo-de-pelisalacarta-componentes-internos-del-plugin/">Tweet</a> 
			</div></div>
		<div style="clear:both;"></div><blockquote><p>Esta entrada <strong>forma parte  de una serie</strong>.</p>
<p>Puedes leer la <strong>entrada anterior de la serie</strong> en <a href="http://www.mimediacenter.info/2011/04/24/guia-de-desarrollo-de-pelisalacarta-como-funciona-la-actualizacion-automatica/">“Cómo funciona la actualización automática”</a></p>
<p>Si te interesa no te pierdas la sección <a href="http://www.mimediacenter.info/guias-de-desarrollo/">guías de desarrollo</a></p></blockquote>
<p>Hacer un plugin de <a href="http://xbmc.org">XBMC</a> 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.</p>
<p>Para simplificar el desarrollo de canales en <a href="http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta">pelisalacarta</a> 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.</p>
<p>Ahora en la nueva rama 3.X para no liarse mucho con el funcionamiento en cada plataforma he agrupado un poco mejor los elementos.</p>
<h3>El paquete &#8220;core&#8221;</h3>
<p>En esta nueva versión los módulos independientes de la plataforma se han agrupado todos en un paquete &#8220;core&#8221;, para organizar el código fuente y simplificar las dependencias entre módulos.</p>
<p>Podemos encontrar módulos para resolver muchas de las necesidades básicas de pelisalacarta:</p>
<ul>
<li><strong>config</strong>: 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 &#8220;config&#8221; apropiado en el paquete &#8220;platform&#8221;. No funciona mal, aunque a medida que se van añadiendo plataformas la cosa se complica.</li>
<li><strong>logger</strong>: Un sistema sencillo para escribir información de depuración, pero que sorprendentemente también cambia mucho de una plataforma a otra.</li>
<li><strong>downloadtools</strong>: 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.</li>
<li><strong>library</strong>: La aportación de Jurrabi para añadir series a la biblioteca de XBMC.</li>
<li><strong>samba</strong>: Un wrapper sobre smb/nmb, dos librerías de Python para tratar la conectividad con carpetas compartidas de Windows.</li>
<li><strong>updater</strong>: 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</li>
<li><strong>xbmctools</strong>: 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 <img src='http://www.mimediacenter.info/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </li>
<li><strong>scrapertools</strong>: 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.</li>
</ul>
<h3>El paquete &#8220;pelisalacarta/channels&#8221;</h3>
<p>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 &#8220;channels&#8221; 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.</p>
<h3>El paquete &#8220;platform&#8221;</h3>
<p>La capacidad multiplataforma de pelisalacarta se basa en dos aspectos:</p>
<ul>
<li><strong>Python</strong>: 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.</li>
</ul>
<ul>
<li><strong>El paquete estándar &#8220;platform&#8221;</strong> que proporciona al plugin funciones comunes de forma que no es necesario conocer su implementación específica en cada plataforma.</li>
</ul>
<p>Hay un directorio para cada plataforma, que es ejecutado de forma selectiva desde diferentes puntos del plugin, y que proporciona:</p>
<ul>
<li><strong>Programa principal</strong>: Es aquí donde se almacena el punto inicial de ejecución.</li>
<li><strong>Configuración</strong>: 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 &#8220;get_data_path&#8221; para obtener una ruta donde poder escribir ficheros, y la función &#8220;get_runtime_path&#8221; para saber cual es la ruta principal del plugin.</li>
<li><strong>Logging</strong>: Desde un simple &#8220;print&#8221; en unas plataformas, hasta sistemas más exóticos como el de XBMC o Plex.</li>
</ul>
<h3>El paquete &#8220;server&#8221;</h3>
<p>Este paquete ya estaba en versiones anteriores, y agrupa los conectores de los diferentes servidores. Es aquí donde está el importante módulo &#8220;servertools&#8221; 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.</p>
<h3>El directorio &#8220;resources&#8221;</h3>
<p>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 <img src='http://www.mimediacenter.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>El script build.xml</h3>
<p>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.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mimediacenter.info/2011/04/26/guia-de-desarrollo-de-pelisalacarta-componentes-internos-del-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guía de desarrollo de pelisalacarta: Cómo funciona la actualización automática</title>
		<link>http://www.mimediacenter.info/2011/04/24/guia-de-desarrollo-de-pelisalacarta-como-funciona-la-actualizacion-automatica/</link>
		<comments>http://www.mimediacenter.info/2011/04/24/guia-de-desarrollo-de-pelisalacarta-como-funciona-la-actualizacion-automatica/#comments</comments>
		<pubDate>Sat, 23 Apr 2011 23:00:53 +0000</pubDate>
		<dc:creator>Jesus</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[guía de desarrollo]]></category>
		<category><![CDATA[pelisalacarta]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.mimediacenter.info/?p=318</guid>
		<description><![CDATA[Describe cómo puedes actualizar un canal de pelisalacarta sin necesidad de esperar a la siguiente versión del plugin]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share"><div style="width:100px;" class="really_simple_share_facebook_like"> 
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.mimediacenter.info%2F2011%2F04%2F24%2Fguia-de-desarrollo-de-pelisalacarta-como-funciona-la-actualizacion-automatica%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
					scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
			</div><div style="width:90px;" class="really_simple_share_google1"> 
				<g:plusone size="medium" href="http://www.mimediacenter.info/2011/04/24/guia-de-desarrollo-de-pelisalacarta-como-funciona-la-actualizacion-automatica/" ></g:plusone>
			</div><div style="width:110px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Guía de desarrollo de pelisalacarta: Cómo funciona la actualización automática" data-url="http://www.mimediacenter.info/2011/04/24/guia-de-desarrollo-de-pelisalacarta-como-funciona-la-actualizacion-automatica/">Tweet</a> 
			</div></div>
		<div style="clear:both;"></div><blockquote><p>Esta entrada <strong>forma parte  de una serie</strong>.</p>
<p>Puedes leer la <strong>entrada anterior de la serie</strong> en <a href="http://www.mimediacenter.info/2011/04/06/guia-de-desarrollo-de-pelisalacarta-analisis-de-un-canal-multiplataforma/">“Análisis de un canal multiplataforma”</a></p>
<p>Puedes leer la <strong>entrada siguiente</strong> en <a href="http://www.mimediacenter.info/2011/04/26/guia-de-desarrollo-de-pelisalacarta-componentes-internos-del-plugin/">“Componentes internos del plugin”</a></p>
<p>Si te interesa no te pierdas la sección <a href="http://www.mimediacenter.info/guias-de-desarrollo/">guías de desarrollo</a></p></blockquote>
<p>Pelisalacarta 3.0 incorpora un mecanismo que permite a cualquier colaborador con acceso al SVN actualizar un canal que ha dejado de funcionar, o incluso modificar la lista de canales para añadir canales nuevos o quitar los que no funcionen.</p>
<p>El mecanismo es muy sencillo, y se basa en que hay un fichero junto a cada canal que identifica el número de versión. Si tienes un canal versión &#8220;2&#8243; en tu pelisalacarta y alguien sube un canal con versión &#8220;3&#8243;, el plugin lo descarga y actualiza automáticamente.</p>
<p>Por supuesto esto sólo es posible si el usuario ha marcado esta opción entre los parámetros de configuración del plugin.</p>
<h3>Actualizar un canal</h3>
<p>Supongamos que queremos arreglar un fallo en cinetube, porque algún cambio en la página ha hecho que deje de funcionar o simplemente porque queremos añadir alguna mejora. Los pasos que hay que dar son sencillos:</p>
<ul>
<li>Abrir el fichero cinetube.py y hacer las modificaciones</li>
<li>Subirlo el fichero cinetube.py al Subversion antes de publicar cualquier cambio</li>
<li>Abrir el fichero cinetube.xml e incrementar el número de versión. No hay versiones parciales, es un simple contador. Opcionalmente puede ponerse la descripción del cambio realizado, aunque actualmente no se utiliza. Si no hay fichero xml asociado al canal será necesario crearlo, poniendo como indicador de versión el &#8220;1&#8243;.</li>
<li>Subir el fichero cinetube.xml al Subversion. En este momento estará disponible para que todo el mundo se lo descargue.</li>
</ul>
<h3>Añadir un canal</h3>
<p>Si lo que quieres es añadir un canal, el proceso es el mismo pero tienes que incrementar la versión de la lista de canales:</p>
<ul>
<li>Crear el fichero .py del canal y grabarlo en el directorio &#8220;pelisalacarta/channels&#8221;.</li>
<li>Modificar el fichero channelselector.py para añadir el canal, indicando si es genérico o no. Si es un canal nuevo inclúyelo también en el apartado de &#8220;últimos canales&#8221;.</li>
<li>Subir el fichero channelselector.py al Subversion antes de publicar.</li>
<li>Modificar el fichero channelselector.xml para incrementar el número de la versión.</li>
<li>Subirlo al Subversion. En este momento estará disponible para todo el mundo.</li>
<li>Cuando un pelisalacarta vea que hay una nueva versión de la lista de canales se la descargará, y cuando el usuario elija el nuevo canal se lo descargará igualmente.</li>
</ul>
<h3>Eliminar un canal</h3>
<p>Si bien es algo excepcional, también es posible eliminar canales que ya no van a funcionar de la lista de canales.</p>
<ul>
<li>Modificar el fichero channelselector.py y comentar el canal que no funciona</li>
<li>Subir el fichero channelselector.py al Subversion.</li>
<li>Modificar el fichero channelselector.xml para incrementar el número de la versión.</li>
<li>Subirlo al Subversion.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mimediacenter.info/2011/04/24/guia-de-desarrollo-de-pelisalacarta-como-funciona-la-actualizacion-automatica/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Guía de desarrollo de pelisalacarta: Análisis de un canal multiplataforma</title>
		<link>http://www.mimediacenter.info/2011/04/06/guia-de-desarrollo-de-pelisalacarta-analisis-de-un-canal-multiplataforma/</link>
		<comments>http://www.mimediacenter.info/2011/04/06/guia-de-desarrollo-de-pelisalacarta-analisis-de-un-canal-multiplataforma/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 23:57:17 +0000</pubDate>
		<dc:creator>Jesus</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[guía de desarrollo]]></category>
		<category><![CDATA[pelisalacarta]]></category>

		<guid isPermaLink="false">http://www.mimediacenter.info/?p=316</guid>
		<description><![CDATA[Cómo funciona el código Python de un canal sencillo en pelisalacarta 3.0, utilizando como ejemplo la web de series online "seriematic"]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share"><div style="width:100px;" class="really_simple_share_facebook_like"> 
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.mimediacenter.info%2F2011%2F04%2F06%2Fguia-de-desarrollo-de-pelisalacarta-analisis-de-un-canal-multiplataforma%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
					scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
			</div><div style="width:90px;" class="really_simple_share_google1"> 
				<g:plusone size="medium" href="http://www.mimediacenter.info/2011/04/06/guia-de-desarrollo-de-pelisalacarta-analisis-de-un-canal-multiplataforma/" ></g:plusone>
			</div><div style="width:110px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Guía de desarrollo de pelisalacarta: Análisis de un canal multiplataforma" data-url="http://www.mimediacenter.info/2011/04/06/guia-de-desarrollo-de-pelisalacarta-analisis-de-un-canal-multiplataforma/">Tweet</a> 
			</div></div>
		<div style="clear:both;"></div><blockquote><p>Esta entrada <b>forma parte  de una serie</b>.</p>
<p>Puedes leer la <b>entrada anterior de la serie</b> en <a href="http://www.mimediacenter.info/2011/04/01/guia-de-desarrollo-de-pelisalacarta-como-hacer-canales-multiplataforma/">&#8220;Cómo hacer canales multiplataforma&#8221;</a></p>
<p>Puedes leer la <b>entrada siguiente de la serie</b> en <a href="http://www.mimediacenter.info/2011/04/24/guia-de-desarrollo-de-pelisalacarta-como-funciona-la-actualizacion-automatica/">“Cómo funciona la actualización automática”</a></p>
<p>Si te interesa no te pierdas la sección <a href="http://www.mimediacenter.info/guias-de-desarrollo/">guías de desarrollo</a></p>
</blockquote>
<p>Para comprender mejor como funciona por dentro un canal multiplataforma en pelisalacarta, vamos a analizar paso a paso uno de los sencillos. He elegido el canal &#8220;seriematic&#8221;, una web de series con una estructura muy limpia que se refleja claramente en el código del módulo Python.<br />
<a href="http://xbmc-tvalacarta.googlecode.com/svn/trunk/pelisalacarta/pelisalacarta/channels/seriematic.py">El canal seriematic puedes encontrarlo en esta dirección.</a></p>
<h3>Cabecera</h3>
<pre class="prettyprint">
# -*- coding: utf-8 -*-
#------------------------------------------------------------
# pelisalacarta - XBMC Plugin
# Canal para seriematic
# http://blog.tvalacarta.info/plugin-xbmc/pelisalacarta/
#------------------------------------------------------------
</pre>
<p>
Lo primero que te vas a encontrar es la cabecera donde se incluyen algunas líneas de comentario con la información sobre el módulo Python que estás viendo.</p>
<p>Es especialmente importante la primera línea, que le especifica al intérprete de Python y a los editores sobre la codificación que emplea el fichero para los caracteres internacionales. Si esta información no está indicada Python dará un error al ejecutar el módulo, y si está informada erróneamente los caracteres internacionales se mostrarán mal.
</p>
<pre class="prettyprint">
import urlparse,urllib2,urllib,re
import os, sys
</pre>
<p>
A continuación se incluyen los paquetes estándar de Python más habituales, entre los que suelen encontrarse los de expresiones regulares (paquete re), manipulación de URL (urllib), así como utilidades de bajo nivel (paquetes os y sys).
</p>
<pre class="prettyprint">
try:
    from core import logger
    from core import config
    from core import scrapertools
    from core.item import Item
    from servers import servertools
except:
    # En Plex Media server lo anterior no funciona...
    from Code.core import logger
    from Code.core import config
    from Code.core import scrapertools
    from Code.core.item import Item
</pre>
<p>
Los módulos del paquete &#8220;core&#8221; de pelisalacarta se encargan de las funciones comunes a todos los canales, y es donde se encuentra resuelto el problema de la multiplataforma.
</p>
<p>
Basta con que uses el módulo &#8220;logger&#8221; para escribir un log, o el módulo &#8220;config&#8221; para leer la configuración, y puedes olvidarte de cómo se resuelve cada uno de esos problemas en las diferentes plataformas.
</p>
<pre class="prettyprint">
CHANNELNAME = "seriematic"
DEBUG = True

def isGeneric():
    return True
</pre>
<p>
A continuación unas pocas líneas de relleno (boilerplate code) que se ponen siempre. Una constante CHANNELNAME con el nombre del canal para simplificar el copy-paste de código entre canales, otra para usar en depuración, y la función &#8220;isGeneric&#8221; que permite identificar a este canal como multiplataforma.
</p>
<p><br/></p>
<h3>Menú principal</h3>
<pre class="prettyprint">
def mainlist(item):
    logger.info("[seriematic.py] mainlist")

    itemlist = []
    itemlist.append( Item(channel=CHANNELNAME, title="Series",
      action="series", url="http://www.seriematic.com/series.php"))
    itemlist.append( Item(channel=CHANNELNAME, title="Miniseries",
      action="series", url="http://www.seriematic.com/miniseries.php"))
    itemlist.append( Item(channel=CHANNELNAME, title="Dibujos",
      action="series", url="http://www.seriematic.com/dibujos.php"))
    itemlist.append( Item(channel=CHANNELNAME, title="Anime",
      action="series", url="http://www.seriematic.com/manga.php"))

    return itemlist
</pre>
<p>
El menú principal del canal se tiene que implementar en una función de nombre &#8220;mainlist&#8221;, que devuelve una lista Python con las entradas que deben mostrarse al usuario.
</p>
<p>
Cada entrada de esta lista consiste en un objeto &#8220;Item&#8221;, que es una representación más genérica del elemento &#8220;ListItem&#8221; de XBMC. En su versión más sencilla permite almacenar los valores básicos:</p>
<ul>
<li>channel: Nombre del canal donde está la acción a realizar</li>
<li>action: Nombre de la función dentro del canal que realiza la acción cuando el usuario seleccione esta entrada</li>
<li>title: El texto que se debe mostrar en pantalla al usuario cuando se liste esta entrada</li>
<li>url: La URL asociada a esta entrada, si es necesario. Si la acción consiste en descargar un listado de categorías, en este atributo vendrá la URL.</li>
<ul>
<p><br/></p>
<h3>Navegación</h3>
<p>
Supongamos que el usuario elige ahora la entrada titulada &#8220;Series&#8221;. Como ese item tiene la acción &#8220;series&#8221;, ese es el nombre de la siguiente función que se ejecuta en el módulo Python.
</p>
<pre class="prettyprint">
def series(item):
    logger.info("[seriematic.py] series")

    # Descarga la página
    data = scrapertools.cachePage(item.url)

    # Extrae las entradas
    patronvideos  = '&lt;td>&lt;a href="([^"]+)">([^&lt;]+)&lt;/a>&lt;/td>'
    matches = re.compile(patronvideos,re.DOTALL).findall(data)
    if DEBUG: scrapertools.printMatches(matches)

    itemlist = []
    for match in matches:
        scrapedtitle = match[1]
        scrapedplot = ""
        scrapedurl = urlparse.urljoin(item.url,match[0])
        scrapedthumbnail = ""

        # Añade al listado
        itemlist.append( Item(channel=CHANNELNAME,
          action="episodios",
          title=scrapedtitle,
          url=scrapedurl ,
          thumbnail=scrapedthumbnail ,
          plot=scrapedplot ,
          folder=True) )

    return itemlist
</pre>
<p>
La función recibe como parámetro el item seleccionado por si quieres utilizar la URL para descargar la página, como ocurre en este caso.
</p>
<p>
La página descargada analizada con una expresión regular para obtener los nombres de las series, y para cada coincidencia encontrada se añade un elemento a la lista de items marcando esta vez como acción &#8220;episodios&#8221;.
</p>
<p>
A su vez la acción &#8220;episodios&#8221; vuelve a hacer un procesamiento similar, pero ahora se buscan episodios de la serie elegida utilizando la URL que ha venido como parámetro.
</p>
<pre class="prettyprint">
def episodios(item):
    logger.info("[seriematic.py] episodios")

    # Descarga la página
    data = scrapertools.cachePage(item.url)

    # Extrae las entradas
    patronvideos  = '<\!-- Column 1 start -->(.*?)<\!-- Column 1 end -->'
    matches = re.compile(patronvideos,re.DOTALL).findall(data)
    if DEBUG: scrapertools.printMatches(matches)

    itemlist = []
    for elemento in matches:
        patronvideos  = '&lt;tr>&lt;td>([^<]+)&lt;a href="([^"]+)">([^<]+)'
        patronvideos += '&lt;/a>&lt;/td>&lt;/tr>'
        matches2 = re.compile(patronvideos,re.DOTALL).findall(elemento)

        for match in matches2:
            scrapedtitle = match[0]+" "+match[2]
            scrapedplot = ""
            scrapedurl = urlparse.urljoin(item.url,match[1])
            scrapedthumbnail = ""

            # Añade al listado
            itemlist.append( Item(channel=CHANNELNAME,
              action="videos",
              title=scrapedtitle ,
              url=scrapedurl ,
              thumbnail=scrapedthumbnail ,
              plot=scrapedplot ,
              folder=True) )

    return itemlist
</pre>
<p>
Observa que en este caso se aplican dos expresiones regulares en dos bucles &#8220;for&#8221; anidados. Esta técnica permite simplificar expresiones regulares complejas, aislando primero la zona del HTML donde está lo que te interesa para en una segunda pasada extraer los elementos.
</p>
<p><br/></p>
<h3>Los vídeos</h3>
<p>
Cada entrada que devuelve la función &#8220;episodios&#8221; es un episodio de la serie, así que sólo falta recuperar las diferentes alternativas (o mirrors) de cada episodio. Esto se hace en la función &#8220;vídeos&#8221;.
</p>
<pre class="prettyprint">
def videos(item):

    logger.info("[seriematic.py] videos")

    # Descarga la página
    data = scrapertools.cachePage(item.url)

    # Extrae las entradas
    patronvideos  = '&lt;tr>&lt;td>([^<]+)&lt;script type="text/javascript">'
    patronvideos += 'p1.\'([^\']+)\'\,\'V\'\)\;&lt;/script>'
    patronvideos += '&lt;img src="[^"]+" alt="[^"]+"[^>]+/>([^<]+)&lt;'
    matches = re.compile(patronvideos,re.DOTALL).findall(data)
    if DEBUG: scrapertools.printMatches(matches)

    itemlist = []
    for match in matches:
        scrapedtitle = match[0]+" "+match[2]
        scrapedplot = ""
        scrapedurl = match[1]
        scrapedthumbnail = ""
        server="Megavideo"

        # Añade al listado
        itemlist.append( Item(channel=CHANNELNAME,
              action="play",
              title=scrapedtitle ,
              url=scrapedurl ,
              server=server , folder=False) )

    return itemlist
</pre>
<p>Esta función busca las diferentes alternativas de vídeo a reproducir, y las añade a la lista con tres diferencias básicas respecto a lo que hemos visto en el resto de casos:</p>
<ul>
<li>server: Cada entrada es un vídeo alojado en un servidor, aunque en este canal sólo se encuentran vídeos de &#8220;Megavideo&#8221;. La URL corresponde con la de la página de Megavideo, y el parámetro server sirve para que el plugin sepa obtener el vídeo a partir de ella.</li>
<li>action: La acción para que el vídeo se reproduzca es &#8220;play&#8221;. No hace falta que pongas esta función, ya ha sido definida por tí para que no tengas que repetirla cada vez, aunque si añades una en el canal tendrá prioridad sobre la estándar.</li>
<li>folder: Estas entradas ya no tienen más navegación, así que dejan de ser &#8220;carpetas&#8221; para ser &#8220;archivos&#8221; siguiendo el símil de un sistema de ficheros.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.mimediacenter.info/2011/04/06/guia-de-desarrollo-de-pelisalacarta-analisis-de-un-canal-multiplataforma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Guía de desarrollo de pelisalacarta: Cómo hacer canales multiplataforma</title>
		<link>http://www.mimediacenter.info/2011/04/01/guia-de-desarrollo-de-pelisalacarta-como-hacer-canales-multiplataforma/</link>
		<comments>http://www.mimediacenter.info/2011/04/01/guia-de-desarrollo-de-pelisalacarta-como-hacer-canales-multiplataforma/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 23:00:37 +0000</pubDate>
		<dc:creator>Jesus</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[multiplataforma]]></category>
		<category><![CDATA[pelisalacarta]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://www.mimediacenter.info/?p=314</guid>
		<description><![CDATA[Nueva serie de entradas para describir distintos aspectos del desarrollo de pelisalacarta, en esta ocasión se describe cómo debe ser un canal genérico.]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share"><div style="width:100px;" class="really_simple_share_facebook_like"> 
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.mimediacenter.info%2F2011%2F04%2F01%2Fguia-de-desarrollo-de-pelisalacarta-como-hacer-canales-multiplataforma%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
					scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
			</div><div style="width:90px;" class="really_simple_share_google1"> 
				<g:plusone size="medium" href="http://www.mimediacenter.info/2011/04/01/guia-de-desarrollo-de-pelisalacarta-como-hacer-canales-multiplataforma/" ></g:plusone>
			</div><div style="width:110px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Guía de desarrollo de pelisalacarta: Cómo hacer canales multiplataforma" data-url="http://www.mimediacenter.info/2011/04/01/guia-de-desarrollo-de-pelisalacarta-como-hacer-canales-multiplataforma/">Tweet</a> 
			</div></div>
		<div style="clear:both;"></div><blockquote><p>Esta entrada es la primera de una serie continuación de la <strong>serie original</strong> <a href="http://www.mimediacenter.info/2009/09/24/como-anadir-canales-a-pelisalacarta-parte-1/">&#8220;Cómo añadir canales a pelisalacarta&#8221;</a>.</p>
<p>Puedes leer la <b>entrada siguiente de la serie</b> en <a href="http://www.mimediacenter.info/2011/04/06/guia-de-desarrollo-de-pelisalacarta-analisis-de-un-canal-multiplataforma/">“Análisis de un canal multiplataforma”</a></p>
<p>Si te interesa no te pierdas la sección <a href="http://www.mimediacenter.info/guias-de-desarrollo/">guías de desarrollo</a></p>
</blockquote>
<p>La rama 3.X de pelisalacarta introduce el concepto de &#8220;canal genérico&#8221;, que a falta de un nombre mejor hace referencia a un canal que puede verse en cualquier plataforma y no sólo XBMC. Los canales genéricos se verán en WiiMC, Plex Media Server, Boxee, y en cualquier futura plataforma que soporte pelisalacarta.</p>
<div id="attachment_368" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-368" title="pelisalacarta-wiimc-3" src="http://www.mimediacenter.info/wp-content/uploads/2011/03/pelisalacarta-wiimc-3-e1301249264427.jpg" alt="pelisalacarta-wiimc-3" width="480" height="268" /><p class="wp-caption-text">Cinetube en WiiMC</p></div>
<p>Hay 5 reglas muy sencillas a seguir para desarrollar canales y que sean compatibles con cualquier plataforma. Debes desarrollar un módulo Python (un fichero .py) teniendo en cuenta:</p>
<p>1) <strong>Dependencia</strong>: No debe haber dependencias con módulos de XBMC o cualquier otra plataforma.<br />
2) <strong>IsGeneric</strong>: Tienes que añadir una función &#8220;isGeneric&#8221; que devuelva &#8220;True&#8221;.<br />
3) <strong>Mainlist</strong>: La función que muestra el primer nivel de menús debe llamarse &#8220;mainlist&#8221;, algo que no era realmente obligatorio en versiones anteriores pero ahora es necesario.<br />
4) <strong>Item</strong>: Cada entrada del plugin se representa con un objeto de clase &#8220;Item&#8221;, que tendrá:</p>
<ul>
<li>El título, la imagen, la descripción y un fanart opcional.</li>
<li> La acción que debe ejecutarse si el usuario la selecciona (el nombre de la función), junto con la URL asociada en caso de que sea necesaria.</li>
<li> El atributo <strong>server</strong> si la entrada corresponde a un vídeo, junto con el código del servidor donde esté alojado. Consulta la lista completa en el directorio &#8220;servers&#8221; del código.</li>
<li> Un atributo <strong>folder</strong> a &#8220;True&#8221; si la entrada es navegable, o &#8220;False&#8221; si es un vídeo.</li>
</ul>
<p>5) <strong>Itemlist</strong>: Cada función deberá devolver una lista de entradas de tipo &#8220;item&#8221; que el plugin debe interpretar.</p>
<p>Además de ser compatible con cualquier plataforma, una ventaja adicional de los canales genéricos es que no necesitas programar tus propias funciones para las operaciones normales del plugin. En particular hay dos funciones ya implementadas, que te simplificarán mucho la vida:</p>
<ul>
<li><strong>findvideos</strong>: Descarga la página desde la URL que le pasas, busca todos los vídeos de todos los servidores conocidos, y devuelve un listado de entradas. Estas entradas se muestran al usuario para que elija.</li>
<li><strong>play</strong>: Partiendo de la URL del vídeo que le pasas, y del servidor que has especificado, se encarga de la reproducción. Básicamente, esta función es la que muestra las opciones de &#8220;Ver&#8221;, &#8220;Descargar&#8221;, etc.</li>
</ul>
<p>Si todo esto te suena a chino creo que con un ejemplo lo verás mejor. Pero lo veremos en la próxima entrega <img src='http://www.mimediacenter.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mimediacenter.info/2011/04/01/guia-de-desarrollo-de-pelisalacarta-como-hacer-canales-multiplataforma/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Mod del skin Confluence para ver argumentos de los vídeos</title>
		<link>http://www.mimediacenter.info/2010/05/06/mod-del-skin-confluence-para-ver-argumentos-de-los-videos/</link>
		<comments>http://www.mimediacenter.info/2010/05/06/mod-del-skin-confluence-para-ver-argumentos-de-los-videos/#comments</comments>
		<pubDate>Thu, 06 May 2010 21:13:43 +0000</pubDate>
		<dc:creator>Jesus</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[confluence]]></category>
		<category><![CDATA[pelisalacarta]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[skin]]></category>

		<guid isPermaLink="false">http://www.mimediacenter.info/?p=299</guid>
		<description><![CDATA[El nuevo mod que ha hecho Wolfk sobre el skin Confluence para XBMC permite ver el argumento de los vídeos de pelisalacarta]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share"><div style="width:100px;" class="really_simple_share_facebook_like"> 
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.mimediacenter.info%2F2010%2F05%2F06%2Fmod-del-skin-confluence-para-ver-argumentos-de-los-videos%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
					scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
			</div><div style="width:90px;" class="really_simple_share_google1"> 
				<g:plusone size="medium" href="http://www.mimediacenter.info/2010/05/06/mod-del-skin-confluence-para-ver-argumentos-de-los-videos/" ></g:plusone>
			</div><div style="width:110px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Mod del skin Confluence para ver argumentos de los vídeos" data-url="http://www.mimediacenter.info/2010/05/06/mod-del-skin-confluence-para-ver-argumentos-de-los-videos/">Tweet</a> 
			</div></div>
		<div style="clear:both;"></div><p>Si usas el skin Rapier y te gusta pelisalacarta, espero que a estas alturas ya tengas instalado el mod que publiqué <a href="/2010/01/30/mod-del-skin-rapier-v3-06/">hace un tiempo</a> para poder ver el argumento de las pelis al seleccionarlas.</p>
<p>Si por el contrario prefieres el skin Confluence que viene por defecto con XBMC, ahora estás de suerte. El compañero Wolfk ha preparado un mod de este skin con algunos cambios interesantes.</p>
<p>El que más me gusta es el que permite que un vídeo seleccionado en pelisalacarta muestre el argumento sobre la carátula, de forma que se simplifica bastante el navegar entre grandes colecciones de vídeos.</p>
<p><img class="aligncenter size-full wp-image-300" title="CF Mod Pelisalacarta" src="http://www.mimediacenter.info/wp-content/uploads/2010/05/cfmodpelisalacarta01.jpg" alt="" width="480" height="360" /></p>
<p>Pero hay alguna mejora más:</p>
<ul>
<li>Vistas en miniaturas en modo &#8220;biblioteca&#8221; para que el que usa banners pueda seguir viendolos</li>
<li>Nueva vista &#8220;Replicante&#8221;</li>
<li>Nueva vista &#8220;Replicante 2&#8243; parecida a &#8220;Fanarts&#8221; pero para todas las vistas de biblioteca</li>
</ul>
<p>Gracias a Wolfk por este regalito. Podéis descargarlo pulsando <a href="http://www.mimediacenter.info/xbmc/skins/CF%20Mod%20Pelisalacarta%201.0.zip">aqui</a>, y a disfrutarlo <img src='http://www.mimediacenter.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.mimediacenter.info/2010/05/06/mod-del-skin-confluence-para-ver-argumentos-de-los-videos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Como añadir canales a pelisalacarta (parte 3 y última)</title>
		<link>http://www.mimediacenter.info/2009/12/29/como-anadir-canales-a-pelisalacarta-parte-3-y-ultima/</link>
		<comments>http://www.mimediacenter.info/2009/12/29/como-anadir-canales-a-pelisalacarta-parte-3-y-ultima/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 14:33:08 +0000</pubDate>
		<dc:creator>Jesus</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[pelisalacarta]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[xbmc]]></category>

		<guid isPermaLink="false">http://www.mimediacenter.info/?p=180</guid>
		<description><![CDATA[Tercera y última parte del tutorial que describe cómo añadir un nuevo canal a pelisalacarta]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share"><div style="width:100px;" class="really_simple_share_facebook_like"> 
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.mimediacenter.info%2F2009%2F12%2F29%2Fcomo-anadir-canales-a-pelisalacarta-parte-3-y-ultima%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
					scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
			</div><div style="width:90px;" class="really_simple_share_google1"> 
				<g:plusone size="medium" href="http://www.mimediacenter.info/2009/12/29/como-anadir-canales-a-pelisalacarta-parte-3-y-ultima/" ></g:plusone>
			</div><div style="width:110px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Como añadir canales a pelisalacarta (parte 3 y última)" data-url="http://www.mimediacenter.info/2009/12/29/como-anadir-canales-a-pelisalacarta-parte-3-y-ultima/">Tweet</a> 
			</div></div>
		<div style="clear:both;"></div><blockquote><p>Esta entrada es parte de una serie.</p>
<p>Puedes leer la <b>entrada anterior</b> en <a href="http://www.mimediacenter.info/2009/11/04/como-anadir-canales-a-pelisalacarta-parte-2/">Cómo añadir canales a pelisalacarta &#8211; Parte 2 (Paginación, menús)</a>
</p>
<p>Si te interesa no te pierdas la sección <a href="http://www.mimediacenter.info/guias-de-desarrollo/">guías de desarrollo</a></p>
</blockquote>
<p>Hoy vamos a darle los últimos retoques a nuestro canal para Cinegratis, que a pesar de ser el objetivo de este tutorial por no ser especialmente difícil ha resultado un canal que uso a dario porque es muy completo y con muchas opciones.</p>
<p>En esta última entrega vamos a añadirle algunas cosas que vienen muy bien cuando estás buscando un vídeo en pelisalacarta, además de tratar de recoger todo el contenido posible de la web. Hoy veremos:</p>
<ul>
<li>Como añadir el buscador</li>
<li>Como añadir menús para el filtro por Veoh, Megavideo, Subtituladas, Latino, &#8230; y Deportes</li>
<li>Como terminar de arreglar series y anime</li>
<li>Como añadir listados por categorías para el cine, y alfabéticos para todos los canales</li>
</ul>
<p>¿Parece mucho para una única entrega? Veréis que es realmente sencillo, puesto que sólo necesitamos una función por cada página diferente y vienen a ser todas similares.</p>
<p>Lo primero que vamos a hacer es añadir todas las opciones necesarias en el menú principal, usando la función &#8220;addnewfolder&#8221; que recibe como parámetro la función a ejecutar cuando se seleccione la opción, el título en pantalla y la URL de descarga en caso de ser necesario.</p>
<div id="attachment_189" class="wp-caption aligncenter" style="width: 349px"><img class="size-full wp-image-189" title="Nuevo menú para Cinegratis en pelisalacarta" src="http://www.mimediacenter.info/wp-content/uploads/2009/12/tutorial-pelisalacarta-3-01b.jpg" alt="Nuevo menú para Cinegratis en pelisalacarta" width="339" height="343" /><p class="wp-caption-text">Nuevo menú para Cinegratis en pelisalacarta</p></div>
<div id="attachment_190" class="wp-caption aligncenter" style="width: 540px"><img class="size-full wp-image-190" title="Definición del menú en Python" src="http://www.mimediacenter.info/wp-content/uploads/2009/12/tutorial-pelisalacarta-3-02.jpg" alt="Definición del menú en Python" width="530" height="160" /><p class="wp-caption-text">Definición del menú en Python</p></div>
<p>Viendo el código del menú hay varias cosas interesantes que permiten hacerse mejor una idea de como funciona esto:</p>
<ul>
<li>La opcion <strong>&#8220;Películas &#8211; Novedades&#8221;</strong> se procesa con la función <strong>&#8220;listvideos&#8221;,</strong> que utilizan también algunas de las demás opciones. Esta función interpreta las páginas que tienen listados de vídeos con carátula y descripción.</li>
<li>La opción <strong>&#8220;Series &#8211; Todas&#8221;</strong> se procesa con la nueva función <strong>&#8220;listsimple&#8221;</strong> que también usan algunas opciones más como veremos más abajo. Esta función interpreta las páginas que tienen listados sin carátula ni descripción.</li>
<li>Algunas opciones como las listas de películas por categoría, deportes, etc. tienen funciones específicas porque son diferentes del resto.</li>
<li>La URL (que no se ve completa en la captura) corresponde con la que sale en el navegador cuando pulsas esa opción en la página. Algunas entradas de menú, como el buscador, no la necesitan.</li>
</ul>
<p>Para hacer el buscador añadimos la funcion <strong>&#8220;search&#8221;</strong> donde pedimos al usuario cuál es el texto a buscar usando el teclado en pantalla de XBMC. Con ese texto construimos la URL que muestra los resultados de búsqueda y se la pasamos a la funcion <strong>&#8220;listsimple&#8221;</strong> que interpreta los resultados.</p>
<div id="attachment_191" class="wp-caption aligncenter" style="width: 358px"><img class="size-full wp-image-191" title="Función de búsqueda" src="http://www.mimediacenter.info/wp-content/uploads/2009/12/tutorial-pelisalacarta-3-03.jpg" alt="Función de búsqueda" width="348" height="160" /><p class="wp-caption-text">Función de búsqueda</p></div>
<div id="attachment_192" class="wp-caption aligncenter" style="width: 408px"><img class="size-full wp-image-192" title="Buscador en XBMC" src="http://www.mimediacenter.info/wp-content/uploads/2009/12/tutorial-pelisalacarta-3-04.jpg" alt="Buscador en XBMC" width="398" height="286" /><p class="wp-caption-text">Buscador en XBMC</p></div>
<p>La función <strong>&#8220;listsimple&#8221;</strong> es similar a la que había <strong>&#8220;listvideos&#8221;</strong> pero con un patrón distinto. Cuando se selecciona un vídeo lleva a la misma función <strong>&#8220;detail&#8221;</strong>, ya que las páginas de detalle de una peli son siempre iguales.</p>
<div id="attachment_193" class="wp-caption aligncenter" style="width: 540px"><img class="size-full wp-image-193" title="listsimple" src="http://www.mimediacenter.info/wp-content/uploads/2009/12/tutorial-pelisalacarta-3-05.jpg" alt="listsimple" width="530" height="300" /><p class="wp-caption-text">listsimple</p></div>
<p>Con esto el buscador ya está operativo, y de paso todas las opciones de menú que usan esta función.</p>
<p>El listado alfabético de películas es un menú manual que tiene una entrada para cada letra, y se construye de forma similar al menú principal. No lo reproduzco aquí porque es muy sencillo, si tenéis dudas podéis mirar la función <strong>&#8220;pelisalfa&#8221;</strong> en el código.</p>
<p>El listado por categorías se construye extrayendo cada categoría de la página, con sus iconos y todo, y añadiendo manualmente las categorías &#8220;Versión original&#8221; y &#8220;Versión latina&#8221;.</p>
<div id="attachment_195" class="wp-caption aligncenter" style="width: 540px"><img class="size-full wp-image-195" title="Listado de categorías" src="http://www.mimediacenter.info/wp-content/uploads/2009/12/tutorial-pelisalacarta-3-06.jpg" alt="Listado de categorías" width="530" height="290" /><p class="wp-caption-text">Listado de categorías</p></div>
<p>Esta nueva función <strong>&#8220;peliscat&#8221;</strong> es algo diferente, pero tampoco es muy compleja. Utiliza un patrón para sacar las categorías, y una vez que tiene la categoría dentro del bucle for utiliza otro patrón para sacar el nombre de la categoría de la URL. Esto es necesario porque las categorías tienen icono, pero no título.</p>
<p>El resultado de cada categoría encontrada se añade como carpeta, con la función &#8220;listvideos&#8221; como responsable de procesar los resultados al presentarse con carátula y descripción.</p>
<div id="attachment_197" class="wp-caption aligncenter" style="width: 540px"><img class="size-full wp-image-197" title="Listado de películas por categoría" src="http://www.mimediacenter.info/wp-content/uploads/2009/12/tutorial-pelisalacarta-3-07.jpg" alt="Listado de películas por categoría" width="530" height="251" /><p class="wp-caption-text">Listado de películas por categoría</p></div>
<p>La sección de Deportes no es muy diferente del resto, así que si te interesa ver cómo funciona puedes descargarte el código fuente.</p>
<p>A modo de resumen he preparado un pequeño dibujo donde se ven todas las funciones que hay definidas en este canal de pelisalacarta, y la dependencia que tienen unas de otras.</p>
<div id="attachment_200" class="wp-caption aligncenter" style="width: 486px"><img class="size-full wp-image-200" title="Esquema general de todas las funciones y su dependencia" src="http://www.mimediacenter.info/wp-content/uploads/2009/12/tutorial-pelisalacarta-3-08.jpg" alt="Esquema general de todas las funciones y su dependencia" width="476" height="430" /><p class="wp-caption-text">Esquema general de todas las funciones y su dependencia</p></div>
<p>Con esto damos por concluido el post, y el tutorial de 3 partes que cuenta cómo añadir un canal a pelisalacarta. Espero que haya sido suficientemente explicativo, y que gracias a él os animéis a añadir vuestros propios canales.</p>
<p>El código fuente del nuevo canal está <a href="http://www.mimediacenter.info/tutorial/20091229/cinegratis.py">disponible aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mimediacenter.info/2009/12/29/como-anadir-canales-a-pelisalacarta-parte-3-y-ultima/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como añadir canales a pelisalacarta (Parte 2)</title>
		<link>http://www.mimediacenter.info/2009/11/04/como-anadir-canales-a-pelisalacarta-parte-2/</link>
		<comments>http://www.mimediacenter.info/2009/11/04/como-anadir-canales-a-pelisalacarta-parte-2/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 06:21:01 +0000</pubDate>
		<dc:creator>Jesus</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[pelisalacarta]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[xbmc]]></category>

		<guid isPermaLink="false">http://www.mimediacenter.info/?p=150</guid>
		<description><![CDATA[Tweet Esta entrada es parte de una serie. Puedes leer la entrada anterior en Cómo añadir canales a pelisalacarta &#8211; Parte 1 (Un canal sencillo) Puedes leer la entrada siguiente en Cómo añadir canales a pelisalacarta &#8211; Parte 3 (Buscador, retoques finales) Si te interesa no te pierdas la sección guías de desarrollo La entrega [...]]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share"><div style="width:100px;" class="really_simple_share_facebook_like"> 
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.mimediacenter.info%2F2009%2F11%2F04%2Fcomo-anadir-canales-a-pelisalacarta-parte-2%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
					scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
			</div><div style="width:90px;" class="really_simple_share_google1"> 
				<g:plusone size="medium" href="http://www.mimediacenter.info/2009/11/04/como-anadir-canales-a-pelisalacarta-parte-2/" ></g:plusone>
			</div><div style="width:110px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Como añadir canales a pelisalacarta (Parte 2)" data-url="http://www.mimediacenter.info/2009/11/04/como-anadir-canales-a-pelisalacarta-parte-2/">Tweet</a> 
			</div></div>
		<div style="clear:both;"></div><blockquote><p>Esta entrada es parte de una serie.</p>
<p>Puedes leer la <b>entrada anterior</b> en <a href="http://www.mimediacenter.info/2009/09/24/como-anadir-canales-a-pelisalacarta-parte-1/">Cómo añadir canales a pelisalacarta &#8211; Parte 1 (Un canal sencillo)</a></p>
<p>Puedes leer la <b>entrada siguiente</b> en <a href="http://www.mimediacenter.info/2009/12/29/como-anadir-canales-a-pelisalacarta-parte-3-y-ultima/">Cómo añadir canales a pelisalacarta &#8211; Parte 3 (Buscador, retoques finales)</a></p>
<p>Si te interesa no te pierdas la sección <a href="http://www.mimediacenter.info/guias-de-desarrollo/">guías de desarrollo</a></p>
</blockquote>
<p>La entrega anterior de este tutorial describía cómo añadir un nuevo canal Cinegratis a pelisalacarta, pero es una web con muchas posibilidades y sólo pusimos la primera página del listado de las películas.</p>
<p>En esta segunda entrega vamos a ver cómo realizar algunas mejoras básicas:</p>
<p><strong>1) Paginación de resultados</strong></p>
<p>Para permitir avanzar entre páginas hay que añadir a la lista de resultados una carpeta &#8220;Página siguiente&#8221; que apunte a la URL de la página. Normalmente basta con buscar el botón &#8220;Siguiente&#8221; y poner la URL, pero en este caso es un poco más difícil porque no existe ese botón.</p>
<p>Si nos fijamos en el paginador veremos que el número de página actual está subrayado (menos mal).</p>
<div id="attachment_151" class="wp-caption aligncenter" style="width: 178px"><img class="size-full wp-image-151" title="Estoy en la página 6" src="http://www.mimediacenter.info/wp-content/uploads/2009/11/tutorial-pelisalacarta-2-1.jpg" alt="Estoy en la página 6" width="168" height="30" /><p class="wp-caption-text">Estoy en la página 6</p></div>
<p>Si buscamos en el HTML veremos que esa página está marcada con los tags &lt;u&gt; y &lt;/u&gt;, así que ya tenemos la forma de distinguir la página.</p>
<div id="attachment_153" class="wp-caption aligncenter" style="width: 396px"><img class="size-full wp-image-153" title="Estoy en la página 6" src="http://www.mimediacenter.info/wp-content/uploads/2009/11/tutorial-pelisalacarta-2-2.jpg" alt="Estoy en la página 6" width="386" height="63" /><p class="wp-caption-text">Estoy en la página 6</p></div>
<p>Lo que hacemos es duplicar el bloque que detecta las películas, para que detecte entradas usando una expresión regular distinta. En este caso suele ser fácil ya que no necesitamos más que la URL, que volverá a apuntar además a la misma función.</p>
<div id="attachment_154" class="wp-caption aligncenter" style="width: 500px"><img class="size-full wp-image-154" title="El bloque que detecta la paginación" src="http://www.mimediacenter.info/wp-content/uploads/2009/11/tutorial-pelisalacarta-2-3.jpg" alt="El bloque que detecta la paginación" width="490" height="175" /><p class="wp-caption-text">El bloque que detecta la paginación</p></div>
<p>Esto añadirá el bloque de &#8220;Página siguiente&#8221; dos veces, puesto que en la web hay dos paginadores en la zonas superior e inferior de la página. Si queremos evitarlo basta con cambiar el bucle &#8220;for&#8221; por un &#8220;if&#8221; sencillo.</p>
<div id="attachment_155" class="wp-caption aligncenter" style="width: 377px"><img class="size-full wp-image-155" title="Sólo necesito un paginador" src="http://www.mimediacenter.info/wp-content/uploads/2009/11/tutorial-pelisalacarta-2-4.jpg" alt="Sólo necesito un paginador" width="367" height="96" /><p class="wp-caption-text">Sólo necesito un paginador</p></div>
<p>Para que esto funcione sólo es necesario un cambio más. En la función &#8220;mainlist&#8221; está la URL de la página de forma estática, así que aunque le pasemos la URL de la página siguiente no la va a coger. Hay que cambiar esto:</p>
<div id="attachment_156" class="wp-caption aligncenter" style="width: 458px"><img class="size-full wp-image-156" title="URL fija" src="http://www.mimediacenter.info/wp-content/uploads/2009/11/tutorial-pelisalacarta-2-5.jpg" alt="URL fija" width="448" height="112" /><p class="wp-caption-text">URL fija</p></div>
<p>Por esto:</p>
<div id="attachment_157" class="wp-caption aligncenter" style="width: 488px"><img class="size-full wp-image-157" title="URL parametrizable" src="http://www.mimediacenter.info/wp-content/uploads/2009/11/tutorial-pelisalacarta-2-6.jpg" alt="URL parametrizable" width="478" height="126" /><p class="wp-caption-text">URL parametrizable</p></div>
<p>Y con esto ya tenemos paginación <img src='http://www.mimediacenter.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>2) Menú para permitir elegir entre películas, series, documentales, etc.</strong></p>
<p>Como la página que hemos elegido tiene muchas más opciones, la mayoría de ellas con una estructura de HTML similar, es probable que el código que ya tenemos nos sirva para ver las diferentes secciones de la web cambiando simplemente las URL. Para hacer un menú estático de este tipo, similar al que hay en otros canales de pelisalacarta, basta con copiar y pegar. Usemos como ejemplo el de Peliculasyonkis:</p>
<div id="attachment_158" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-158" title="El menú de peliculasyonkis" src="http://www.mimediacenter.info/wp-content/uploads/2009/11/tutorial-pelisalacarta-2-7.jpg" alt="El menú de peliculasyonkis" width="500" height="118" /><p class="wp-caption-text">El menú de peliculasyonkis</p></div>
<p>Básicamente consiste en añadir a mano las carpetas, poniendo la función que debe ejecutarse, el título que quieres que tengan y la URL desde la que descargar la página con los contenidos. Algunas opciones no necesitarán URL, como el buscador, que será objeto de próximas entregas de este tutorial.</p>
<p>Nuestro menú sería más bien así, con las URL sacadas directamente del menú de Cinegratis:</p>
<div id="attachment_160" class="wp-caption aligncenter" style="width: 540px"><img class="size-full wp-image-160" title="Menú de Cinegratis" src="http://www.mimediacenter.info/wp-content/uploads/2009/11/tutorial-pelisalacarta-2-8.jpg" alt="Menú de Cinegratis" width="530" height="117" /><p class="wp-caption-text">El menú de Cinegratis</p></div>
<p>Para terminar es necesario renombrar la función &#8220;mainlist&#8221; que teníamos antes, para que pase a llamarse &#8220;listvideos&#8221;. Esto es porque la función de entrada al canal tiene que ser siempre &#8220;mainlist&#8221;, y ahora corresponde con nuestro nuevo menú.</p>
<p>Si entramos a probarlo veremos que funcionan bien las opciones de Películas, Estrenos y Documentales. Las de Series y Anime no van, así que probablemente el HTML de estas secciones sea distinto.</p>
<p>En la tercera y última entrega contaré cómo implementar el buscador de la web en el canal, además de explicar un poco más en detalle cómo funcionan las acciones y el paso de parámetros entre ellas. Esto nos permitirá montar las dos entradas de menú que faltan, y tener un menú más completo con categorías y listados alfabéticos. Eso nos dará una navegación más completa por la web.</p>
<p>De momento espero que lo disfrutéis. <a href="http://www.mimediacenter.info/tutorial/20091104/cinegratis.py">Aquí está el canal actualizado</a> para su descarga (incluido en la próxima versión de pelisalacarta 2.8).</p>
<p>Y aquí van las capturas de pantalla del canal tal como ha quedado, usando el skin Rapier que últimamente me gusta cada vez más.</p>
<p>He modificado un poquito el skin original para que muestre el argumento de la peli seleccionada, que ayuda mucho en el plugin. Si os interesa podéis bajaros el <a href="http://www.mimediacenter.info/tutorial/20091104/ViewsCommon.xml">fichero modificado aqui</a> y sustituirlo por el vuestro dentro de skin\Rapier\720p. Pero guardaros el original, que es un experimento <img src='http://www.mimediacenter.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="attachment_170" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-170" title="Menú principal" src="http://www.mimediacenter.info/wp-content/uploads/2009/11/tutorial-pelisalacarta-2-scr0.jpg" alt="El menú principal" width="500" height="333" /><p class="wp-caption-text">Menú principal</p></div>
<div id="attachment_171" class="wp-caption aligncenter" style="width: 510px"><img class="size-full wp-image-171" title="Listado de películas con paginación" src="http://www.mimediacenter.info/wp-content/uploads/2009/11/tutorial-pelisalacarta-2-scr1.jpg" alt="Listado de películas con paginación" width="500" height="333" /><p class="wp-caption-text">Listado de películas con paginación</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.mimediacenter.info/2009/11/04/como-anadir-canales-a-pelisalacarta-parte-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Como añadir canales a pelisalacarta (Parte 1)</title>
		<link>http://www.mimediacenter.info/2009/09/24/como-anadir-canales-a-pelisalacarta-parte-1/</link>
		<comments>http://www.mimediacenter.info/2009/09/24/como-anadir-canales-a-pelisalacarta-parte-1/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 02:07:32 +0000</pubDate>
		<dc:creator>Jesus</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[pelisalacarta]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[xbmc]]></category>

		<guid isPermaLink="false">http://www.mimediacenter.info/?p=102</guid>
		<description><![CDATA[Tweet Esta entrada es la primera de una serie. Puedes leer la entrada siguiente en Cómo añadir canales a pelisalacarta &#8211; 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 [...]]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share"><div style="width:100px;" class="really_simple_share_facebook_like"> 
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.mimediacenter.info%2F2009%2F09%2F24%2Fcomo-anadir-canales-a-pelisalacarta-parte-1%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
					scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
			</div><div style="width:90px;" class="really_simple_share_google1"> 
				<g:plusone size="medium" href="http://www.mimediacenter.info/2009/09/24/como-anadir-canales-a-pelisalacarta-parte-1/" ></g:plusone>
			</div><div style="width:110px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Como añadir canales a pelisalacarta (Parte 1)" data-url="http://www.mimediacenter.info/2009/09/24/como-anadir-canales-a-pelisalacarta-parte-1/">Tweet</a> 
			</div></div>
		<div style="clear:both;"></div><blockquote><p>Esta entrada es la <b>primera de una serie</b>.</p>
<p>Puedes leer la <b>entrada siguiente</b> en <a href="http://www.mimediacenter.info/2009/11/04/como-anadir-canales-a-pelisalacarta-parte-2/">Cómo añadir canales a pelisalacarta &#8211; Parte 2 (Paginación, menús)</a>
</p>
<p>Si te interesa no te pierdas la sección <a href="http://www.mimediacenter.info/guias-de-desarrollo/">guías de desarrollo</a></p>
</blockquote>
<p>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.</p>
<p>La estructura de ficheros del plugin es muy sencilla, y tiene los siguientes elementos:</p>
<div id="attachment_111" class="wp-caption alignleft" style="width: 106px"><img class="size-full wp-image-111" title="Directorios de pelisalacarta" src="http://www.mimediacenter.info/wp-content/uploads/2009/09/directorios.jpg" alt="Directorios de pelisalacarta" width="96" height="150" /><p class="wp-caption-text">Directorios</p></div>
<p><strong>channels</strong>: Contiene un fichero en Python (.py) para cada canal del plugin: Cinetube, Seriesyonkis, etc.<br />
<strong>servers</strong>: Contiene un fichero Python (.py) para cada servidor donde se alojan los vídeos: Megavideo, etc.<br />
<strong>downloads</strong>: Es el directorio de descargas por defecto<br />
<strong>resources/images</strong>: Donde se graban todas las imágenes del canal, iconos y demás<br />
<strong>resources/language</strong>: Los literales traducidos en varios idiomas, grabados en un fichero xml.<br />
<strong>resources/lib</strong>: El código común reutilizable en varios sitios.</p>
<p>Hay una serie de ficheros Python importantes que es necesario conocer para añadir un nuevo canal:</p>
<ul>
<li><strong>default.py</strong>: 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.</li>
</ul>
<ul>
<li><strong>pelisalacarta.py</strong>: Extrae los parámetros más importantes de la petición y redirige al selector de canales channelselector.py.</li>
</ul>
<ul>
<li><strong>channelselector.py</strong>: 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.</li>
</ul>
<ul>
<li><strong>channels/nuevocanal.py:</strong> Este es el fichero que vamos a crear con el nuevo canal.</li>
</ul>
<ul>
<li><strong>images/nuevocanal.png:</strong> Este es el fichero con el logotipo del canal.</li>
</ul>
<p style="text-align: left;">¿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.</p>
<p style="text-align: left;">Veamos el proceso paso a paso:</p>
<p style="text-align: left;">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.</p>
<div id="attachment_113" class="wp-caption aligncenter" style="width: 506px"><img class="size-full wp-image-113" title="Antes" src="http://www.mimediacenter.info/wp-content/uploads/2009/09/tutorial-pelisalacarta-02.jpg" alt="Antes" width="496" height="87" /><p class="wp-caption-text">Antes</p></div>
<div id="attachment_114" class="wp-caption aligncenter" style="width: 507px"><img class="size-full wp-image-114" title="Despues" src="http://www.mimediacenter.info/wp-content/uploads/2009/09/tutorial-pelisalacarta-03.jpg" alt="Despues" width="497" height="106" /><p class="wp-caption-text">Despues</p></div>
<p>2) Hacer el thumbnail del canal como un PNG de 255&#215;375 y grabarlo como images\cinegratis.png.</p>
<div id="attachment_117" class="wp-caption aligncenter" style="width: 265px"><img class="size-full wp-image-117" title="Icono de canal" src="http://www.mimediacenter.info/wp-content/uploads/2009/09/cinegratis.png" alt="Icono de canal" width="255" height="375" /><p class="wp-caption-text">Icono de canal</p></div>
<p>3) Probar el resultado hasta ahora, entrando en el plugin a ver si sale el canal <img src='http://www.mimediacenter.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="attachment_118" class="wp-caption aligncenter" style="width: 288px"><img class="size-full wp-image-118" title="El nuevo canal ya sale en XBMC" src="http://www.mimediacenter.info/wp-content/uploads/2009/09/tutorial-pelisalacarta-05.jpg" alt="El nuevo canal ya sale en XBMC" width="278" height="265" /><p class="wp-caption-text">El nuevo canal ya sale en XBMC</p></div>
<p>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.</p>
<p>5) Ábrelo con un editor y donde aparezca &#8220;pintadibujos&#8221; cámbialo por &#8220;cinegratis&#8221;</p>
<p>6) Cuando seleccionas el canal la primera función que se invoca es &#8220;mainlist&#8221;, 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 <a href="http://www.cinegratis.net/index.php?module=peliculas">http://www.cinegratis.net/index.php?module=peliculas</a>, así que vamos a ponerla en el plugin.</p>
<div id="attachment_123" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-123" title="Cambia la URL" src="http://www.mimediacenter.info/wp-content/uploads/2009/09/tutorial-pelisalacarta-06b.jpg" alt="Cambia la URL" width="480" height="185" /><p class="wp-caption-text">Cambia la URL</p></div>
<p>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.</p>
<p>Observando la página buscamos la primera película del listado:</p>
<div id="attachment_124" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-124" title="El listado de películas" src="http://www.mimediacenter.info/wp-content/uploads/2009/09/tutorial-pelisalacarta-07.jpg" alt="El listado de películas" width="480" height="377" /><p class="wp-caption-text">El listado de películas</p></div>
<p>En este caso se trata de la película &#8220;Lansky (1999)&#8221;. Si le das a &#8220;Ver código fuente&#8221; 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.</p>
<div id="attachment_134" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-134" title="HTML de la página con los elementos resaltados" src="http://www.mimediacenter.info/wp-content/uploads/2009/09/tutorial-pelisalacarta-12.jpg" alt="HTML de la página con los elementos resaltados" width="480" height="305" /><p class="wp-caption-text">HTML de la página con los elementos resaltados</p></div>
<p>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 &lt;table&gt;, en el primer &lt;td&gt;, y el argumento en el siguiente &lt;div&gt; que hay. En esa misma tabla está el enlace en un tag &lt;a&gt; y el thumbnail en un tag &lt;img&gt;. Veamos ahora la expresión regular, que describe exactamente lo mismo con su propia notación:</p>
<div id="attachment_126" class="wp-caption aligncenter" style="width: 519px"><img class="size-full wp-image-126" title="La expresión regular" src="http://www.mimediacenter.info/wp-content/uploads/2009/09/tutorial-pelisalacarta-10.jpg" alt="La expresión regular" width="509" height="84" /><p class="wp-caption-text">La expresión regular</p></div>
<p>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:</p>
<ul>
<li><strong>&#8220;&lt;table.*?&lt;td.*?&gt;&#8221;</strong></li>
<li>Empieza en la cadena &#8220;&lt;table&#8221;, luego tiene varios caracteres (representado por .*?) hasta llegar a un &#8220;&lt;td&#8221;, y otros caracteres más hasta llegar a un &#8220;&gt;&#8221; que es el cierre del tag td.</li>
<li><strong>&#8220;([^&lt;]+)&lt;span&#8221;</strong></li>
<li>Esta curiosa fórmula significa que a partir de ahí vale &#8220;cualquier cosa hasta encontrar el carácter &lt;&#8221;, aunque podría haber puesto también &#8220;.*?&#8221;. Los paréntesis indican además que esa parte del texto me interesa.</li>
<li>Luego viene otra vez la expresión .*?, porque no interesa nada más hasta llegar al primer &#8220;&lt;div&gt;&#8221;</li>
<li><strong>&#8220;&lt;div align=&#8217;justify&#8217;&gt;(.*?)&lt;/div&gt;.*?&#8221;</strong></li>
<li>Otra fórmula habitual que viene a significar hay un &#8220;&lt;div&gt;&#8221; con cosas dentro y luego un &#8220;&lt;/div&gt;&#8221;. Muy normal en HTML.</li>
</ul>
<p>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.</p>
<p>7) Copia la expresión regular en la variable &#8220;patronvideos&#8221; tal como está en la captura.</p>
<p>8 ) Asigna valor a las variables que interpretan la expresión regular, utilizando el array &#8220;matches&#8221; que va a almacenar las cadenas de texto extraídas.</p>
<div id="attachment_128" class="wp-caption aligncenter" style="width: 429px"><img class="size-full wp-image-128" title="Asignando valores a las variables" src="http://www.mimediacenter.info/wp-content/uploads/2009/09/tutorial-pelisalacarta-11.jpg" alt="Asignando valores a las variables" width="419" height="191" /><p class="wp-caption-text">Asignando valores a las variables</p></div>
<p>Vamos a dejarlo por aquí ahora, con el primer listado de películas de Cinegratis que ya podéis probar.</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<div id="attachment_127" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-127" title="El listado de películas" src="http://www.mimediacenter.info/wp-content/uploads/2009/09/tutorial-pelisalacarta-09.jpg" alt="El listado de películas" width="480" height="398" /><p class="wp-caption-text">El listado de películas</p></div>
<p>Puedes descargar la versión de <a href="http://www.mimediacenter.info/tutorial/20090924/cinegratis.py">cinegratis.py</a> con los cambios ya realizados en este enlace.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mimediacenter.info/2009/09/24/como-anadir-canales-a-pelisalacarta-parte-1/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Como usar el SVN Repo Installer de XBMC</title>
		<link>http://www.mimediacenter.info/2009/08/17/como-usar-el-svn-repo-installer-de-xbmc/</link>
		<comments>http://www.mimediacenter.info/2009/08/17/como-usar-el-svn-repo-installer-de-xbmc/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 13:00:12 +0000</pubDate>
		<dc:creator>Jesus</dc:creator>
				<category><![CDATA[Tutoriales]]></category>
		<category><![CDATA[pelisalacarta]]></category>
		<category><![CDATA[repositorio]]></category>
		<category><![CDATA[streaming]]></category>
		<category><![CDATA[tvalacarta]]></category>
		<category><![CDATA[xbmc]]></category>

		<guid isPermaLink="false">http://www.mimediacenter.info/?p=71</guid>
		<description><![CDATA[Tweet Admitámoslo. El mecanismo que proporciona XBMC para instalar plugins, SVN Repo Installer, no es para usuarios inexpertos. En este post voy a intentar describir el proceso paso a paso para despejar las dudas y que todo el mundo pueda usar estos programitas. El proceso está descrito usando el skin por defecto de XBMC (PM3HD) [...]]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share"><div style="width:100px;" class="really_simple_share_facebook_like"> 
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.mimediacenter.info%2F2009%2F08%2F17%2Fcomo-usar-el-svn-repo-installer-de-xbmc%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
					scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
			</div><div style="width:90px;" class="really_simple_share_google1"> 
				<g:plusone size="medium" href="http://www.mimediacenter.info/2009/08/17/como-usar-el-svn-repo-installer-de-xbmc/" ></g:plusone>
			</div><div style="width:110px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Como usar el SVN Repo Installer de XBMC" data-url="http://www.mimediacenter.info/2009/08/17/como-usar-el-svn-repo-installer-de-xbmc/">Tweet</a> 
			</div></div>
		<div style="clear:both;"></div><p>Admitámoslo. El mecanismo que proporciona XBMC para instalar plugins, <a href="http://http://code.google.com/p/xbmc-addons/">SVN Repo Installer</a>, no es para usuarios inexpertos. En este post voy a intentar describir el proceso paso a paso para despejar las dudas y que todo el mundo pueda usar estos programitas.</p>
<p>El proceso está descrito usando el skin por defecto de XBMC (PM3HD) que todo el mundo tiene instalado. Si tienes otro skin cambia provisionalmente a este para seguir los pasos, y luego vuelves a dejar el que estaba.</p>
<p>Desde el menú principal, tienes que darle a la derecha y seleccionar el icono &#8220;favoritos&#8221;.</p>
<div id="attachment_62" class="wp-caption aligncenter" style="width: 206px"><img class="size-full wp-image-62" title="Icono &quot;Favoritos&quot;" src="http://www.mimediacenter.info/wp-content/uploads/2009/08/xbmc-repo-02.jpg" alt="Icono &quot;Favoritos&quot;" width="196" height="120" /><p class="wp-caption-text">Icono &quot;Favoritos&quot;</p></div>
<p>Se te abrirá una ventana con el acceso al SVN Repo Installer.</p>
<div id="attachment_63" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-63" title="Acceso al SVN Repo Installer" src="http://www.mimediacenter.info/wp-content/uploads/2009/08/xbmc-repo-03.jpg" alt="Acceso al SVN Repo Installer" width="480" height="320" /><p class="wp-caption-text">Acceso al SVN Repo Installer</p></div>
<p>Al ejecutarlo te mostrará la lista de repositorios, donde puedes elegir &#8220;mimediacenter&#8221; entre otros repositorios <img src='http://www.mimediacenter.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="attachment_64" class="wp-caption aligncenter" style="width: 165px"><img class="size-full wp-image-64" title="Lista de repositorios" src="http://www.mimediacenter.info/wp-content/uploads/2009/08/xbmc-repo-04.jpg" alt="Lista de repositorios" width="155" height="145" /><p class="wp-caption-text">Lista de repositorios</p></div>
<p>Accede a la carpeta &#8220;plugins / vídeo&#8221; donde están tvalacarta y pelisalacarta. Elige el que quieras instalar y dale al botón para instalar.</p>
<div id="attachment_67" class="wp-caption aligncenter" style="width: 375px"><img class="size-full wp-image-67" title="Última oportunidad antes de instalar" src="http://www.mimediacenter.info/wp-content/uploads/2009/08/xbmc-repo-07.jpg" alt="Última oportunidad antes de instalar" width="365" height="164" /><p class="wp-caption-text">Última oportunidad antes de instalar</p></div>
<p>Ahora ya te puedes ir al apartado &#8220;Vídeos&#8221; del menú de XBMC.</p>
<div id="attachment_68" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-68" title="El menú de vídeos" src="http://www.mimediacenter.info/wp-content/uploads/2009/08/xbmc-repo-08.jpg" alt="El menú de vídeos" width="480" height="320" /><p class="wp-caption-text">El menú de vídeos</p></div>
<p>Dentro de &#8220;Vídeo plugins&#8221; tendrás ya disponibles los plugins que te hayas instalado.</p>
<div id="attachment_69" class="wp-caption aligncenter" style="width: 169px"><img class="size-full wp-image-69" title="Acceso a plugins de vídeo" src="http://www.mimediacenter.info/wp-content/uploads/2009/08/xbmc-repo-09.jpg" alt="Acceso a plugins de vídeo" width="159" height="176" /><p class="wp-caption-text">Acceso a plugins de vídeo</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.mimediacenter.info/2009/08/17/como-usar-el-svn-repo-installer-de-xbmc/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Nuevo repositorio de aplicaciones para Boxee</title>
		<link>http://www.mimediacenter.info/2009/08/08/nuevo-repositorio-de-aplicaciones-para-boxee/</link>
		<comments>http://www.mimediacenter.info/2009/08/08/nuevo-repositorio-de-aplicaciones-para-boxee/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 22:31:26 +0000</pubDate>
		<dc:creator>Jesus</dc:creator>
				<category><![CDATA[Novedades]]></category>
		<category><![CDATA[boxee]]></category>
		<category><![CDATA[pelisalacarta]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[tvalacarta]]></category>

		<guid isPermaLink="false">http://www.mimediacenter.info/?p=48</guid>
		<description><![CDATA[Tweet Después de varios días de pruebas he conseguido publicar un repositorio de aplicaciones para Boxee, así que se acabaron los problemas para instalar en este mediacenter las últimas versiones de tvalacarta y pelisalacarta. La dirección del repositorio es la siguiente: http://www.mimediacenter.info/boxee Para los que no hayan hecho esto nunca, estos los pasos necesarios para [...]]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share"><div style="width:100px;" class="really_simple_share_facebook_like"> 
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.mimediacenter.info%2F2009%2F08%2F08%2Fnuevo-repositorio-de-aplicaciones-para-boxee%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
					scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
			</div><div style="width:90px;" class="really_simple_share_google1"> 
				<g:plusone size="medium" href="http://www.mimediacenter.info/2009/08/08/nuevo-repositorio-de-aplicaciones-para-boxee/" ></g:plusone>
			</div><div style="width:110px;" class="really_simple_share_twitter"> 
				<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
					data-text="Nuevo repositorio de aplicaciones para Boxee" data-url="http://www.mimediacenter.info/2009/08/08/nuevo-repositorio-de-aplicaciones-para-boxee/">Tweet</a> 
			</div></div>
		<div style="clear:both;"></div><p>Después de varios días de pruebas he conseguido publicar un repositorio de aplicaciones para Boxee, así que se acabaron los problemas para instalar en este mediacenter las últimas versiones de tvalacarta y pelisalacarta.</p>
<p>La dirección del repositorio es la siguiente:</p>
<p style="padding-left: 30px;"><strong><span style="color: #ff0000;">http://www.mimediacenter.info/boxee</span></strong></p>
<p>Para los que no hayan hecho esto nunca, estos los pasos necesarios para añadir el nuevo repositorio a Boxee:</p>
<ul>
<li>Entra en el menú &#8220;App Box&#8221; y ahí selecciona la opción &#8220;Add repository&#8221;</li>
</ul>
<div id="attachment_49" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-49 " title="Añadir el repositorio" src="http://www.mimediacenter.info/wp-content/uploads/2009/08/boxee-repo-01.jpg" alt="Añadir el repositorio" width="480" height="300" /><p class="wp-caption-text">Añadir el repositorio</p></div>
<ul>
<li>Introduce como URL <span style="color: #ff0000;"><strong>http://www.mimediacenter.info/boxee</strong></span>, y te aparecerá el nuevo repositorio.</li>
</ul>
<div id="attachment_50" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-50" title="Nuevo repositorio añadido" src="http://www.mimediacenter.info/wp-content/uploads/2009/08/boxee-repo-02.jpg" alt="Nuevo repositorio añadido" width="480" height="300" /><p class="wp-caption-text">Nuevo repositorio añadido</p></div>
<ul>
<li>Ya puedes instalar tvalacarta y pelisalacarta desde el menú &#8220;New applications&#8221;</li>
</ul>
<div id="attachment_51" class="wp-caption aligncenter" style="width: 490px"><img class="size-full wp-image-51" title="tvalacarta entre los grandes :)" src="http://www.mimediacenter.info/wp-content/uploads/2009/08/boxee-repo-03.jpg" alt="tvalacarta entre los grandes :)" width="480" height="300" /><p class="wp-caption-text">tvalacarta entre los grandes, je je je</p></div>
<p>Si tenías las aplicaciones instaladas anteriormente, y quieres borrarlas para repetir la instalación desde el repositorio de una forma más elegante, no hay problema. Borra los directorios que creaste y luego elimina las aplicaciones de Boxee desde el menú &#8220;My applications&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mimediacenter.info/2009/08/08/nuevo-repositorio-de-aplicaciones-para-boxee/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
	</channel>
</rss>


<!-- W3 Total Cache: Minify debug info:
Engine:             disk: basic
Theme:              8eb47
Template:           archive
-->
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Served from: www.mimediacenter.info @ 2012-02-05 09:53:23 -->

<!-- W3 Total Cache: Page cache debug info:
Engine:             disk: basic
Cache key:          w3tc_www.mimediacenter.info_1_page_673b8530169b6b0fc43e2a4836271326_gzip
Caching:            enabled
Status:             not cached
Creation Time:      0.818s
Header info:
ETag:               "32dc7cdcc544c2a302d11bc0095249f2"
Last-Modified:      Tue, 22 Nov 2011 09:13:09 GMT
Vary:               Accept-Encoding, Cookie
X-Powered-By:       W3 Total Cache/0.9.2.4
Content-Encoding:   gzip
X-Pingback:         http://www.mimediacenter.info/xmlrpc.php
Content-Type:       text/xml; charset=UTF-8
-->
