Página 1 de 3

Biblioteca de series en XBOX y pelisalacarta 3 no funciona

Publicado: 07 Mar 2011, 20:36
por dartanyan
Hola

el añadido de series ha dejado de funcionar en pelisalacarta 3 o en las últimas versiones de XBMC4XBOX.

Hay dos problemas.

El primero es que ahora los ficheros se guardan en UserData/addons_data pero es fácilmente movible a la ruta que le toca en plugins/video/.

El segundo problema es que sigo teniendo que modificar SeriesYonkis.py para que el formato de nombre de fichero sea correcto en XBOX pero aún así ya no funciona. Resulta que ahora se guarda tanto el nombre de la serie como de los capítulos sin espacios. He revisado la función y no veo dónde puede estar ocurriendo pero eso impide que luego el Scrapper encuentre la serie y/o los números de capítulo.

No sé si me he explicado correctamente. Por poner un ejemplo, si se intenta guardar el capitulo "CSI LAS VEGAS 2x01" el nombre de fichero queda "CSILASVEGAS2x01"

Pongo aquí el código de la función addlist2Library que estoy usando ahora mismo por si alguien ve qué está ocurriendo (he marcado entre comentarios el código que he insertado yo para el correcto funcionamiento en XBOX). Yo sospecho que ahora library.savelibrary() funciona internamente de manera distinta, pero me parece un cambio un tanto extraño...

Código: Seleccionar todo

def addlist2Library(params,url,category):
    logger.info("[seriesyonkis.py] addlist2Library")

    # Descarga la p·gina
    data = scrapertools.cachePage(url)
    #logger.info(data)

    if params.has_key("Serie"):
        Serie = params.get("Serie")
    else:
        Serie = ""

    if params.has_key("server"):
        server = params.get("server")
    else:
        server = ""

    if params.has_key("thumbnail"):
        thumbnail = params.get("thumbnail")
    else:
        thumbnail = ""

    # Extrae las entradas (carpetas)
    patronvideos  = '<a href="(http://www.seriesyonkis.com/capitulo[^"]+)"[^>]+>([^<]+)</a>'
    matches = re.compile(patronvideos,re.DOTALL).findall(data)
    scrapertools.printMatches(matches)

    pDialog = xbmcgui.DialogProgress()
    ret = pDialog.create('pelisalacarta', 'AÒadiendo episodios...')
    pDialog.update(0, 'AÒadiendo episodio...')
    totalepisodes = len(matches)
    logger.info ("[seriesyonkis.py - addlist2Library] Total Episodios:"+str(totalepisodes))
    i = 0
    errores = 0
    nuevos = 0
    for match in matches:
        # Titulo
        scrapedtitle = match[1]

	# PARTE AÑADIDA POR DARTANYAN

	# Eliminamos el caracter ,
	scrapedtitle = scrapedtitle.replace(",","")

	# Eliminamos el caracter -
	scrapedtitle = scrapedtitle.replace("-","")

	# Nos quedamos con el nombre de la serie y con el num capitulo

	mo = re.match("^(.*) ([\d]{1,2}[x|X][\d]{1,3}) (.*)$", scrapedtitle)

	if mo == None:
		errores = errores + 1
		continue		

	if (DEBUG):
		xbmc.output("CAPITULO="+ mo.group(2))
	            
	# Cortamos el nombre del fichero
	# porque XBOX FATX no soporta mas de 42 caracteres
	# Cortamos hasta llegar a los caracteres del num. capitulo
	# típico de nombres como CSI 2x13 - Titulo del capitulo
	# en otro caso partimos a 30 caracteres
	posSeparador = mo.group(1).find(mo.group(2))
	if posSeparador > 30 or posSeparador == -1: 
		posSeparador = 30

	if (DEBUG):
		xbmc.output("SEPARADOR="+ str(posSeparador))

	scrapedtitle = mo.group(1)[:posSeparador] + " " + mo.group(2)

        # FIN PARTE AÑADIDA POR DARTANYAN

        i = i + 1
        pDialog.update(i*100/totalepisodes, 'AÒadiendo episodio...',scrapedtitle)
        if (pDialog.iscanceled()):
            return

        # URL
        #  Tenemos 2 opciones. Scrapear todos los episodios en el momento de aÒadirlos 
        #  a la biblioteca o bien dejarlo para cuando se vea cada episodio. Esto segundo
        #  aÒade los episodios mucho m·s r·pido, pero implica aÒadir una funciÛn
        #  strm_detail en cada mÛdulo de canal. Por el bien del rendimiento elijo la
        #  segunda opciÛn de momento (hacer la primera es simplemente descomentar un par de
        #  lÌneas.
        #  QUIZ¡ SEA BUENO PARAMETRIZARLO (PONER OPCI”N EN LA CONFIGURACI”N DEL PLUGIN)
        #  PARA DEJAR QUE EL USUARIO DECIDA DONDE Y CUANDO QUIERE ESPERAR.
        url = match [0]
        # JUR-Las 3 lÌneas siguientes son para OPCI”N 1
        #scrapedurl = scrapvideoURL(url)
        #if scrapedurl == "":
        #    errores = errores + 1
            
        # Thumbnail
        scrapedthumbnail = ""
        
        # procesa el resto
        scrapedplot = ""
        # Depuracion
        if (DEBUG):
            logger.info("scrapedtitle="+scrapedtitle)
