Introdotto deflang in scrape

Filtro all'aggiunta in videoteca per serie con più lingue e risoluzioni
This commit is contained in:
Alhaziel
2019-09-10 20:55:21 +02:00
parent b010155f31
commit d8b61a92bd
2 changed files with 122 additions and 63 deletions
+22 -17
View File
@@ -155,13 +155,16 @@ def scrapeLang(scraped, lang, longtitle):
## in ita e subita delle serie tv nella stessa pagina ## in ita e subita delle serie tv nella stessa pagina
# altrimenti dopo un sub-ita mette tutti quelli a seguire in sub-ita # altrimenti dopo un sub-ita mette tutti quelli a seguire in sub-ita
# e credo sia utile per filtertools # e credo sia utile per filtertools
lang = 'ITA' language = ''
if scraped['lang']: if scraped['lang']:
if 'ita' in scraped['lang'].lower():
language = 'ITA'
if 'sub' in scraped['lang'].lower(): if 'sub' in scraped['lang'].lower():
lang = 'Sub-ITA' language = 'Sub-' + language
## elif 'ita' in scraped['lang'].lower():
## lang = 'ITA' if not language: language = lang
longtitle += typo(lang, '_ [] color kod') if language: longtitle += typo(language, '_ [] color kod')
return lang, longtitle return lang, longtitle
@@ -169,7 +172,7 @@ def cleantitle(title):
cleantitle = scrapertoolsV2.htmlclean(scrapertoolsV2.decodeHtmlentities(title).replace('"', "'").replace('×', 'x').replace('', '-')).strip() cleantitle = scrapertoolsV2.htmlclean(scrapertoolsV2.decodeHtmlentities(title).replace('"', "'").replace('×', 'x').replace('', '-')).strip()
return cleantitle return cleantitle
def scrapeBlock(item, args, block, patron, headers, action, pagination, debug, typeContentDict, typeActionDict, blacklist, search, pag, function): def scrapeBlock(item, args, block, patron, headers, action, pagination, debug, typeContentDict, typeActionDict, blacklist, search, pag, function, lang):
itemlist = [] itemlist = []
log("scrapeBlock qui", block, patron) log("scrapeBlock qui", block, patron)
matches = scrapertoolsV2.find_multiple_matches_groups(block, patron) matches = scrapertoolsV2.find_multiple_matches_groups(block, patron)
@@ -179,7 +182,7 @@ def scrapeBlock(item, args, block, patron, headers, action, pagination, debug, t
regexDbg(item, patron, headers, block) regexDbg(item, patron, headers, block)
known_keys = ['url', 'title', 'title2', 'episode', 'thumb', 'quality', 'year', 'plot', 'duration', 'genere', 'rating', 'type', 'lang'] known_keys = ['url', 'title', 'title2', 'episode', 'thumb', 'quality', 'year', 'plot', 'duration', 'genere', 'rating', 'type', 'lang']
lang = '' # aggiunto per gestire i siti con pagine di serietv dove si hanno i video in ita e in subita # lang = '' # aggiunto per gestire i siti con pagine di serietv dove si hanno i video in ita e in subita
for i, match in enumerate(matches): for i, match in enumerate(matches):
if pagination and (pag - 1) * pagination > i: continue # pagination if pagination and (pag - 1) * pagination > i: continue # pagination
if pagination and i >= pag * pagination: break # pagination if pagination and i >= pag * pagination: break # pagination
@@ -210,13 +213,15 @@ def scrapeBlock(item, args, block, patron, headers, action, pagination, debug, t
longtitle = title + (s if title and title2 else '') + title2 longtitle = title + (s if title and title2 else '') + title2
longtitle = typo(longtitle, 'bold') longtitle = typo(longtitle, 'bold')
longtitle += (typo(Type,'_ () bold') if Type else '') + (typo(quality, '_ [] color kod') if quality else '') longtitle += (typo(Type,'_ () bold') if Type else '') + (typo(quality, '_ [] color kod') if quality else '')
# per togliere la voce [ITA] da liste che non siano titoli (es.: genere) # # per togliere la voce [ITA] da liste che non siano titoli (es.: genere)
if action != 'peliculas': # if action != 'peliculas':
lang, longtitle = scrapeLang(scraped, lang, longtitle) # lang, longtitle = scrapeLang(scraped, lang, longtitle)
else: # else:
longtitle = longtitle.replace('[ITA]','') # longtitle = longtitle.replace('[ITA]','')
lang = '' # lang = ''
lang, longtitle = scrapeLang(scraped, lang, longtitle)
# if title is set, probably this is a list of episodes or video sources # if title is set, probably this is a list of episodes or video sources
# necessaria l'aggiunta di == scraped["title"] altrimenti non prende i gruppi dopo le categorie # necessaria l'aggiunta di == scraped["title"] altrimenti non prende i gruppi dopo le categorie
@@ -338,7 +343,7 @@ def scrape(func):
debug = args['debug'] if 'debug' in args else False debug = args['debug'] if 'debug' in args else False
if 'pagination' in args: pagination = args['pagination'] if args['pagination'] else 20 if 'pagination' in args: pagination = args['pagination'] if args['pagination'] else 20
else: pagination = '' else: pagination = ''
lang = args['deflang'] if 'deflang' in args else ''
pag = item.page if item.page else 1 # pagination pag = item.page if item.page else 1 # pagination
matches = [] matches = []
@@ -355,7 +360,7 @@ def scrape(func):
block = "" block = ""
for bl in blocks: for bl in blocks:
blockItemlist, blockMatches = scrapeBlock(item, args, bl['block'], patron, headers, action, pagination, debug, blockItemlist, blockMatches = scrapeBlock(item, args, bl['block'], patron, headers, action, pagination, debug,
typeContentDict, typeActionDict, blacklist, search, pag, function) typeContentDict, typeActionDict, blacklist, search, pag, function, lang)
for it in blockItemlist: for it in blockItemlist:
if 'lang' in bl: if 'lang' in bl:
it.contentLanguage, it.title = scrapeLang(bl, it.contentLanguage, it.title) it.contentLanguage, it.title = scrapeLang(bl, it.contentLanguage, it.title)
@@ -367,7 +372,7 @@ def scrape(func):
matches.extend(blockMatches) matches.extend(blockMatches)
elif patron: elif patron:
itemlist, matches = scrapeBlock(item, args, data, patron, headers, action, pagination, debug, typeContentDict, itemlist, matches = scrapeBlock(item, args, data, patron, headers, action, pagination, debug, typeContentDict,
typeActionDict, blacklist, search, pag, function) typeActionDict, blacklist, search, pag, function, lang)
checkHost(item, itemlist) checkHost(item, itemlist)
+100 -46
View File
@@ -6,6 +6,7 @@
import errno import errno
import math import math
import traceback import traceback
import re
from core import filetools from core import filetools
from core import scraper from core import scraper
@@ -200,7 +201,7 @@ def save_movie(item):
except: except:
logger.error("No se ha podido guardar las urls de emergencia de %s en la videoteca" % item.contentTitle) logger.error("No se ha podido guardar las urls de emergencia de %s en la videoteca" % item.contentTitle)
logger.error(traceback.format_exc()) logger.error(traceback.format_exc())
if filetools.write(json_path, item.tojson()): if filetools.write(json_path, item.tojson()):
p_dialog.update(100, 'Añadiendo película...', item.contentTitle) p_dialog.update(100, 'Añadiendo película...', item.contentTitle)
item_nfo.library_urls[item.channel] = item.url item_nfo.library_urls[item.channel] = item.url
@@ -313,19 +314,72 @@ def save_tvshow(item, episodelist):
# FILTERTOOLS # FILTERTOOLS
# si el canal tiene filtro de idiomas, añadimos el canal y el show # si el canal tiene filtro de idiomas, añadimos el canal y el show
if episodelist and "list_language" in episodelist[0]: # if episodelist and "list_language" in episodelist[0]:
# si ya hemos añadido un canal previamente con filtro, añadimos o actualizamos el canal y show # # si ya hemos añadido un canal previamente con filtro, añadimos o actualizamos el canal y show
if "library_filter_show" in item_tvshow: # if "library_filter_show" in item_tvshow:
if item.title_from_channel: # if item.title_from_channel:
item_tvshow.library_filter_show[item.channel] = item.title_from_channel # item_tvshow.library_filter_show[item.channel] = item.title_from_channel
else: # else:
item_tvshow.library_filter_show[item.channel] = item.show # item_tvshow.library_filter_show[item.channel] = item.show
# no habia ningún canal con filtro y lo generamos por primera vez # # no habia ningún canal con filtro y lo generamos por primera vez
else: # else:
if item.title_from_channel: # if item.title_from_channel:
item_tvshow.library_filter_show = {item.channel: item.title_from_channel} # item_tvshow.library_filter_show = {item.channel: item.title_from_channel}
else: # else:
item_tvshow.library_filter_show = {item.channel: item.show} # item_tvshow.library_filter_show = {item.channel: item.show}
# SELECT EISODE BY LANG AND QUALITY
quality_dict = {"BLURAY": ["br", "bluray"],
"FULLHD": ["fullhd", "fullhd 1080", "fullhd 1080p", "full hd", "full hd 1080", "full hd 1080p", "hd1080", "hd1080p", "hd 1080", "hd 1080p", "1080", "1080p"],
"HD": ["hd", "hd720", "hd720p", "hd 720", "hd 720p", "720", "720p", "hdtv"],
"480P": ["sd", "480p", '480'],
"360P": ["360p", "360"],
"240P": ["240p", "240"]}
ep_list = []
lang_list = []
quality_list = []
# Make lang_list and Quality_list
for episode in episodelist:
if episode.contentLanguage and episode.contentLanguage not in lang_list: lang_list.append(episode.contentLanguage)
for name, var in quality_dict.items():
if not episode.quality and 'N/A' not in quality_list:
quality_list.append('N/A')
if episode.quality.lower() in var and name not in quality_list:
quality_list.append(name)
# if more than one language
if len(lang_list) > 1:
selection = platformtools.dialog_select(config.get_localized_string(70725),lang_list)
it = []
for episode in episodelist:
if episode.contentLanguage == lang_list[selection]:
it.append(episode)
episodelist = it
# if more than one quality
if len(quality_list) > 1:
selection = platformtools.dialog_select(config.get_localized_string(70726),quality_list)
stop = False
while not stop:
for episode in episodelist:
title = scrapertools.find_single_match(episode.title, '(\d+x\d+)')
if not any(title in word for word in ep_list) and episode.quality.lower() in quality_dict[quality_list[selection]]:
ep_list.append(episode.title)
if selection != 0: selection = selection - 1
else: stop = True
if quality_list[selection] == 'N/A':
for episode in episodelist:
title = scrapertools.find_single_match(episode.title, '(\d+x\d+)')
if not any(title in word for word in ep_list) and not episode.quality.lower():
ep_list.append(episode.title)
it = []
for episode in episodelist:
if episode.title in ep_list:
it.append(episode)
episodelist = it
if item.channel != "downloads": if item.channel != "downloads":
item_tvshow.active = 1 # para que se actualice a diario cuando se llame a videolibrary_service item_tvshow.active = 1 # para que se actualice a diario cuando se llame a videolibrary_service
@@ -343,7 +397,7 @@ def save_tvshow(item, episodelist):
'''msg = "Insertados: %d | Sobreescritos: %d | Fallidos: %d | Tiempo: %2.2f segundos" % \ '''msg = "Insertados: %d | Sobreescritos: %d | Fallidos: %d | Tiempo: %2.2f segundos" % \
(insertados, sobreescritos, fallidos, time.time() - start_time) (insertados, sobreescritos, fallidos, time.time() - start_time)
logger.debug(msg)''' logger.debug(msg)'''
return insertados, sobreescritos, fallidos, path return insertados, sobreescritos, fallidos, path
@@ -406,7 +460,7 @@ def save_episodes(path, episodelist, serie, silent=False, overwrite=True):
if serie.torrent_caching_fail: #Si el proceso de conversión ha fallado, no se cachean if serie.torrent_caching_fail: #Si el proceso de conversión ha fallado, no se cachean
emergency_urls_stat = 0 emergency_urls_stat = 0
del serie.torrent_caching_fail del serie.torrent_caching_fail
new_episodelist = [] new_episodelist = []
# Obtenemos el numero de temporada y episodio y descartamos los q no lo sean # Obtenemos el numero de temporada y episodio y descartamos los q no lo sean
tags = [] tags = []
@@ -415,10 +469,10 @@ def save_episodes(path, episodelist, serie, silent=False, overwrite=True):
for e in episodelist: for e in episodelist:
if tags != [] and tags != None and any(tag in e.title.lower() for tag in tags): if tags != [] and tags != None and any(tag in e.title.lower() for tag in tags):
continue continue
try: try:
season_episode = scrapertools.get_season_and_episode(e.title) season_episode = scrapertools.get_season_and_episode(e.title)
# Si se ha marcado la opción de url de emergencia, se añade ésta a cada episodio después de haber ejecutado Findvideos del canal # Si se ha marcado la opción de url de emergencia, se añade ésta a cada episodio después de haber ejecutado Findvideos del canal
if e.emergency_urls and isinstance(e.emergency_urls, dict): del e.emergency_urls #Borramos trazas anteriores if e.emergency_urls and isinstance(e.emergency_urls, dict): del e.emergency_urls #Borramos trazas anteriores
json_path = filetools.join(path, ("%s [%s].json" % (season_episode, e.channel)).lower()) #Path del .json del episodio json_path = filetools.join(path, ("%s [%s].json" % (season_episode, e.channel)).lower()) #Path del .json del episodio
@@ -445,7 +499,7 @@ def save_episodes(path, episodelist, serie, silent=False, overwrite=True):
e = emergency_urls(e, channel, json_path) #generamos las urls e = emergency_urls(e, channel, json_path) #generamos las urls
if e.emergency_urls: #Si ya tenemos urls... if e.emergency_urls: #Si ya tenemos urls...
emergency_urls_succ = True #... es un éxito y vamos a marcar el .nfo emergency_urls_succ = True #... es un éxito y vamos a marcar el .nfo
if not e.infoLabels["tmdb_id"] or (serie.infoLabels["tmdb_id"] and e.infoLabels["tmdb_id"] != serie.infoLabels["tmdb_id"]): #en series multicanal, prevalece el infolabels... if not e.infoLabels["tmdb_id"] or (serie.infoLabels["tmdb_id"] and e.infoLabels["tmdb_id"] != serie.infoLabels["tmdb_id"]): #en series multicanal, prevalece el infolabels...
e.infoLabels = serie.infoLabels #... del canal actual y no el del original e.infoLabels = serie.infoLabels #... del canal actual y no el del original
e.contentSeason, e.contentEpisodeNumber = season_episode.split("x") e.contentSeason, e.contentEpisodeNumber = season_episode.split("x")
@@ -560,7 +614,7 @@ def save_episodes(path, episodelist, serie, silent=False, overwrite=True):
import datetime import datetime
head_nfo, tvshow_item = read_nfo(tvshow_path) head_nfo, tvshow_item = read_nfo(tvshow_path)
tvshow_item.library_playcounts.update(news_in_playcounts) tvshow_item.library_playcounts.update(news_in_playcounts)
#Si la operación de insertar/borrar urls de emergencia en los .jsons de los episodios ha tenido éxito, se marca el .nfo #Si la operación de insertar/borrar urls de emergencia en los .jsons de los episodios ha tenido éxito, se marca el .nfo
if emergency_urls_succ: if emergency_urls_succ:
if tvshow_item.emergency_urls and not isinstance(tvshow_item.emergency_urls, dict): if tvshow_item.emergency_urls and not isinstance(tvshow_item.emergency_urls, dict):
@@ -572,7 +626,7 @@ def save_episodes(path, episodelist, serie, silent=False, overwrite=True):
elif emergency_urls_stat == 2: #Operación de Borrar enlaces elif emergency_urls_stat == 2: #Operación de Borrar enlaces
if tvshow_item.emergency_urls and tvshow_item.emergency_urls.get(serie.channel, False): if tvshow_item.emergency_urls and tvshow_item.emergency_urls.get(serie.channel, False):
tvshow_item.emergency_urls.pop(serie.channel, None) #borramos la entrada del .nfo tvshow_item.emergency_urls.pop(serie.channel, None) #borramos la entrada del .nfo
if tvshow_item.active == 30: if tvshow_item.active == 30:
tvshow_item.active = 1 tvshow_item.active = 1
update_last = datetime.date.today() update_last = datetime.date.today()
@@ -624,11 +678,11 @@ def add_movie(item):
#Si lo hace en "Introducir otro nombre", TMDB buscará automáticamente el nuevo título #Si lo hace en "Introducir otro nombre", TMDB buscará automáticamente el nuevo título
#Si lo hace en "Completar Información", cambia parcialmente al nuevo título, pero no busca en TMDB. Hay que hacerlo #Si lo hace en "Completar Información", cambia parcialmente al nuevo título, pero no busca en TMDB. Hay que hacerlo
#Si se cancela la segunda pantalla, la variable "scraper_return" estará en False. El usuario no quiere seguir #Si se cancela la segunda pantalla, la variable "scraper_return" estará en False. El usuario no quiere seguir
item = generictools.update_title(item) #Llamamos al método que actualiza el título con tmdb.find_and_set_infoLabels item = generictools.update_title(item) #Llamamos al método que actualiza el título con tmdb.find_and_set_infoLabels
#if item.tmdb_stat: #if item.tmdb_stat:
# del item.tmdb_stat #Limpiamos el status para que no se grabe en la Videoteca # del item.tmdb_stat #Limpiamos el status para que no se grabe en la Videoteca
new_item = item.clone(action="findvideos") new_item = item.clone(action="findvideos")
insertados, sobreescritos, fallidos = save_movie(new_item) insertados, sobreescritos, fallidos = save_movie(new_item)
@@ -692,14 +746,14 @@ def add_tvshow(item, channel=None):
#Si lo hace en "Introducir otro nombre", TMDB buscará automáticamente el nuevo título #Si lo hace en "Introducir otro nombre", TMDB buscará automáticamente el nuevo título
#Si lo hace en "Completar Información", cambia parcialmente al nuevo título, pero no busca en TMDB. Hay que hacerlo #Si lo hace en "Completar Información", cambia parcialmente al nuevo título, pero no busca en TMDB. Hay que hacerlo
#Si se cancela la segunda pantalla, la variable "scraper_return" estará en False. El usuario no quiere seguir #Si se cancela la segunda pantalla, la variable "scraper_return" estará en False. El usuario no quiere seguir
item = generictools.update_title(item) #Llamamos al método que actualiza el título con tmdb.find_and_set_infoLabels item = generictools.update_title(item) #Llamamos al método que actualiza el título con tmdb.find_and_set_infoLabels
#if item.tmdb_stat: #if item.tmdb_stat:
# del item.tmdb_stat #Limpiamos el status para que no se grabe en la Videoteca # del item.tmdb_stat #Limpiamos el status para que no se grabe en la Videoteca
# Obtiene el listado de episodios # Obtiene el listado de episodios
itemlist = getattr(channel, item.action)(item) itemlist = getattr(channel, item.action)(item)
insertados, sobreescritos, fallidos, path = save_tvshow(item, itemlist) insertados, sobreescritos, fallidos, path = save_tvshow(item, itemlist)
if not insertados and not sobreescritos and not fallidos: if not insertados and not sobreescritos and not fallidos:
@@ -736,7 +790,7 @@ def add_tvshow(item, channel=None):
def emergency_urls(item, channel=None, path=None): def emergency_urls(item, channel=None, path=None):
logger.info() logger.info()
import re import re
""" """
Llamamos a Findvideos del canal con la variable "item.videolibray_emergency_urls = True" para obtener la variable Llamamos a Findvideos del canal con la variable "item.videolibray_emergency_urls = True" para obtener la variable
"item.emergency_urls" con la lista de listas de tuplas de los enlaces torrent y de servidores directos para ese episodio o película "item.emergency_urls" con la lista de listas de tuplas de los enlaces torrent y de servidores directos para ese episodio o película
En la lista [0] siempre deben ir los enlaces torrents, si los hay. Si se desea cachear los .torrents, la búsqueda va contra esa lista. En la lista [0] siempre deben ir los enlaces torrents, si los hay. Si se desea cachear los .torrents, la búsqueda va contra esa lista.
@@ -761,7 +815,7 @@ def emergency_urls(item, channel=None, path=None):
item_res = item.clone() #Si ha habido un error, se devuelve el Item original item_res = item.clone() #Si ha habido un error, se devuelve el Item original
if item_res.videolibray_emergency_urls: if item_res.videolibray_emergency_urls:
del item_res.videolibray_emergency_urls #... y se borra la marca de lookup del item_res.videolibray_emergency_urls #... y se borra la marca de lookup
#Si el usuario ha activado la opción "emergency_urls_torrents", se descargarán los archivos .torrent de cada título #Si el usuario ha activado la opción "emergency_urls_torrents", se descargarán los archivos .torrent de cada título
else: #Si se han cacheado con éxito los enlaces... else: #Si se han cacheado con éxito los enlaces...
try: try:
@@ -772,7 +826,7 @@ def emergency_urls(item, channel=None, path=None):
videolibrary_path = config.get_videolibrary_path() #detectamos el path absoluto del título videolibrary_path = config.get_videolibrary_path() #detectamos el path absoluto del título
movies = config.get_setting("folder_movies") movies = config.get_setting("folder_movies")
series = config.get_setting("folder_tvshows") series = config.get_setting("folder_tvshows")
if movies in path: if movies in path:
folder = movies folder = movies
else: else:
folder = series folder = series
@@ -786,7 +840,7 @@ def emergency_urls(item, channel=None, path=None):
if path_real: #Si ha tenido éxito... if path_real: #Si ha tenido éxito...
item_res.emergency_urls[0][i-1] = path_real.replace(videolibrary_path, '') #se guarda el "path" relativo item_res.emergency_urls[0][i-1] = path_real.replace(videolibrary_path, '') #se guarda el "path" relativo
i += 1 i += 1
#Restauramos variables originales #Restauramos variables originales
if item.referer: if item.referer:
item_res.referer = item.referer item_res.referer = item.referer
@@ -797,7 +851,7 @@ def emergency_urls(item, channel=None, path=None):
elif item_res.referer: elif item_res.referer:
del item_res.referer del item_res.referer
item_res.url = item.url item_res.url = item.url
except: except:
logger.error('ERROR al cachear el .torrent de: ' + item.channel + ' / ' + item.title) logger.error('ERROR al cachear el .torrent de: ' + item.channel + ' / ' + item.title)
logger.error(traceback.format_exc()) logger.error(traceback.format_exc())
@@ -805,8 +859,8 @@ def emergency_urls(item, channel=None, path=None):
#logger.debug(item_res.emergency_urls) #logger.debug(item_res.emergency_urls)
return item_res #Devolvemos el Item actualizado con los enlaces de emergencia return item_res #Devolvemos el Item actualizado con los enlaces de emergencia
def caching_torrents(url, referer=None, post=None, torrents_path=None, timeout=10, lookup=False, data_torrent=False): def caching_torrents(url, referer=None, post=None, torrents_path=None, timeout=10, lookup=False, data_torrent=False):
if torrents_path != None: if torrents_path != None:
logger.info("path = " + torrents_path) logger.info("path = " + torrents_path)
@@ -817,12 +871,12 @@ def caching_torrents(url, referer=None, post=None, torrents_path=None, timeout=1
from core import httptools from core import httptools
torrent_file = '' torrent_file = ''
headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Referer': referer} #Necesario para el Post del .Torrent headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Referer': referer} #Necesario para el Post del .Torrent
""" """
Descarga en el path recibido el .torrent de la url recibida, y pasa el decode Descarga en el path recibido el .torrent de la url recibida, y pasa el decode
Devuelve el path real del .torrent, o el path vacío si la operación no ha tenido éxito Devuelve el path real del .torrent, o el path vacío si la operación no ha tenido éxito
""" """
videolibrary_path = config.get_videolibrary_path() #Calculamos el path absoluto a partir de la Videoteca videolibrary_path = config.get_videolibrary_path() #Calculamos el path absoluto a partir de la Videoteca
if torrents_path == None: if torrents_path == None:
if not videolibrary_path: if not videolibrary_path:
@@ -834,14 +888,14 @@ def caching_torrents(url, referer=None, post=None, torrents_path=None, timeout=1
if '.torrent' not in torrents_path: if '.torrent' not in torrents_path:
torrents_path += '.torrent' #path para dejar el .torrent torrents_path += '.torrent' #path para dejar el .torrent
torrents_path_encode = filetools.encode(torrents_path) #encode utf-8 del path torrents_path_encode = filetools.encode(torrents_path) #encode utf-8 del path
if url.endswith(".rar") or url.startswith("magnet:"): #No es un archivo .torrent if url.endswith(".rar") or url.startswith("magnet:"): #No es un archivo .torrent
logger.error('No es un archivo Torrent: ' + url) logger.error('No es un archivo Torrent: ' + url)
torrents_path = '' torrents_path = ''
if data_torrent: if data_torrent:
return (torrents_path, torrent_file) return (torrents_path, torrent_file)
return torrents_path #Si hay un error, devolvemos el "path" vacío return torrents_path #Si hay un error, devolvemos el "path" vacío
try: try:
#Descargamos el .torrent #Descargamos el .torrent
if referer and post: #Descarga con POST if referer and post: #Descarga con POST
@@ -865,20 +919,20 @@ def caching_torrents(url, referer=None, post=None, torrents_path=None, timeout=1
return (torrents_path, torrent_file) return (torrents_path, torrent_file)
return torrents_path #Si hay un error, devolvemos el "path" vacío return torrents_path #Si hay un error, devolvemos el "path" vacío
torrent_file = response.data torrent_file = response.data
#Si es un archivo .ZIP tratamos de extraer el contenido #Si es un archivo .ZIP tratamos de extraer el contenido
if torrent_file.startswith("PK"): if torrent_file.startswith("PK"):
logger.info('Es un archivo .ZIP: ' + url) logger.info('Es un archivo .ZIP: ' + url)
torrents_path_zip = filetools.join(videolibrary_path, 'temp_torrents_zip') #Carpeta de trabajo torrents_path_zip = filetools.join(videolibrary_path, 'temp_torrents_zip') #Carpeta de trabajo
torrents_path_zip = filetools.encode(torrents_path_zip) torrents_path_zip = filetools.encode(torrents_path_zip)
torrents_path_zip_file = filetools.join(torrents_path_zip, 'temp_torrents_zip.zip') #Nombre del .zip torrents_path_zip_file = filetools.join(torrents_path_zip, 'temp_torrents_zip.zip') #Nombre del .zip
import time import time
filetools.rmdirtree(torrents_path_zip) #Borramos la carpeta temporal filetools.rmdirtree(torrents_path_zip) #Borramos la carpeta temporal
time.sleep(1) #Hay que esperar, porque si no da error time.sleep(1) #Hay que esperar, porque si no da error
filetools.mkdir(torrents_path_zip) #La creamos de nuevo filetools.mkdir(torrents_path_zip) #La creamos de nuevo
if filetools.write(torrents_path_zip_file, torrent_file): #Salvamos el .zip if filetools.write(torrents_path_zip_file, torrent_file): #Salvamos el .zip
torrent_file = '' #Borramos el contenido en memoria torrent_file = '' #Borramos el contenido en memoria
try: #Extraemos el .zip try: #Extraemos el .zip
@@ -889,7 +943,7 @@ def caching_torrents(url, referer=None, post=None, torrents_path=None, timeout=1
import xbmc import xbmc
xbmc.executebuiltin('XBMC.Extract("%s", "%s")' % (torrents_path_zip_file, torrents_path_zip)) xbmc.executebuiltin('XBMC.Extract("%s", "%s")' % (torrents_path_zip_file, torrents_path_zip))
time.sleep(1) time.sleep(1)
import os import os
for root, folders, files in os.walk(torrents_path_zip): #Recorremos la carpeta para leer el .torrent for root, folders, files in os.walk(torrents_path_zip): #Recorremos la carpeta para leer el .torrent
for file in files: for file in files:
@@ -906,7 +960,7 @@ def caching_torrents(url, referer=None, post=None, torrents_path=None, timeout=1
if data_torrent: if data_torrent:
return (torrents_path, torrent_file) return (torrents_path, torrent_file)
return torrents_path #Si hay un error, devolvemos el "path" vacío return torrents_path #Si hay un error, devolvemos el "path" vacío
#Salvamos el .torrent #Salvamos el .torrent
if not lookup: if not lookup:
if not filetools.write(torrents_path_encode, torrent_file): if not filetools.write(torrents_path_encode, torrent_file):
@@ -921,13 +975,13 @@ def caching_torrents(url, referer=None, post=None, torrents_path=None, timeout=1
torrent_file = '' #... y el buffer del .torrent torrent_file = '' #... y el buffer del .torrent
logger.error('Error en el proceso de descarga del .torrent: ' + url + ' / ' + torrents_path_encode) logger.error('Error en el proceso de descarga del .torrent: ' + url + ' / ' + torrents_path_encode)
logger.error(traceback.format_exc()) logger.error(traceback.format_exc())
#logger.debug(torrents_path) #logger.debug(torrents_path)
if data_torrent: if data_torrent:
return (torrents_path, torrent_file) return (torrents_path, torrent_file)
return torrents_path return torrents_path
def verify_url_torrent(url, timeout=5): def verify_url_torrent(url, timeout=5):
""" """
Verifica si el archivo .torrent al que apunta la url está disponible, descargándolo en un area temporal Verifica si el archivo .torrent al que apunta la url está disponible, descargándolo en un area temporal