@@ -533,17 +533,17 @@ def findvideos(item):
|
||||
key = scrapertools.find_single_match(data_js, 'JSON.parse\(atob.*?substrings\((.*?)\)')
|
||||
|
||||
data_js = httptools.downloadpage("%s/js/providers.js" % host).data
|
||||
try:
|
||||
from lib import alfaresolver
|
||||
provs = alfaresolver.hdfull_providers(data_js)
|
||||
if provs == '': return []
|
||||
except:
|
||||
return []
|
||||
decoded = jhexdecode(data_js)
|
||||
providers_pattern = 'p\[(\d+)\]= {"t":"([^"]+)","d":".*?","e":.function.*?,"l":.function.*?return "([^"]+)".*?};'
|
||||
providers = scrapertools.find_multiple_matches (decoded, providers_pattern)
|
||||
provs = {}
|
||||
for provider, e, l in providers:
|
||||
provs[provider]=[e,l]
|
||||
|
||||
data = agrupa_datos(httptools.downloadpage(item.url).data)
|
||||
data_obf = scrapertools.find_single_match(data, "var ad\s*=\s*'([^']+)'")
|
||||
data_decrypt = jsontools.load(obfs(base64.b64decode(data_obf), 126 - int(key)))
|
||||
|
||||
data_decrypt = jsontools.load(obfs(base64.b64decode(data_obf), 126 - int(key)))
|
||||
infolabels = {}
|
||||
year = scrapertools.find_single_match(data, '<span>Año:\s*</span>.*?(\d{4})')
|
||||
infolabels["year"] = year
|
||||
@@ -552,7 +552,7 @@ def findvideos(item):
|
||||
if match['provider'] in provs:
|
||||
try:
|
||||
embed = provs[match['provider']][0]
|
||||
url = eval(provs[match['provider']][1].replace('_code_', "match['code']"))
|
||||
url = provs[match['provider']][1]+match['code']
|
||||
matches.append([match['lang'], match['quality'], url, embed])
|
||||
except:
|
||||
pass
|
||||
@@ -691,7 +691,6 @@ def get_status(status, type, id):
|
||||
## --------------------------------------------------------------------------------
|
||||
## --------------------------------------------------------------------------------
|
||||
|
||||
|
||||
def jhexdecode(t):
|
||||
r = re.sub(r'_\d+x\w+x(\d+)', 'var_' + r'\1', t)
|
||||
r = re.sub(r'_\d+x\w+', 'var_0', r)
|
||||
|
||||
@@ -99,7 +99,7 @@ load_cookies()
|
||||
|
||||
|
||||
def downloadpage(url, post=None, headers=None, timeout=None, follow_redirects=True, cookies=True, replace_headers=False,
|
||||
add_referer=False, only_headers=False, bypass_cloudflare=True, count_retries=0, random_headers=False, ignore_response_code=False):
|
||||
add_referer=False, only_headers=False, bypass_cloudflare=True, count_retries=0, random_headers=False, ignore_response_code=False, alfa_s=False):
|
||||
"""
|
||||
Abre una url y retorna los datos obtenidos
|
||||
|
||||
@@ -164,22 +164,23 @@ def downloadpage(url, post=None, headers=None, timeout=None, follow_redirects=Tr
|
||||
if timeout is None and HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT is not None: timeout = HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT
|
||||
if timeout == 0: timeout = None
|
||||
|
||||
logger.info("----------------------------------------------")
|
||||
logger.info("downloadpage Alfa: %s" %__version)
|
||||
logger.info("----------------------------------------------")
|
||||
logger.info("Timeout: %s" % timeout)
|
||||
logger.info("URL: " + url)
|
||||
logger.info("Dominio: " + urlparse.urlparse(url)[1])
|
||||
if post:
|
||||
logger.info("Peticion: POST")
|
||||
else:
|
||||
logger.info("Peticion: GET")
|
||||
logger.info("Usar Cookies: %s" % cookies)
|
||||
logger.info("Descargar Pagina: %s" % (not only_headers))
|
||||
logger.info("Fichero de Cookies: " + ficherocookies)
|
||||
logger.info("Headers:")
|
||||
for header in request_headers:
|
||||
logger.info("- %s: %s" % (header, request_headers[header]))
|
||||
if not alfa_s:
|
||||
logger.info("----------------------------------------------")
|
||||
logger.info("downloadpage Alfa: %s" %__version)
|
||||
logger.info("----------------------------------------------")
|
||||
logger.info("Timeout: %s" % timeout)
|
||||
logger.info("URL: " + url)
|
||||
logger.info("Dominio: " + urlparse.urlparse(url)[1])
|
||||
if post:
|
||||
logger.info("Peticion: POST")
|
||||
else:
|
||||
logger.info("Peticion: GET")
|
||||
logger.info("Usar Cookies: %s" % cookies)
|
||||
logger.info("Descargar Pagina: %s" % (not only_headers))
|
||||
logger.info("Fichero de Cookies: " + ficherocookies)
|
||||
logger.info("Headers:")
|
||||
for header in request_headers:
|
||||
logger.info("- %s: %s" % (header, request_headers[header]))
|
||||
|
||||
# Handlers
|
||||
handlers = [urllib2.HTTPHandler(debuglevel=False)]
|
||||
@@ -192,7 +193,8 @@ def downloadpage(url, post=None, headers=None, timeout=None, follow_redirects=Tr
|
||||
|
||||
opener = urllib2.build_opener(*handlers)
|
||||
|
||||
logger.info("Realizando Peticion")
|
||||
if not alfa_s:
|
||||
logger.info("Realizando Peticion")
|
||||
|
||||
# Contador
|
||||
inicio = time.time()
|
||||
@@ -243,15 +245,17 @@ def downloadpage(url, post=None, headers=None, timeout=None, follow_redirects=Tr
|
||||
response["time"] = time.time() - inicio
|
||||
response["url"] = handle.geturl()
|
||||
|
||||
logger.info("Terminado en %.2f segundos" % (response["time"]))
|
||||
logger.info("Response sucess: %s" % (response["sucess"]))
|
||||
logger.info("Response code: %s" % (response["code"]))
|
||||
logger.info("Response error: %s" % (response["error"]))
|
||||
logger.info("Response data length: %s" % (len(response["data"])))
|
||||
logger.info("Response headers:")
|
||||
if not alfa_s:
|
||||
logger.info("Terminado en %.2f segundos" % (response["time"]))
|
||||
logger.info("Response sucess: %s" % (response["sucess"]))
|
||||
logger.info("Response code: %s" % (response["code"]))
|
||||
logger.info("Response error: %s" % (response["error"]))
|
||||
logger.info("Response data length: %s" % (len(response["data"])))
|
||||
logger.info("Response headers:")
|
||||
server_cloudflare = ""
|
||||
for header in response["headers"]:
|
||||
logger.info("- %s: %s" % (header, response["headers"][header]))
|
||||
if not alfa_s:
|
||||
logger.info("- %s: %s" % (header, response["headers"][header]))
|
||||
if "cloudflare" in response["headers"][header]:
|
||||
server_cloudflare = "cloudflare"
|
||||
|
||||
@@ -266,22 +270,27 @@ def downloadpage(url, post=None, headers=None, timeout=None, follow_redirects=Tr
|
||||
if cookies:
|
||||
save_cookies()
|
||||
|
||||
logger.info("Encoding: %s" % (response["headers"].get('content-encoding')))
|
||||
if not alfa_s:
|
||||
logger.info("Encoding: %s" % (response["headers"].get('content-encoding')))
|
||||
|
||||
if response["headers"].get('content-encoding') == 'gzip':
|
||||
logger.info("Descomprimiendo...")
|
||||
if not alfa_s:
|
||||
logger.info("Descomprimiendo...")
|
||||
data_alt = response["data"]
|
||||
try:
|
||||
response["data"] = gzip.GzipFile(fileobj=StringIO(response["data"])).read()
|
||||
logger.info("Descomprimido")
|
||||
if not alfa_s:
|
||||
logger.info("Descomprimido")
|
||||
except:
|
||||
logger.info("No se ha podido descomprimir con gzip. Intentando con zlib")
|
||||
if not alfa_s:
|
||||
logger.info("No se ha podido descomprimir con gzip. Intentando con zlib")
|
||||
response["data"] = data_alt
|
||||
try:
|
||||
import zlib
|
||||
response["data"] = zlib.decompressobj(16 + zlib.MAX_WBITS).decompress(response["data"])
|
||||
except:
|
||||
logger.info("No se ha podido descomprimir con zlib")
|
||||
if not alfa_s:
|
||||
logger.info("No se ha podido descomprimir con zlib")
|
||||
response["data"] = data_alt
|
||||
|
||||
# Anti Cloudflare
|
||||
@@ -289,11 +298,14 @@ def downloadpage(url, post=None, headers=None, timeout=None, follow_redirects=Tr
|
||||
cf = Cloudflare(response)
|
||||
if cf.is_cloudflare:
|
||||
count_retries += 1
|
||||
logger.info("cloudflare detectado, esperando %s segundos..." % cf.wait_time)
|
||||
if not alfa_s:
|
||||
logger.info("cloudflare detectado, esperando %s segundos..." % cf.wait_time)
|
||||
auth_url = cf.get_url()
|
||||
logger.info("Autorizando... intento %d url: %s" % (count_retries, auth_url))
|
||||
if not alfa_s:
|
||||
logger.info("Autorizando... intento %d url: %s" % (count_retries, auth_url))
|
||||
if downloadpage(auth_url, headers=request_headers, replace_headers=True, count_retries=count_retries).sucess:
|
||||
logger.info("Autorización correcta, descargando página")
|
||||
if not alfa_s:
|
||||
logger.info("Autorización correcta, descargando página")
|
||||
resp = downloadpage(url=response["url"], post=post, headers=headers, timeout=timeout,
|
||||
follow_redirects=follow_redirects,
|
||||
cookies=cookies, replace_headers=replace_headers, add_referer=add_referer)
|
||||
@@ -305,7 +317,8 @@ def downloadpage(url, post=None, headers=None, timeout=None, follow_redirects=Tr
|
||||
response["time"] = resp.time
|
||||
response["url"] = resp.url
|
||||
else:
|
||||
logger.info("No se ha podido autorizar")
|
||||
if not alfa_s:
|
||||
logger.info("No se ha podido autorizar")
|
||||
|
||||
return type('HTTPResponse', (), response)
|
||||
|
||||
|
||||
@@ -151,7 +151,7 @@ def cuadro_completar(item):
|
||||
'default': mediatype_default,
|
||||
'enabled': True,
|
||||
'visible': True,
|
||||
'lvalues': [config.get_localized_string(60244), config.get_localized_string(60245)]
|
||||
'lvalues': [config.get_localized_string(60244), config.get_localized_string(70136)]
|
||||
}]
|
||||
|
||||
for i, c in enumerate(controls):
|
||||
|
||||
@@ -455,7 +455,7 @@ def find_and_set_infoLabels(item):
|
||||
title = item.contentTitle
|
||||
else:
|
||||
tipo_busqueda = "tv"
|
||||
tipo_contenido = config.get_localized_string(70529)
|
||||
tipo_contenido = config.get_localized_string(60245)
|
||||
title = item.contentSerieName
|
||||
|
||||
# Si el titulo incluye el (año) se lo quitamos
|
||||
@@ -478,7 +478,7 @@ def find_and_set_infoLabels(item):
|
||||
if len(results) > 1:
|
||||
from platformcode import platformtools
|
||||
tmdb_result = platformtools.show_video_info(results, item=item,
|
||||
caption="[%s]: Selecciona la %s correcta" % (title, tipo_contenido))
|
||||
caption=config.get_localized_string(60247) %(title, tipo_contenido))
|
||||
elif len(results) > 0:
|
||||
tmdb_result = results[0]
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1046,7 +1046,7 @@ msgid "Movie"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#60245"
|
||||
msgid "Series"
|
||||
msgid "tv show"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#60246"
|
||||
@@ -1249,10 +1249,6 @@ msgctxt "#60297"
|
||||
msgid "Find %s possible matches"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#60298"
|
||||
msgid "[%s]: Select the correct TV series"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#60299"
|
||||
msgid "Not found in the language '%s'"
|
||||
msgstr ""
|
||||
@@ -4267,10 +4263,6 @@ msgctxt "#70392"
|
||||
msgid "Rate with a [COLOR %s]%s[/ COLOR]"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70393"
|
||||
msgid "[%s]: Select the correct %s "
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70394"
|
||||
msgid "Action"
|
||||
msgstr ""
|
||||
@@ -4811,10 +4803,6 @@ msgctxt "#70528"
|
||||
msgid "Default folder"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70529"
|
||||
msgid "Repeated link"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "#70530"
|
||||
msgid "You already have this link in the folder"
|
||||
msgstr ""
|
||||
|
||||
@@ -1034,8 +1034,8 @@ msgid "Movie"
|
||||
msgstr "Film"
|
||||
|
||||
msgctxt "#60245"
|
||||
msgid "Series"
|
||||
msgstr "Serie"
|
||||
msgid "tv show"
|
||||
msgstr "serie"
|
||||
|
||||
msgctxt "#60246"
|
||||
msgid "Full information"
|
||||
@@ -1237,10 +1237,6 @@ msgctxt "#60297"
|
||||
msgid "Find %s possible matches"
|
||||
msgstr "Trovate %s possibili corrispondenze"
|
||||
|
||||
msgctxt "#60298"
|
||||
msgid "[%s]: Select the correct TV series"
|
||||
msgstr "[%s]: Seleziona la serie corretta"
|
||||
|
||||
msgctxt "#60299"
|
||||
msgid "Not found in the language '%s'"
|
||||
msgstr "Non trovato nella lingua '%s'"
|
||||
@@ -4247,10 +4243,6 @@ msgctxt "#70392"
|
||||
msgid "Rate with a [COLOR %s]%s[/ COLOR]"
|
||||
msgstr "Dai un punteggio con un [COLOR %s]%s[/COLOR]"
|
||||
|
||||
msgctxt "#70393"
|
||||
msgid "[%s]: Select the correct %s "
|
||||
msgstr "[%s]: Seleziona il %s corretto"
|
||||
|
||||
msgctxt "#70394"
|
||||
msgid "Action"
|
||||
msgstr "Azione"
|
||||
@@ -4799,10 +4791,6 @@ msgctxt "#70528"
|
||||
msgid "Default folder"
|
||||
msgstr "Cartella di Default"
|
||||
|
||||
msgctxt "#70529"
|
||||
msgid "Repeated link"
|
||||
msgstr "Link ripetuto"
|
||||
|
||||
msgctxt "#70530"
|
||||
msgid "You already have this link in the folder"
|
||||
msgstr "C'è già un link nella cartella"
|
||||
|
||||
@@ -1046,8 +1046,8 @@ msgid "Movie"
|
||||
msgstr "Película"
|
||||
|
||||
msgctxt "#60245"
|
||||
msgid "Series"
|
||||
msgstr "Serie"
|
||||
msgid "tv show"
|
||||
msgstr "serie"
|
||||
|
||||
msgctxt "#60246"
|
||||
msgid "Full information"
|
||||
@@ -1249,10 +1249,6 @@ msgctxt "#60297"
|
||||
msgid "Find %s possible matches"
|
||||
msgstr "Encontrados %s posibles coincidencias"
|
||||
|
||||
msgctxt "#60298"
|
||||
msgid "[%s]: Select the correct TV series"
|
||||
msgstr "[%s]: Selecciona la serie correcta"
|
||||
|
||||
msgctxt "#60299"
|
||||
msgid "Not found in the language '%s'"
|
||||
msgstr "No se ha encontrado en idioma '%s'"
|
||||
@@ -4263,10 +4259,6 @@ msgctxt "#70392"
|
||||
msgid "Rate with a [COLOR %s]%s[/ COLOR]"
|
||||
msgstr "Puntuar con un [COLOR %s]%s[/COLOR]"
|
||||
|
||||
msgctxt "#70393"
|
||||
msgid "[%s]: Select the correct %s "
|
||||
msgstr "[%s]: Selecciona la %s correcta"
|
||||
|
||||
msgctxt "#70394"
|
||||
msgid "Action"
|
||||
msgstr "Accion"
|
||||
@@ -4811,10 +4803,6 @@ msgctxt "#70528"
|
||||
msgid "Default folder"
|
||||
msgstr "Carpeta por defecto"
|
||||
|
||||
msgctxt "#70529"
|
||||
msgid "Repeated link"
|
||||
msgstr "Enlace repetido"
|
||||
|
||||
msgctxt "#70530"
|
||||
msgid "You already have this link in the folder"
|
||||
msgstr "Ya tienes este enlace en la carpeta"
|
||||
|
||||
@@ -1046,8 +1046,8 @@ msgid "Movie"
|
||||
msgstr "Película"
|
||||
|
||||
msgctxt "#60245"
|
||||
msgid "Series"
|
||||
msgstr "Serie"
|
||||
msgid "tv show"
|
||||
msgstr "serie"
|
||||
|
||||
msgctxt "#60246"
|
||||
msgid "Full information"
|
||||
@@ -1249,10 +1249,6 @@ msgctxt "#60297"
|
||||
msgid "Find %s possible matches"
|
||||
msgstr "Encontrados %s posibles coincidencias"
|
||||
|
||||
msgctxt "#60298"
|
||||
msgid "[%s]: Select the correct TV series"
|
||||
msgstr "[%s]: Selecciona la serie correcta"
|
||||
|
||||
msgctxt "#60299"
|
||||
msgid "Not found in the language '%s'"
|
||||
msgstr "No se ha encontrado en idioma '%s'"
|
||||
@@ -4263,10 +4259,6 @@ msgctxt "#70392"
|
||||
msgid "Rate with a [COLOR %s]%s[/ COLOR]"
|
||||
msgstr "Puntuar con un [COLOR %s]%s[/COLOR]"
|
||||
|
||||
msgctxt "#70393"
|
||||
msgid "[%s]: Select the correct %s "
|
||||
msgstr "[%s]: Selecciona la %s correcta"
|
||||
|
||||
msgctxt "#70394"
|
||||
msgid "Action"
|
||||
msgstr "Accion"
|
||||
@@ -4811,10 +4803,6 @@ msgctxt "#70528"
|
||||
msgid "Default folder"
|
||||
msgstr "Carpeta por defecto"
|
||||
|
||||
msgctxt "#70529"
|
||||
msgid "Repeated link"
|
||||
msgstr "Enlace repetido"
|
||||
|
||||
msgctxt "#70530"
|
||||
msgid "You already have this link in the folder"
|
||||
msgstr "Ya tienes este enlace en la carpeta"
|
||||
|
||||
@@ -1046,8 +1046,8 @@ msgid "Movie"
|
||||
msgstr "Película"
|
||||
|
||||
msgctxt "#60245"
|
||||
msgid "Series"
|
||||
msgstr "Serie"
|
||||
msgid "tv show"
|
||||
msgstr "serie"
|
||||
|
||||
msgctxt "#60246"
|
||||
msgid "Full information"
|
||||
@@ -1249,10 +1249,6 @@ msgctxt "#60297"
|
||||
msgid "Find %s possible matches"
|
||||
msgstr "Encontrados %s posibles coincidencias"
|
||||
|
||||
msgctxt "#60298"
|
||||
msgid "[%s]: Select the correct TV series"
|
||||
msgstr "[%s]: Selecciona la serie correcta"
|
||||
|
||||
msgctxt "#60299"
|
||||
msgid "Not found in the language '%s'"
|
||||
msgstr "No se ha encontrado en idioma '%s'"
|
||||
@@ -4263,10 +4259,6 @@ msgctxt "#70392"
|
||||
msgid "Rate with a [COLOR %s]%s[/ COLOR]"
|
||||
msgstr "Puntuar con un [COLOR %s]%s[/COLOR]"
|
||||
|
||||
msgctxt "#70393"
|
||||
msgid "[%s]: Select the correct %s "
|
||||
msgstr "[%s]: Selecciona la %s correcta"
|
||||
|
||||
msgctxt "#70394"
|
||||
msgid "Action"
|
||||
msgstr "Accion"
|
||||
@@ -4811,10 +4803,6 @@ msgctxt "#70528"
|
||||
msgid "Default folder"
|
||||
msgstr "Carpeta por defecto"
|
||||
|
||||
msgctxt "#70529"
|
||||
msgid "Repeated link"
|
||||
msgstr "Enlace repetido"
|
||||
|
||||
msgctxt "#70530"
|
||||
msgid "You already have this link in the folder"
|
||||
msgstr "Ya tienes este enlace en la carpeta"
|
||||
|
||||
@@ -7,10 +7,15 @@ from core import scrapertools
|
||||
from lib import jsunpack
|
||||
from platformcode import logger
|
||||
|
||||
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"}
|
||||
|
||||
|
||||
def test_video_exists(page_url):
|
||||
logger.info("(page_url='%s')" % page_url)
|
||||
data = httptools.downloadpage(page_url).data
|
||||
data = httptools.downloadpage(page_url)
|
||||
if data.code==404:
|
||||
data = httptools.downloadpage(page_url, headers=headers, add_referer=True)
|
||||
data = data.data
|
||||
|
||||
if "File was deleted" in data or "Not Found" in data or "File was locked by administrator" in data:
|
||||
return False, "[Gamovideo] El archivo no existe o ha sido borrado"
|
||||
@@ -23,7 +28,10 @@ def test_video_exists(page_url):
|
||||
|
||||
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
||||
logger.info("(page_url='%s')" % page_url)
|
||||
data = httptools.downloadpage(page_url).data
|
||||
data = httptools.downloadpage(page_url)
|
||||
if data.code==404:
|
||||
data = httptools.downloadpage(page_url, headers=headers, add_referer=True)
|
||||
data = data.data
|
||||
packer = scrapertools.find_single_match(data,
|
||||
"<script type='text/javascript'>(eval.function.p,a,c,k,e,d..*?)</script>")
|
||||
if packer != "":
|
||||
|
||||
@@ -25,7 +25,7 @@ def get_video_url(page_url, user="", password="", video_password=""):
|
||||
unpacked = jsunpack.unpack(pack)
|
||||
logger.info("Intel11 %s" %unpacked)
|
||||
if "ldaa" in unpacked:
|
||||
videos = scrapertools.find_multiple_matches(unpacked, 'lda.="([^"]+)')
|
||||
videos = scrapertools.find_multiple_matches(unpacked, '(?is)lda.="([^"]+)')
|
||||
video_urls = []
|
||||
for video in videos:
|
||||
if not video.startswith("//"):
|
||||
|
||||
Reference in New Issue
Block a user