#            logger.info("scrapedurl="+scrapedurl) #OPCION 1.
            logger.info("url="+url) #OPCION 2.
            logger.info("scrapedthumbnail="+scrapedthumbnail)
            logger.info("Serie="+Serie)
            logger.info("Episodio "+str(i)+" de "+str(totalepisodes)+"("+str(i*100/totalepisodes)+"%)")

        # AÒade a la librerÌa #Comentada la opciÛn 2. Para cambiar invertir los comentarios
        #OPCION 1:
        #library.savelibrary(scrapedtitle,scrapedurl,scrapedthumbnail,server,scrapedplot,canal=CHANNELNAME,category="Series",Serie=Serie,verbose=False)
        #OPCION 2
        try:
            nuevos = nuevos + library.savelibrary(scrapedtitle,url,scrapedthumbnail,server,scrapedplot,canal=CHANNELNAME,category="Series",Serie=Serie,verbose=False,accion="strm_detail",pedirnombre=False)
        except IOError:
            logger.info("Error al grabar el archivo "+scrapedtitle)
            errores = errores + 1
        
#    xbmcplugin.endOfDirectory( handle=int( sys.argv[ 1 ] ), succeeded=True )
    pDialog.close()
    
    #ActualizaciÛn de la biblioteca
    if errores > 0:
        logger.info ("[seriesyonkis.py - addlist2Library] No se pudo aÒadir "+str(errores)+" episodios") 
    library.update(totalepisodes,errores,nuevos)

    return nuevos

Saludos.

Re: Biblioteca de series en XBOX y pelisalacarta 3 no funcio

Publicado: 08 Mar 2011, 09:40
por dartanyan
Hola,

me he dado cuenta que el Scrapper sólo necesita el número de capítulo para funcionar, por lo que he simplificado la función para que los ficheros sólo tengan dicha información. Esto arregla en gran medida el problema de los ficheros sin espacio y el problema de la longitud de fichero de la XBOX. Por ejemplo, el capítulo "CSI LAS VEGAS 1x01" se guarda como "1x01".

Aún así sigue ocurriendo el tema del directorio donde se guardan las series y que el nombre de la serie se guarda sin espacios por lo que es necesario arreglarlo desde el Administrador de Ficheros, moverlo a su ubicación y renombrar la carpeta de la serie añadiendo los espacios.

Ahora, addlist2Library creo que es compatible con todas las plataformas y podría ser incluido el código en la versión final, si así lo estima Jesús y compañia ;)

La función queda como sigue:

Código: Seleccionar todo

