Ejemplo n.º 1
0
def addlist2Library(item):
    logger.info("[moviezet.py] addlist2Library")

    from core import library
    import xbmcgui
    itemlist = []
    # Descarga la página
    data = scrapertools.cachePage(item.url)
    extra = item.extra.split("|")

    # Extrae las entradas (carpetas)
    patronvideos  = '<li onclick=\'listSeries\(3,"([^"]+)"\)\'><span class=\'nume\'>([^<]+)</span>([^<]+)</li>'
    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 ("[cuevana.py - addlist2Library] Total Episodios:"+str(totalepisodes))
    i = 0
    errores = 0
    nuevos = 0
    for match in matches:
        scrapedtitle = "S"+extra[1]+"E"+match[1]+" "+match[2].strip()
        Serie = extra[0]
        server = "Megaupload"
        i = i + 1
        pDialog.update(i*100/totalepisodes, 'Añadiendo episodio...',scrapedtitle)
        if (pDialog.iscanceled()):
            return
        url = "http://www.cuevana.tv/list_search_info.php?episodio="+match[0]
        scrapedthumbnail = ""
        scrapedplot = ""
        if (DEBUG):
            logger.info("scrapedtitle="+scrapedtitle)
            logger.info("url="+url) #OPCION 2.
            logger.info("scrapedthumbnail="+scrapedthumbnail)
            logger.info("Episodio "+str(i)+" de "+str(totalepisodes)+"("+str(i*100/totalepisodes)+"%)")
        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
    if errores > 0:
        logger.info ("[cuevana.py - addlist2Library] No se pudo añadir "+str(errores)+" episodios")

    library.update(totalepisodes,errores,nuevos)
def addlist2Library(params,url,category,verbose=True):
    """Adds al episodes of a given show to the library
    
        What it really does is create strm files containing plugin calls
        to the pelisalacarta plugin on each episode.
        For this to work you have to manually add the pelisalacarta-library path
        to the library with the apropiate Content provider (tvdb works just fine)
    """
    logger.info("[tvshack.py] addlist2Library")

    if params.has_key("Serie"):
        serie = params.get("Serie")
    else:
        serie = ""
    
    if verbose:
        pDialog = xbmcgui.DialogProgress()
        pDialog.create('pelisalacarta', 'A�adiendo episodios...')

    listaEp = devuelveListaEpisodios (params,url,category)
    episodios = 0
    errores = 0
    nuevos = 0
    for i,ep in enumerate(listaEp):
        if verbose:
            pDialog.update(i*100/len(listaEp), 'A�adiendo episodio...',ep['title'])
            if (pDialog.iscanceled()):
                return
        try:
            nuevos = nuevos + library.savelibrary(ep['title'],ep['url'],ep['thumbnail'],"",ep['plot'],canal=CHANNELNAME,category="Series",Serie=serie,verbose=False,accion="strm_detail",pedirnombre=False)
            episodios = episodios + 1
        except IOError:
            logger.info("Error al grabar el archivo "+ep['title'])
            errores = errores + 1

    if verbose:
        pDialog.close()
    if errores > 0:
        logger.info ("[tvshack.py - addlist2Library] No se pudo a�adir "+str(errores)+" episodios") 

    if verbose:
        library.update(episodios,errores,nuevos)

    return nuevos
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]
        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
Ejemplo n.º 4
0
def check_for_update(overwrite=True):
    logger.info("Actualizando series...")
    p_dialog = None
    serie_actualizada = False
    hoy = datetime.date.today()

    try:
        if config.get_setting("updatelibrary", "biblioteca") != 0:
            config.set_setting("updatelibrary_last_check", hoy.strftime('%Y-%m-%d'), "biblioteca")

            if config.get_setting("updatelibrary", "biblioteca") == 1 and not overwrite:
                # "Actualizar al inicio" y No venimos del canal configuracion
                updatelibrary_wait = [0, 10000, 20000, 30000, 60000]
                wait = updatelibrary_wait[int(config.get_setting("updatelibrary_wait", "biblioteca"))]
                if wait > 0:
                    import time
                    time.sleep(wait)

            heading = 'Actualizando biblioteca....'
            p_dialog = platformtools.dialog_progress_bg('pelisalacarta', heading)
            p_dialog.update(0, '')
            show_list = []

            for path, folders, files in filetools.walk(library.TVSHOWS_PATH):
                show_list.extend([filetools.join(path, f) for f in files if f == "tvshow.nfo"])

            # fix float porque la division se hace mal en python 2.x
            t = float(100) / len(show_list)

            for i, tvshow_file in enumerate(show_list):
                head_nfo, serie = library.read_nfo(tvshow_file)
                path = filetools.dirname(tvshow_file)

                logger.info("serie=" + serie.contentSerieName)
                p_dialog.update(int(math.ceil((i+1) * t)), heading, serie.contentSerieName)

                interval = int(serie.active) # Podria ser del tipo bool

                if not serie.active:
                    # si la serie no esta activa descartar
                    continue

                # obtenemos las fecha de auctualizacion y de la proxima programada para esta serie
                update_next = serie.update_next
                if update_next:
                    y, m, d = update_next.split('-')
                    update_next = datetime.date(int(y), int(m), int(d))
                else:
                    update_next = hoy

                update_last = serie.update_last
                if update_last:
                    y, m, d = update_last.split('-')
                    update_last = datetime.date(int(y), int(m), int(d))
                else:
                    update_last = hoy

                # si la serie esta activa ...
                if overwrite or config.get_setting("updatetvshows_interval", "biblioteca") == 0:
                    # ... forzar actualizacion independientemente del intervalo
                    serie_actualizada = update(path, p_dialog, i, t, serie, overwrite)

                elif interval == 1 and update_next <= hoy:
                    # ...actualizacion diaria
                    serie_actualizada = update(path, p_dialog, i, t, serie, overwrite)
                    if not serie_actualizada and update_last <= hoy - datetime.timedelta(days=7):
                        # si hace una semana q no se actualiza, pasar el intervalo a semanal
                        interval = 7
                        update_next = hoy + datetime.timedelta(days=interval)

                elif interval == 7 and update_next <= hoy:
                    # ...actualizacion semanal
                    serie_actualizada = update(path, p_dialog, i, t, serie, overwrite)
                    if not serie_actualizada:
                        if update_last <= hoy - datetime.timedelta(days=14):
                            # si hace 2 semanas q no se actualiza, pasar el intervalo a mensual
                            interval = 30

                        update_next += datetime.timedelta(days=interval)

                elif interval == 30 and update_next <= hoy:
                    # ...actualizacion mensual
                    serie_actualizada = update(path, p_dialog, i, t, serie, overwrite)
                    if not serie_actualizada:
                        update_next += datetime.timedelta(days=interval)


                if interval != int(serie.active) or update_next.strftime('%Y-%m-%d') != serie.update_next:
                    serie.active = interval
                    serie.update_next = update_next.strftime('%Y-%m-%d')
                    filetools.write(tvshow_file, head_nfo + serie.tojson())

                if serie_actualizada:
                    # Actualizamos la biblioteca de Kodi
                    library.update(folder=filetools.basename(path))

            p_dialog.close()

        else:
            logger.info("No actualiza la biblioteca, está desactivado en la configuración de pelisalacarta")

    except Exception as ex:
        logger.error("Se ha producido un error al actualizar las series")
        template = "An exception of type {0} occured. Arguments:\n{1!r}"
        message = template.format(type(ex).__name__, ex.args)
        logger.error(message)

        if p_dialog:
            p_dialog.close()