From 60ad90829d7e889e68921ef65907a8903c2fd45f Mon Sep 17 00:00:00 2001
From: Kingbox <37674310+lopezvg@users.noreply.github.com>
Date: Wed, 6 Mar 2019 16:01:14 +0100
Subject: [PATCH] NewPct1: mejoras en Alta Disponibilidad
---
plugin.video.alfa/channels/newpct1.py | 24 +++++++++++++++---------
plugin.video.alfa/lib/generictools.py | 20 ++++++++++++++------
2 files changed, 29 insertions(+), 15 deletions(-)
diff --git a/plugin.video.alfa/channels/newpct1.py b/plugin.video.alfa/channels/newpct1.py
index c91e3c9a..a563068d 100644
--- a/plugin.video.alfa/channels/newpct1.py
+++ b/plugin.video.alfa/channels/newpct1.py
@@ -1315,7 +1315,7 @@ def findvideos(item):
#Renombramos el canal al nombre de clone elegido. Actualizados URL
host = scrapertools.find_single_match(item.url, '(http.?\:\/\/(?:www.)?\w+\.\w+\/)')
item.channel_host = host
- item.category = host.capitalize()
+ item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize()
verify_fo = True #Verificamos si el clone a usar está activo
item, data = generictools.fail_over_newpct1(item, verify_fo)
@@ -1446,8 +1446,9 @@ def findvideos(item):
if scrapertools.find_single_match(data, patron):
patron = patron_alt
url_torr = scrapertools.find_single_match(data, patron)
- if not url_torr.startswith("http"): #Si le falta el http.: lo ponemos
- url_torr = scrapertools.find_single_match(host, '(\w+:)//') + url_torr
+ if not url_torr.startswith("http"): #Si le falta el http.: lo ponemos
+ url_torr = scrapertools.find_single_match(item.channel_host, '(\w+:)//') + url_torr
+
#Verificamos si se ha cargado una página, y si además tiene la estructura correcta
if not data or not scrapertools.find_single_match(data, patron) or not videolibrarytools.verify_url_torrent(url_torr): # Si no hay datos o url, error
item = generictools.web_intervenida(item, data) #Verificamos que no haya sido clausurada
@@ -1509,6 +1510,9 @@ def findvideos(item):
patron = 'class="btn-torrent">.*?window.location.href = "(.*?)";' #Patron para .torrent
if not scrapertools.find_single_match(data, patron):
patron = ' max_temp:
logger.error("ERROR 07: EPISODIOS: Error en número de Temporada o Episodio: " + " / TEMPORADA/EPISODIO: " + str(match['season']) + " / " + str(match['episode']) + " / NUM_TEMPORADA: " + str(max_temp) + " / " + str(season) + " / MATCHES: " + str(matches))
match['season'] = scrapertools.find_single_match(item_local.url, '\/[t|T]emp\w+-*(\d+)\/')
+ num_temporadas_flag = False
if not match['season']:
match['season'] = season_alt
else:
diff --git a/plugin.video.alfa/lib/generictools.py b/plugin.video.alfa/lib/generictools.py
index bd2284fb..1cd22f3f 100644
--- a/plugin.video.alfa/lib/generictools.py
+++ b/plugin.video.alfa/lib/generictools.py
@@ -1494,8 +1494,9 @@ def fail_over_newpct1(item, patron, patron2=None, timeout=None):
fail_over = settings['default'] #Carga lista de clones
break
fail_over_list = ast.literal_eval(fail_over)
+ #logger.debug(str(fail_over_list))
- if item.from_channel and item.from_channel != 'videolibrary': #Desde search puede venir con el nombre de canal equivocado
+ if item.from_channel and item.from_channel != 'videolibrary': #Desde search puede venir con el nombre de canal equivocado
item.channel = item.from_channel
#Recorremos el Array identificando el canal que falla
for active, channel, channel_host, contentType, action_excluded in fail_over_list:
@@ -1508,10 +1509,11 @@ def fail_over_newpct1(item, patron, patron2=None, timeout=None):
channel_failed = channel #salvamos el nombre del canal o categoría
channel_host_failed = channel_host #salvamos el nombre del host
channel_url_failed = item.url #salvamos la url
+ #logger.debug(channel_failed + ' / ' + channel_host_failed)
if patron == True and active == '1': #solo nos han pedido verificar el clone
return (item, data) #nos vamos, con el mismo clone, si está activo
- if (item.action == 'episodios' or item.action == 'findvideos') and item.contentType not in contentType: #soporta el fail_over de este contenido?
+ if (item.action == 'episodios' or item.action == "update_tvshow" or item.action == "get_seasons" or item.action == 'findvideos') and item.contentType not in contentType: #soporta el fail_over de este contenido?
logger.error("ERROR 99: " + item.action.upper() + ": Acción no soportada para Fail-Over en canal: " + item.url)
return (item, data) #no soporta el fail_over de este contenido, no podemos hacer nada
break
@@ -1526,7 +1528,7 @@ def fail_over_newpct1(item, patron, patron2=None, timeout=None):
data_alt = ''
if channel == channel_failed or active == '0' or item.action in action_excluded or item.extra2 in action_excluded: #es válido el nuevo canal?
continue
- if (item.action == 'episodios' or item.action == 'findvideos') and item.contentType not in contentType: #soporta el contenido?
+ if (item.action == 'episodios' or item.action == "update_tvshow" or item.action == "get_seasons" or item.action == 'findvideos') and item.contentType not in contentType: #soporta el contenido?
continue
#Hacemos el cambio de nombre de canal y url, conservando las anteriores como ALT
@@ -1536,12 +1538,16 @@ def fail_over_newpct1(item, patron, patron2=None, timeout=None):
item.category = channel.capitalize()
item.url_alt = channel_url_failed
item.url = channel_url_failed
- item.url = item.url.replace(channel_host_failed, channel_host)
+ channel_host_bis = re.sub(r'(?i)http.*://', '', channel_host)
+ channel_host_failed_bis = re.sub(r'(?i)http.*://', '', channel_host_failed)
+ item.url = item.url.replace(channel_host_failed_bis, channel_host_bis)
+
url_alt += [item.url] #salvamos la url para el bucle
item.channel_host = channel_host
+ #logger.debug(str(url_alt))
#quitamos el código de series, porque puede variar entre webs
- if item.action == "episodios" or item.action == "get_seasons":
+ if item.action == "episodios" or item.action == "get_seasons" or item.action == "update_tvshow":
item.url = re.sub(r'\/\d+\/?$', '', item.url) #parece que con el título solo ecuentra la serie, normalmente...
url_alt = [item.url] #salvamos la url para el bucle, pero de momento ignoramos la inicial con código de serie
@@ -1602,9 +1608,11 @@ def fail_over_newpct1(item, patron, patron2=None, timeout=None):
#Función especial para encontrar en otro clone un .torrent válido
if verify_torrent == 'torrent:check:status':
from core import videolibrarytools
+ if not data_alt.startswith("http"): #Si le falta el http.: lo ponemos
+ data_alt = scrapertools.find_single_match(item.channel_host, '(\w+:)//') + data_alt
if videolibrarytools.verify_url_torrent(data_alt): #verificamos si el .torrent existe
item.url = url #guardamos la url que funciona
- break #nos vamos, con la nueva url del .torrent verificada
+ break #nos vamos, con la nueva url del .torrent verificada
data = ''
continue #no vale el .torrent, continuamos
item.url = url #guardamos la url que funciona, sin verificar