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
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()