def addlist2Library(params,url,category):
    logger.info("[seriesyonkis.py] addlist2Library")

    # Descarga la p·gina
    data = scrapertools.cachePage(url)
    #logger.info(data)

    if params.has_key("Serie"):
        Serie = params.get("Serie")
    else:
        Serie = ""

    if params.has_key("server"):
        server = params.get("server")
    else:
        server = ""

    if params.has_key("thumbnail"):
        thumbnail = params.get("thumbnail")
    else:
        thumbnail = ""

    # Extrae las entradas (carpetas)
    patronvideos  = '<a href="(http://www.seriesyonkis.com/capitulo[^"]+)"[^>]+>([^<]+)</a>'
    matches = re.compile(patronvideos,re.DOTALL).findall(data)
    scrapertools.printMatches(matches)

    pDialog = xbmcgui.DialogProgress()
    ret = pDialog.create('pelisalacarta', 'AÒadiendo episodios...')
    pDialog.update(0, 'AÒadiendo episodio...')
    totalepisodes = len(matches)
    logger.info ("[seriesyonkis.py - addlist2Library] Total Episodios:"+str(totalepisodes))
    i = 0
    errores = 0
    nuevos = 0
    for match in matches:
        # Titulo
        scrapedtitle = match[1]

	# PARTE DARTANYAN 

	# Nos quedamos por un lado con el nombre de la serie y 
	# por otro con el num capitulo

	mo = re.match("^(.*) ([\d]{1,2}[x|X][\d]{1,3}) (.*)$", scrapedtitle)

	if mo == None:
		errores = errores + 1
		continue		

	if (DEBUG):
		xbmc.output("CAPITULO="+ mo.group(2))	            
	
	# El nombre del fichero es el numero de capitulo
	scrapedtitle = mo.group(2)

        # FIN PARTE DARTANYAN

        i = i + 1
        pDialog.update(i*100/totalepisodes, 'AÒadiendo episodio...',scrapedtitle)
        if (pDialog.iscanceled()):
            return

        # URL
        #  Tenemos 2 opciones. Scrapear todos los episodios en el momento de aÒadirlos 
        #  a la biblioteca o bien dejarlo para cuando se vea cada episodio. Esto segundo
        #  aÒade los episodios mucho m·s r·pido, pero implica aÒadir una funciÛn
        #  strm_detail en cada mÛdulo de canal. Por el bien del rendimiento elijo la
        #  segunda opciÛn de momento (hacer la primera es simplemente descomentar un par de
        #  lÌneas.
        #  QUIZ¡ SEA BUENO PARAMETRIZARLO (PONER OPCI”N EN LA CONFIGURACI”N DEL PLUGIN)
        #  PARA DEJAR QUE EL USUARIO DECIDA DONDE Y CUANDO QUIERE ESPERAR.
        url = match [0]
        # JUR-Las 3 lÌneas siguientes son para OPCI”N 1
        #scrapedurl = scrapvideoURL(url)
        #if scrapedurl == "":
        #    errores = errores + 1
            
        # Thumbnail
        scrapedthumbnail = ""
        
        # procesa el resto
        scrapedplot = ""
        # Depuracion
        if (DEBUG):
            logger.info("scrapedtitle="+scrapedtitle)
#            logger.info("scrapedurl="+scrapedurl) #OPCION 1.
            logger.info("url="+url) #OPCION 2.
            logger.info("scrapedthumbnail="+scrapedthumbnail)
            logger.info("Serie="+Serie)
            logger.info("Episodio "+str(i)+" de "+str(totalepisodes)+"("+str(i*100/totalepisodes)+"%)")

        # AÒade a la librerÌa #Comentada la opciÛn 2. Para cambiar invertir los comentarios
        #OPCION 1:
        #library.savelibrary(scrapedtitle,scrapedurl,scrapedthumbnail,server,scrapedplot,canal=CHANNELNAME,category="Series",Serie=Serie,verbose=False)
        #OPCION 2
        try:
            nuevos = nuevos + library.savelibrary(scrapedtitle,url,scrapedthumbnail,server,scrapedplot,canal=CHANNELNAME,category="Series",Serie=Serie,verbose=False,accion="strm_detail",pedirnombre=False)
        except IOError:
            logger.info("Error al grabar el archivo "+scrapedtitle)
            errores = errores + 1
        
#    xbmcplugin.endOfDirectory( handle=int( sys.argv[ 1 ] ), succeeded=True )
    pDialog.close()
    
    #ActualizaciÛn de la biblioteca
    if errores > 0:
        logger.info ("[seriesyonkis.py - addlist2Library] No se pudo aÒadir "+str(errores)+" episodios") 
    library.update(totalepisodes,errores,nuevos)

    return nuevos

Saludos.

Re: Biblioteca de series en XBOX y pelisalacarta 3 no funcio

Publicado: 08 Mar 2011, 16:40
por bandavi
@dartanyan, muy buena idea lo de cortar los titulos y dejar solo el numero de los capitulos, esa puede ser la solucion para los problemas en los titulos sobre todo en la xbox ;)

El problema de los espacios en el nombre de la series y los titulos de los capitulos que a surgido ultimamente, la solucion la han encontrado en este tema.

Re: Biblioteca de series en XBOX y pelisalacarta 3 no funcio

Publicado: 08 Mar 2011, 21:40
por dartanyan
¿Con el tema de guardado de los ficheros en UserData en vez de en plugins no se puede hacer nada?

Saludos.

Re: Biblioteca de series en XBOX y pelisalacarta 3 no funcio

Publicado: 10 Mar 2011, 23:26
por jesus
Alguien que tenga xbmc4xbox debería hacer estos cambios, yo no me atrevo a hacerlos sin probarlos en un fichero del core. Me vale con que dejéis el fichero con los cambios realizados, pero por favor bajad la última versión del SVN antes de aplicarlos.

En cuanto a lo de grabar en "plugin" en lugar de grabar en "userdata", propongo hacer un fichero de "platform" específico para xbmc4xbox para dejar indicado expresamente que ese es el directorio de los datos (get_data_path). Para ello necesitamos una forma de identificar claramente la plataforma en el módulo "core/config.py", concretamente en esta parte:

Código: Seleccionar todo

try:
    import mc
    PLATFORM="boxee"
except:
    try:
        import xbmcaddon
        PLATFORM = "xbmcdharma"
    except ImportError:
        # XBMC
        try:
            import xbmc
            PLATFORM = "xbmc"
        except ImportError:
            print "Platform=DEVELOPER"
            # Eclipse
            PLATFORM = "developer"
Si eso no funciona, porque no se puede hacer por código, podemos utilizar un default.py específico y usar el truco que se usa en wiimc:

Código: Seleccionar todo

from core import config
config.force_platform("wiimc")
...
# Ejecuta el programa principal
from platform.wiimc import launcher
launcher.run()
Debería hacer una descripción más detallada de las nuevas tripas del bicho... igual es un poco raro ahora.

Re: Biblioteca de series en XBOX y pelisalacarta 3 no funcio

Publicado: 11 Mar 2011, 20:50
por dartanyan
Hola,

estaba pensando que si XBMC4XBOX está guardando los ficheros en UserData no sería suficiente con editar la fuente de "Videos de Pelisalacarta" de la biblioteca para que apunte a la nueva ruta? O necesariamente tienen que estar en plugins?

En cualquier caso, mi XBOX está disponible para las pruebas que hagan falta, aunque necesitaré alguna explicación más para entender lo que comentas.

Con respecto al arreglo que comentaba bandavi sobre los carácteres tengo que confirmar que no funciona correctamente. En los casos en los que el nombre de la serie contiene un carácter de exclusión directamente no se crea el directorio de la serie y los capítulos se guardan en la "raiz" ./library/SERIES/. Además, aquellas series que tienen en su nombre alguna tilde directamente salta un error en el script.

Saludos.

Re: Biblioteca de series en XBOX y pelisalacarta 3 no funcio

Publicado: 13 Mar 2011, 15:24
por bandavi
El xbmc4xbox utiliza el archivo config.py de platform/xbmcdharma, el cual funciona correctamente con la excepcion del path de la libreria

Código: Seleccionar todo

def get_library_path():
       return xbmc.translatePath("special://profile/addon_data/plugin.video."+PLUGIN_NAME+"/library")
Hice el sigte. cambio que funciona, ya lo he probado en la xbox y ya subi el cambio al svn.

Código: Seleccionar todo

def get_library_path():
	if get_system_platform() == "xbox":
		return xbmc.translatePath(os.path.join(get_runtime_path(),"library"))
	else:
		return xbmc.translatePath("special://profile/addon_data/plugin.video."+PLUGIN_NAME+"/library")
Tambien seria buena idea poder hacer que se pueda cambiar el path de la libreria en configuraciones.

@dartanyan, los casos de los caracteres con tildes en los nombres de las series en la xbox, prueba con esto:

Código: Seleccionar todo

title = "NCIS Los Ángeles"
import unicodedata
title = unicodedata.normalize('NFKD', title).encode('ascii','ignore')
#quedaria asi: title = "NCIS Los Angeles"
Mas o menos deberia de funcionar, me avisas si funciona en todos los casos,para poder incorporarlo en versiones posteriores

Re: Biblioteca de series en XBOX y pelisalacarta 3 no funcio

Publicado: 13 Mar 2011, 20:14
por dartanyan
Hola bandavi

he estado probando lo que comentabas y me ha funcionado pero modificando un poco de la siguiente manera:

En el fichero SeriesYonkis.py he añadido en la cabecera:

Código: Seleccionar todo

from unicodedata import normalize
Y después he modificado la función addlist2Library de la siguiente manera:

Código: Seleccionar todo

...
    if params.has_key("Serie"):
        Serie = params.get("Serie")
    else:
        Serie = ""

    # normaliza el nombre de la serie eliminando acentos y demás
    # para que luego no haya problemas con el nombre de la carpeta de la serie
    Serie = normalize('NFKD', unicode(Serie, 'utf-8')).encode('ASCII','ignore')

    if params.has_key("server"):
        server = params.get("server")
    else:
        server = ""
...
También he quitado el \t que había en deletechars de library.py porque creo que da problemas.

Saludos.

Re: Biblioteca de series en XBOX y pelisalacarta 3 no funcio

Publicado: 21 Mar 2011, 23:55
por SpAiK
Madre mia, si conseguís arreglar lo de las tildes os pongo un chalet en marbella :D

Por otro lado si necesitáis otra xbox de conejillo de indias decidme que ficheros he de editar y lo probaré.

Re: Biblioteca de series en XBOX y pelisalacarta 3 no funcio

Publicado: 23 Mar 2011, 18:28
por jesus
Con vistas al mar? Lejos de la cárcel?

Hecho!