Merge remote-tracking branch 'alfa-addon/master' into fixes

This commit is contained in:
Unknown
2018-05-11 16:39:20 -03:00
11 changed files with 944 additions and 429 deletions
+5 -4
View File
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.alfa" name="Alfa" version="2.5.12" provider-name="Alfa Addon"> <addon id="plugin.video.alfa" name="Alfa" version="2.5.13" provider-name="Alfa Addon">
<requires> <requires>
<import addon="xbmc.python" version="2.1.0"/> <import addon="xbmc.python" version="2.1.0"/>
<import addon="script.module.libtorrent" optional="true"/> <import addon="script.module.libtorrent" optional="true"/>
@@ -19,11 +19,12 @@
</assets> </assets>
<news>[B]Estos son los cambios para esta versión:[/B] <news>[B]Estos son los cambios para esta versión:[/B]
[COLOR green][B]Canales agregados y arreglos[/B][/COLOR] [COLOR green][B]Canales agregados y arreglos[/B][/COLOR]
» plusdede » yespornplease » plusdede » cinefox
» cinefox » kbagi/diskokosmiko » ultrapeliculashd
» mejortorrent » allcalidad
¤ arreglos internos ¤ arreglos internos
¤ Gracias a @fcammed y @t1254362 por colaborar en ésta versión
</news> </news>
<description lang="es">Navega con Kodi por páginas web para ver sus videos de manera fácil.</description> <description lang="es">Navega con Kodi por páginas web para ver sus videos de manera fácil.</description>
<summary lang="en">Browse web pages using Kodi</summary> <summary lang="en">Browse web pages using Kodi</summary>
+7 -1
View File
@@ -136,6 +136,12 @@ def peliculas(item):
def findvideos(item): def findvideos(item):
itemlist = [] itemlist = []
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
if not item.infoLabels["year"]:
item.infoLabels["year"] = scrapertools.find_single_match(data, 'dateCreated.*?(\d{4})')
if "orig_title" in data:
contentTitle = scrapertools.find_single_match(data, 'orig_title.*?>([^<]+)<').strip()
if contentTitle != "":
item.contentTitle = contentTitle
patron = '(?s)fmi(.*?)thead' patron = '(?s)fmi(.*?)thead'
bloque = scrapertools.find_single_match(data, patron) bloque = scrapertools.find_single_match(data, patron)
match = scrapertools.find_multiple_matches(bloque, '(?is)(?:iframe|script) .*?src="([^"]+)') match = scrapertools.find_multiple_matches(bloque, '(?is)(?:iframe|script) .*?src="([^"]+)')
@@ -173,7 +179,7 @@ def findvideos(item):
if config.get_videolibrary_support(): if config.get_videolibrary_support():
itemlist.append(Item(channel=item.channel, title="Añadir a la videoteca", text_color="green", itemlist.append(Item(channel=item.channel, title="Añadir a la videoteca", text_color="green",
action="add_pelicula_to_library", url=item.url, thumbnail = item.thumbnail, action="add_pelicula_to_library", url=item.url, thumbnail = item.thumbnail,
fulltitle = item.fulltitle contentTitle = item.contentTitle
)) ))
return itemlist return itemlist
+9 -7
View File
@@ -674,13 +674,6 @@ def findvideos(item):
type = item.type.replace("streaming", "Online").replace("download", "de Descarga") type = item.type.replace("streaming", "Online").replace("download", "de Descarga")
itemlist.extend(get_enlaces(item, url, type)) itemlist.extend(get_enlaces(item, url, type))
# Requerido para FilterTools
itemlist = filtertools.get_links(itemlist, item, list_language)
# Requerido para AutoPlay
autoplay.start(itemlist, item)
if __comprueba_enlaces__: if __comprueba_enlaces__:
for it in itemlist: for it in itemlist:
@@ -688,6 +681,15 @@ def findvideos(item):
it.url = normalizar_url(it.url, it.server) it.url = normalizar_url(it.url, it.server)
itemlist = servertools.check_list_links(itemlist, __comprueba_enlaces_num__) itemlist = servertools.check_list_links(itemlist, __comprueba_enlaces_num__)
# Requerido para FilterTools
itemlist = filtertools.get_links(itemlist, item, list_language)
# Requerido para AutoPlay
autoplay.start(itemlist, item)
return itemlist return itemlist
def normalizar_url(url, server): def normalizar_url(url, server):
+24 -66
View File
@@ -2,12 +2,17 @@
import re import re
import threading import threading
import urllib
import xbmc
from core import downloadtools
from core import filetools from core import filetools
from core import httptools from core import httptools
from core import jsontools
from core import scrapertools from core import scrapertools
from core.item import Item from core.item import Item
from platformcode import config, logger from platformcode import config, logger
from platformcode import platformtools
__perfil__ = config.get_setting('perfil', "kbagi") __perfil__ = config.get_setting('perfil', "kbagi")
@@ -26,23 +31,15 @@ adult_content = config.get_setting("adult_content", "kbagi")
def login(pagina): def login(pagina):
logger.info() logger.info()
try: try:
user = config.get_setting("%suser" % pagina.split(".")[0], "kbagi") dom = pagina.split(".")[0]
password = config.get_setting("%spassword" % pagina.split(".")[0], "kbagi") user = config.get_setting("%suser" %dom, "kbagi")
if pagina == "kbagi.com": password = config.get_setting("%spassword" %dom, "kbagi")
if user == "" and password == "": if not user:
return False, "Para ver los enlaces de kbagi es necesario registrarse en kbagi.com" return False, "Para ver los enlaces de %s es necesario registrarse en %s" %(dom, pagina)
elif user == "" or password == "":
return False, "kbagi: Usuario o contraseña en blanco. Revisa tus credenciales"
else:
if user == "" or password == "":
return False, "DiskoKosmiko: Usuario o contraseña en blanco. Revisa tus credenciales"
data = httptools.downloadpage("http://%s" % pagina).data data = httptools.downloadpage("http://%s" % pagina).data
if re.search(r'(?i)%s' % user, data): if re.search(r'(?i)%s' % user, data):
return True, "" return True, ""
token = scrapertools.find_single_match(data, 'name="__RequestVerificationToken".*?value="([^"]+)"') token = scrapertools.find_single_match(data, 'name="__RequestVerificationToken".*?value="([^"]+)"')
post = "__RequestVerificationToken=%s&UserName=%s&Password=%s" % (token, user, password) post = "__RequestVerificationToken=%s&UserName=%s&Password=%s" % (token, user, password)
headers = {'X-Requested-With': 'XMLHttpRequest'} headers = {'X-Requested-With': 'XMLHttpRequest'}
@@ -64,9 +61,7 @@ def mainlist(item):
logger.info() logger.info()
itemlist = [] itemlist = []
item.text_color = color1 item.text_color = color1
logueado, error_message = login("kbagi.com") logueado, error_message = login("kbagi.com")
if not logueado: if not logueado:
itemlist.append(item.clone(title=error_message, action="configuracion", folder=False)) itemlist.append(item.clone(title=error_message, action="configuracion", folder=False))
else: else:
@@ -79,24 +74,25 @@ def mainlist(item):
itemlist.append(item.clone(title=" Búsqueda personalizada", action="filtro", itemlist.append(item.clone(title=" Búsqueda personalizada", action="filtro",
url="http://kbagi.com/action/SearchFiles")) url="http://kbagi.com/action/SearchFiles"))
itemlist.append(item.clone(title=" Mi cuenta", action="cuenta")) itemlist.append(item.clone(title=" Mi cuenta", action="cuenta"))
logueado, error_message = login("diskokosmiko.mx")
item.extra = "http://diskokosmiko.mx/" if not logueado:
itemlist.append(item.clone(title="DiskoKosmiko", action="", text_color=color2)) itemlist.append(item.clone(title=error_message, action="configuracion", folder=False))
itemlist.append(item.clone(title=" Búsqueda", action="search", url="http://diskokosmiko.mx/action/SearchFiles")) else:
itemlist.append(item.clone(title=" Colecciones", action="colecciones", item.extra = "http://diskokosmiko.mx/"
url="http://diskokosmiko.mx/action/home/MoreNewestCollections?pageNumber=1")) itemlist.append(item.clone(title="DiskoKosmiko", action="", text_color=color2))
itemlist.append(item.clone(title=" Búsqueda personalizada", action="filtro", itemlist.append(item.clone(title=" Búsqueda", action="search", url="http://diskokosmiko.mx/action/SearchFiles"))
url="http://diskokosmiko.mx/action/SearchFiles")) itemlist.append(item.clone(title=" Colecciones", action="colecciones",
itemlist.append(item.clone(title=" Mi cuenta", action="cuenta")) url="http://diskokosmiko.mx/action/home/MoreNewestCollections?pageNumber=1"))
itemlist.append(item.clone(action="", title="")) itemlist.append(item.clone(title=" Búsqueda personalizada", action="filtro",
url="http://diskokosmiko.mx/action/SearchFiles"))
itemlist.append(item.clone(title=" Mi cuenta", action="cuenta"))
itemlist.append(item.clone(action="", title=""))
folder_thumb = filetools.join(config.get_data_path(), 'thumbs_kbagi') folder_thumb = filetools.join(config.get_data_path(), 'thumbs_kbagi')
files = filetools.listdir(folder_thumb) files = filetools.listdir(folder_thumb)
if files: if files:
itemlist.append( itemlist.append(
item.clone(title="Eliminar caché de imágenes (%s)" % len(files), action="delete_cache", text_color="red")) item.clone(title="Eliminar caché de imágenes (%s)" % len(files), action="delete_cache", text_color="red"))
itemlist.append(item.clone(title="Configuración del canal", action="configuracion", text_color="gold")) itemlist.append(item.clone(title="Configuración del canal", action="configuracion", text_color="gold"))
return itemlist return itemlist
@@ -115,7 +111,6 @@ def search(item, texto):
def configuracion(item): def configuracion(item):
from platformcode import platformtools
ret = platformtools.show_channel_settings() ret = platformtools.show_channel_settings()
platformtools.itemlist_refresh() platformtools.itemlist_refresh()
return ret return ret
@@ -124,12 +119,10 @@ def configuracion(item):
def listado(item): def listado(item):
logger.info() logger.info()
itemlist = [] itemlist = []
data_thumb = httptools.downloadpage(item.url, item.post.replace("Mode=List", "Mode=Gallery")).data data_thumb = httptools.downloadpage(item.url, item.post.replace("Mode=List", "Mode=Gallery")).data
if not item.post: if not item.post:
data_thumb = "" data_thumb = ""
item.url = item.url.replace("/gallery,", "/list,") item.url = item.url.replace("/gallery,", "/list,")
data = httptools.downloadpage(item.url, item.post).data data = httptools.downloadpage(item.url, item.post).data
data = re.sub(r"\n|\r|\t|\s{2}|&nbsp;|<br>", "", data) data = re.sub(r"\n|\r|\t|\s{2}|&nbsp;|<br>", "", data)
@@ -153,12 +146,10 @@ def listado(item):
scrapedthumbnail = filetools.join(folder, "%s.jpg" % url_thumb.split("e=", 1)[1][-20:]) scrapedthumbnail = filetools.join(folder, "%s.jpg" % url_thumb.split("e=", 1)[1][-20:])
except: except:
scrapedthumbnail = "" scrapedthumbnail = ""
if scrapedthumbnail: if scrapedthumbnail:
t = threading.Thread(target=download_thumb, args=[scrapedthumbnail, url_thumb]) t = threading.Thread(target=download_thumb, args=[scrapedthumbnail, url_thumb])
t.setDaemon(True) t.setDaemon(True)
t.start() t.start()
else: else:
scrapedthumbnail = item.extra + "/img/file_types/gallery/movie.png" scrapedthumbnail = item.extra + "/img/file_types/gallery/movie.png"
scrapedurl = item.extra + scrapedurl scrapedurl = item.extra + scrapedurl
@@ -168,7 +159,6 @@ def listado(item):
plot = scrapertools.find_single_match(block, '<div class="desc">(.*?)</div>') plot = scrapertools.find_single_match(block, '<div class="desc">(.*?)</div>')
if plot: if plot:
plot = scrapertools.decodeHtmlentities(plot) plot = scrapertools.decodeHtmlentities(plot)
new_item = Item(channel=item.channel, action="findvideos", title=title, url=scrapedurl, new_item = Item(channel=item.channel, action="findvideos", title=title, url=scrapedurl,
thumbnail=scrapedthumbnail, contentTitle=scrapedtitle, text_color=color2, thumbnail=scrapedthumbnail, contentTitle=scrapedtitle, text_color=color2,
extra=item.extra, infoLabels={'plot': plot}, post=item.post) extra=item.extra, infoLabels={'plot': plot}, post=item.post)
@@ -182,7 +172,6 @@ def listado(item):
new_item.folderurl = item.url.rsplit("/", 1)[0] new_item.folderurl = item.url.rsplit("/", 1)[0]
new_item.foldername = item.foldername new_item.foldername = item.foldername
new_item.fanart = item.thumbnail new_item.fanart = item.thumbnail
itemlist.append(new_item) itemlist.append(new_item)
next_page = scrapertools.find_single_match(data, 'class="pageSplitter.*?" data-nextpage-number="([^"]+)"') next_page = scrapertools.find_single_match(data, 'class="pageSplitter.*?" data-nextpage-number="([^"]+)"')
if next_page: if next_page:
@@ -194,27 +183,23 @@ def listado(item):
post = "" post = ""
itemlist.append(Item(channel=item.channel, action="listado", title=">> Página Siguiente (%s)" % next_page, itemlist.append(Item(channel=item.channel, action="listado", title=">> Página Siguiente (%s)" % next_page,
url=url, post=post, extra=item.extra)) url=url, post=post, extra=item.extra))
return itemlist return itemlist
def findvideos(item): def findvideos(item):
logger.info() logger.info()
itemlist = [] itemlist = []
itemlist.append(item.clone(action="play", title="Reproducir/Descargar", server="kbagi")) itemlist.append(item.clone(action="play", title="Reproducir/Descargar", server="kbagi"))
usuario = scrapertools.find_single_match(item.url, '%s/([^/]+)/' % item.extra) usuario = scrapertools.find_single_match(item.url, '%s/([^/]+)/' % item.extra)
url_usuario = item.extra + "/" + usuario url_usuario = item.extra + "/" + usuario
if item.folderurl and not item.folderurl.startswith(item.extra): if item.folderurl and not item.folderurl.startswith(item.extra):
item.folderurl = item.extra + item.folderurl item.folderurl = item.extra + item.folderurl
if item.post: if item.post:
itemlist.append(item.clone(action="listado", title="Ver colección: %s" % item.foldername, itemlist.append(item.clone(action="listado", title="Ver colección: %s" % item.foldername,
url=item.folderurl + "/gallery,1,1?ref=pager", post="")) url=item.folderurl + "/gallery,1,1?ref=pager", post=""))
data = httptools.downloadpage(item.folderurl).data data = httptools.downloadpage(item.folderurl).data
token = scrapertools.find_single_match(data, token = scrapertools.find_single_match(data,
'data-action="followChanged.*?name="__RequestVerificationToken".*?value="([^"]+)"') 'data-action="followChanged.*?name="__RequestVerificationToken".*?value="([^"]+)"')
collection_id = item.folderurl.rsplit("-", 1)[1] collection_id = item.folderurl.rsplit("-", 1)[1]
post = "__RequestVerificationToken=%s&collectionId=%s" % (token, collection_id) post = "__RequestVerificationToken=%s&collectionId=%s" % (token, collection_id)
url = "%s/action/Follow/Follow" % item.extra url = "%s/action/Follow/Follow" % item.extra
@@ -223,18 +208,14 @@ def findvideos(item):
title = "Dejar de seguir la colección: %s" % item.foldername title = "Dejar de seguir la colección: %s" % item.foldername
url = "%s/action/Follow/UnFollow" % item.extra url = "%s/action/Follow/UnFollow" % item.extra
itemlist.append(item.clone(action="seguir", title=title, url=url, post=post, text_color=color5, folder=False)) itemlist.append(item.clone(action="seguir", title=title, url=url, post=post, text_color=color5, folder=False))
itemlist.append( itemlist.append(
item.clone(action="colecciones", title="Ver colecciones del usuario: %s" % usuario, url=url_usuario)) item.clone(action="colecciones", title="Ver colecciones del usuario: %s" % usuario, url=url_usuario))
return itemlist return itemlist
def colecciones(item): def colecciones(item):
logger.info() logger.info()
from core import jsontools
itemlist = [] itemlist = []
usuario = False usuario = False
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
if "Ver colecciones del usuario" not in item.title and not item.index: if "Ver colecciones del usuario" not in item.title and not item.index:
@@ -250,10 +231,8 @@ def colecciones(item):
content = scrapertools.find_single_match(data, content = scrapertools.find_single_match(data,
'<div id="collections".*?<div class="collections_list(.*?)<div class="collections_list') '<div id="collections".*?<div class="collections_list(.*?)<div class="collections_list')
content = re.sub(r"\n|\r|\t|\s{2}|&nbsp;|<br>", "", content) content = re.sub(r"\n|\r|\t|\s{2}|&nbsp;|<br>", "", content)
patron = '<a class="name" href="([^"]+)".*?>([^<]+)<.*?src="([^"]+)".*?<p class="info">(.*?)</p>' patron = '<a class="name" href="([^"]+)".*?>([^<]+)<.*?src="([^"]+)".*?<p class="info">(.*?)</p>'
matches = scrapertools.find_multiple_matches(content, patron) matches = scrapertools.find_multiple_matches(content, patron)
index = "" index = ""
if item.index and item.index != "0": if item.index and item.index != "0":
matches = matches[item.index:item.index + 20] matches = matches[item.index:item.index + 20]
@@ -262,7 +241,6 @@ def colecciones(item):
elif len(matches) > 20: elif len(matches) > 20:
matches = matches[:20] matches = matches[:20]
index = 20 index = 20
folder = filetools.join(config.get_data_path(), 'thumbs_kbagi') folder = filetools.join(config.get_data_path(), 'thumbs_kbagi')
for url, scrapedtitle, thumb, info in matches: for url, scrapedtitle, thumb, info in matches:
url = item.extra + url + "/gallery,1,1?ref=pager" url = item.extra + url + "/gallery,1,1?ref=pager"
@@ -285,13 +263,11 @@ def colecciones(item):
itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url, itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url,
thumbnail=scrapedthumbnail, text_color=color2, extra=item.extra, thumbnail=scrapedthumbnail, text_color=color2, extra=item.extra,
foldername=scrapedtitle)) foldername=scrapedtitle))
if not usuario and data.get("NextPageUrl"): if not usuario and data.get("NextPageUrl"):
url = item.extra + data["NextPageUrl"] url = item.extra + data["NextPageUrl"]
itemlist.append(item.clone(title=">> Página Siguiente", url=url, text_color="")) itemlist.append(item.clone(title=">> Página Siguiente", url=url, text_color=""))
elif index: elif index:
itemlist.append(item.clone(title=">> Página Siguiente", url=item.url, index=index, text_color="")) itemlist.append(item.clone(title=">> Página Siguiente", url=item.url, index=index, text_color=""))
return itemlist return itemlist
@@ -302,15 +278,12 @@ def seguir(item):
if "Dejar" in item.title: if "Dejar" in item.title:
message = "La colección ya no se sigue" message = "La colección ya no se sigue"
if data.sucess and config.get_platform() != "plex": if data.sucess and config.get_platform() != "plex":
from platformcode import platformtools
platformtools.dialog_notification("Acción correcta", message) platformtools.dialog_notification("Acción correcta", message)
def cuenta(item): def cuenta(item):
logger.info() logger.info()
import urllib
itemlist = [] itemlist = []
web = "kbagi" web = "kbagi"
if "diskokosmiko" in item.extra: if "diskokosmiko" in item.extra:
web = "diskokosmiko" web = "diskokosmiko"
@@ -318,7 +291,6 @@ def cuenta(item):
if not logueado: if not logueado:
itemlist.append(item.clone(title=error_message, action="configuracion", folder=False)) itemlist.append(item.clone(title=error_message, action="configuracion", folder=False))
return itemlist return itemlist
user = config.get_setting("%suser" % web, "kbagi") user = config.get_setting("%suser" % web, "kbagi")
user = unicode(user, "utf8").lower().encode("utf8") user = unicode(user, "utf8").lower().encode("utf8")
url = item.extra + "/" + urllib.quote(user) url = item.extra + "/" + urllib.quote(user)
@@ -336,16 +308,13 @@ def cuenta(item):
text_color=color5, follow=True)) text_color=color5, follow=True))
else: else:
itemlist.append(item.clone(action="", title="No sigues ninguna colección", text_color=color4)) itemlist.append(item.clone(action="", title="No sigues ninguna colección", text_color=color4))
return itemlist return itemlist
def filtro(item): def filtro(item):
logger.info() logger.info()
list_controls = [] list_controls = []
valores = {} valores = {}
dict_values = None dict_values = None
list_controls.append({'id': 'search', 'label': 'Texto a buscar', 'enabled': True, 'color': '0xFFC52020', list_controls.append({'id': 'search', 'label': 'Texto a buscar', 'enabled': True, 'color': '0xFFC52020',
'type': 'text', 'default': '', 'visible': True}) 'type': 'text', 'default': '', 'visible': True})
@@ -353,14 +322,12 @@ def filtro(item):
'type': 'list', 'default': -1, 'visible': True}) 'type': 'list', 'default': -1, 'visible': True})
list_controls[1]['lvalues'] = ['Aplicación', 'Archivo', 'Documento', 'Imagen', 'Música', 'Vídeo', 'Todos'] list_controls[1]['lvalues'] = ['Aplicación', 'Archivo', 'Documento', 'Imagen', 'Música', 'Vídeo', 'Todos']
valores['tipo'] = ['Application', 'Archive', 'Document', 'Image', 'Music', 'Video', ''] valores['tipo'] = ['Application', 'Archive', 'Document', 'Image', 'Music', 'Video', '']
list_controls.append({'id': 'ext', 'label': 'Extensión', 'enabled': True, 'color': '0xFFF4FA58', list_controls.append({'id': 'ext', 'label': 'Extensión', 'enabled': True, 'color': '0xFFF4FA58',
'type': 'text', 'default': '', 'visible': True}) 'type': 'text', 'default': '', 'visible': True})
list_controls.append({'id': 'tmin', 'label': 'Tamaño mínimo (MB)', 'enabled': True, 'color': '0xFFCC2EFA', list_controls.append({'id': 'tmin', 'label': 'Tamaño mínimo (MB)', 'enabled': True, 'color': '0xFFCC2EFA',
'type': 'text', 'default': '0', 'visible': True}) 'type': 'text', 'default': '0', 'visible': True})
list_controls.append({'id': 'tmax', 'label': 'Tamaño máximo (MB)', 'enabled': True, 'color': '0xFF2ECCFA', list_controls.append({'id': 'tmax', 'label': 'Tamaño máximo (MB)', 'enabled': True, 'color': '0xFF2ECCFA',
'type': 'text', 'default': '0', 'visible': True}) 'type': 'text', 'default': '0', 'visible': True})
# Se utilizan los valores por defecto/guardados # Se utilizan los valores por defecto/guardados
web = "kbagi" web = "kbagi"
if "diskokosmiko" in item.extra: if "diskokosmiko" in item.extra:
@@ -369,7 +336,6 @@ def filtro(item):
if valores_guardados: if valores_guardados:
dict_values = valores_guardados dict_values = valores_guardados
item.valores = valores item.valores = valores
from platformcode import platformtools
return platformtools.show_channel_settings(list_controls=list_controls, dict_values=dict_values, return platformtools.show_channel_settings(list_controls=list_controls, dict_values=dict_values,
caption="Filtra la búsqueda", item=item, callback='filtrado') caption="Filtra la búsqueda", item=item, callback='filtrado')
@@ -381,18 +347,15 @@ def filtrado(item, values):
web = "diskokosmiko" web = "diskokosmiko"
# Guarda el filtro para que sea el que se cargue por defecto # Guarda el filtro para que sea el que se cargue por defecto
config.set_setting("filtro_defecto_" + web, values_copy, item.channel) config.set_setting("filtro_defecto_" + web, values_copy, item.channel)
tipo = item.valores["tipo"][values["tipo"]] tipo = item.valores["tipo"][values["tipo"]]
search = values["search"] search = values["search"]
ext = values["ext"] ext = values["ext"]
tmin = values["tmin"] tmin = values["tmin"]
tmax = values["tmax"] tmax = values["tmax"]
if not tmin.isdigit(): if not tmin.isdigit():
tmin = "0" tmin = "0"
if not tmax.isdigit(): if not tmax.isdigit():
tmax = "0" tmax = "0"
item.valores = "" item.valores = ""
item.post = "Mode=List&Type=%s&Phrase=%s&SizeFrom=%s&SizeTo=%s&Extension=%s&ref=pager&pageNumber=1" \ item.post = "Mode=List&Type=%s&Phrase=%s&SizeFrom=%s&SizeTo=%s&Extension=%s&ref=pager&pageNumber=1" \
% (tipo, search, tmin, tmax, ext) % (tipo, search, tmin, tmax, ext)
@@ -401,18 +364,14 @@ def filtrado(item, values):
def download_thumb(filename, url): def download_thumb(filename, url):
from core import downloadtools
lock = threading.Lock() lock = threading.Lock()
lock.acquire() lock.acquire()
folder = filetools.join(config.get_data_path(), 'thumbs_kbagi') folder = filetools.join(config.get_data_path(), 'thumbs_kbagi')
if not filetools.exists(folder): if not filetools.exists(folder):
filetools.mkdir(folder) filetools.mkdir(folder)
lock.release() lock.release()
if not filetools.exists(filename): if not filetools.exists(filename):
downloadtools.downloadfile(url, filename, silent=True) downloadtools.downloadfile(url, filename, silent=True)
return filename return filename
@@ -420,5 +379,4 @@ def delete_cache(url):
folder = filetools.join(config.get_data_path(), 'thumbs_kbagi') folder = filetools.join(config.get_data_path(), 'thumbs_kbagi')
filetools.rmdirtree(folder) filetools.rmdirtree(folder)
if config.is_xbmc(): if config.is_xbmc():
import xbmc
xbmc.executebuiltin("Container.Refresh") xbmc.executebuiltin("Container.Refresh")
@@ -28,6 +28,14 @@
"default": true, "default": true,
"enabled": true, "enabled": true,
"visible": true "visible": true
},
{
"id": "include_in_newest_documentales",
"type": "bool",
"label": "Incluir en Novedades - Documentales",
"default": true,
"enabled": true,
"visible": true
} }
] ]
} }
File diff suppressed because it is too large Load Diff
+3 -6
View File
@@ -29,8 +29,7 @@ def login():
data = httptools.downloadpage(url_origen).data data = httptools.downloadpage(url_origen).data
except: except:
data = httptools.downloadpage(url_origen, follow_redirects=False).data data = httptools.downloadpage(url_origen, follow_redirects=False).data
if '<span class="username">' in data:
if re.search(r'(?i)%s' % config.get_setting("plusdedeuser", "plusdede"), data):
return True return True
token = scrapertools.find_single_match(data, '<input name="_token" type="hidden" value="([^"]+)"') token = scrapertools.find_single_match(data, '<input name="_token" type="hidden" value="([^"]+)"')
if re.search('Escribe los números de la imagen', data): if re.search('Escribe los números de la imagen', data):
@@ -60,7 +59,6 @@ def login():
post = "_token=" + str(token) + "&email=" + str(config.get_setting("plusdedeuser", "plusdede")) + \ post = "_token=" + str(token) + "&email=" + str(config.get_setting("plusdedeuser", "plusdede")) + \
"&password=" + str(config.get_setting("plusdedepassword", "plusdede")) + postcaptcha\ "&password=" + str(config.get_setting("plusdedepassword", "plusdede")) + postcaptcha\
#+ "&app=2131296469" #+ "&app=2131296469"
url = HOST url = HOST
headers = {"User-Agent": "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) " headers = {"User-Agent": "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/66.0.3163.100 Safari/537.36", "Referer": url, "X-Requested-With": "XMLHttpRequest","X-CSRF-TOKEN": "Chrome/66.0.3163.100 Safari/537.36", "Referer": url, "X-Requested-With": "XMLHttpRequest","X-CSRF-TOKEN":
@@ -76,10 +74,9 @@ def login():
def mainlist(item): def mainlist(item):
logger.info() logger.info()
itemlist = [] itemlist = []
if not config.get_setting("plusdedeuser", "plusdede"):
if config.get_setting("plusdedeuser", "plusdede") == "":
itemlist.append( itemlist.append(
Item(channel=item.channel, title="Habilita tu cuenta en la configuración...", action="settingCanal", Item(channel=item.channel, title="Habilita tu cuenta en la configuración e ingresar de nuevo al canal", action="settingCanal",
url="")) url=""))
else: else:
result = login() result = login()
@@ -137,7 +137,7 @@ def lista(item):
if itemlist != []: if itemlist != []:
actual_page_url = item.url actual_page_url = item.url
next_page = scrapertools.find_single_match(data, '<div class=pag_b><a href=(.*?) >Siguiente<\/a>') next_page = scrapertools.find_single_match(data, '<link rel=next href=(.*?) />')
if next_page != '': if next_page != '':
itemlist.append(Item(channel=item.channel, action="lista", title='Siguiente >>>', url=next_page, itemlist.append(Item(channel=item.channel, action="lista", title='Siguiente >>>', url=next_page,
thumbnail='https://s16.postimg.cc/9okdu7hhx/siguiente.png')) thumbnail='https://s16.postimg.cc/9okdu7hhx/siguiente.png'))
@@ -222,7 +222,7 @@ def findvideos(item):
for video_url in matches: for video_url in matches:
logger.debug('video_url: %s' % video_url) logger.debug('video_url: %s' % video_url)
if 'stream' in video_url: if 'stream' in video_url and 'streamango' not in video_url:
data = httptools.downloadpage('https:'+video_url).data data = httptools.downloadpage('https:'+video_url).data
logger.debug(data) logger.debug(data)
if not 'iframe' in video_url: if not 'iframe' in video_url:
+2 -1
View File
@@ -404,7 +404,8 @@ def set_infoLabels_item(item, seekTmdb=True, idioma_busqueda='es', lock=None):
otmdb = Tmdb(external_id=item.infoLabels['tvrage_id'], external_source="tvrage_id", otmdb = Tmdb(external_id=item.infoLabels['tvrage_id'], external_source="tvrage_id",
tipo=tipo_busqueda, idioma_busqueda=idioma_busqueda) tipo=tipo_busqueda, idioma_busqueda=idioma_busqueda)
if otmdb is None: #if otmdb is None:
if not item.infoLabels['tmdb_id'] and not item.infoLabels['imdb_id'] and not item.infoLabels['tvdb_id'] and not item.infoLabels['freebase_mid'] and not item.infoLabels['freebase_id'] and not item.infoLabels['tvrage_id']:
# No se ha podido buscar por ID... # No se ha podido buscar por ID...
# hacerlo por titulo # hacerlo por titulo
if tipo_busqueda == 'tv': if tipo_busqueda == 'tv':
+3 -3
View File
@@ -24,7 +24,7 @@ def start():
funciones que deseamos que se ejecuten nada mas abrir el plugin. funciones que deseamos que se ejecuten nada mas abrir el plugin.
""" """
logger.info() logger.info()
config.set_setting('show_once', False) #config.set_setting('show_once', True)
# Test if all the required directories are created # Test if all the required directories are created
config.verify_directories_created() config.verify_directories_created()
@@ -51,10 +51,10 @@ def run(item=None):
item.start = True; item.start = True;
else: else:
item = Item(channel="channelselector", action="getmainlist", viewmode="movie") item = Item(channel="channelselector", action="getmainlist", viewmode="movie")
if config.get_setting('show_once'): if not config.get_setting('show_once'):
platformtools.dialog_ok('Alfa', 'Alfa recomienda para mejorar tu experiencia:', platformtools.dialog_ok('Alfa', 'Alfa recomienda para mejorar tu experiencia:',
'Palomitas, relajate y disfruta.') 'Palomitas, relajate y disfruta.')
config.set_setting('show_once', False) config.set_setting('show_once', True)
logger.info(item.tostring()) logger.info(item.tostring())
+4 -4
View File
@@ -21,11 +21,11 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
pfxfx = "" pfxfx = ""
data = httptools.downloadpage(page_url, cookies=False).data data = httptools.downloadpage(page_url, cookies=False).data
data = data.replace("\n","") data = data.replace("\n","")
cgi_counter = scrapertools.find_single_match(data, """(?is)src=.(https://www.flashx.bz/counter.cgi.*?[^(?:'|")]+)""") cgi_counter = scrapertools.find_single_match(data, """(?is)src=.(https://www.flashx.cc/counter.cgi.*?[^(?:'|")]+)""")
cgi_counter = cgi_counter.replace("%0A","").replace("%22","") cgi_counter = cgi_counter.replace("%0A","").replace("%22","")
playnow = scrapertools.find_single_match(data, 'https://www.flashx.bz/dl[^"]+') playnow = scrapertools.find_single_match(data, 'https://www.flashx.cc/dl[^"]+')
# Para obtener el f y el fxfx # Para obtener el f y el fxfx
js_fxfx = "https://www." + scrapertools.find_single_match(data.replace("//","/"), """(?is)(flashx.bz/js\w+/c\w+.*?[^(?:'|")]+)""") js_fxfx = "https://www." + scrapertools.find_single_match(data.replace("//","/"), """(?is)(flashx.cc/js\w+/c\w+.*?[^(?:'|")]+)""")
data_fxfx = httptools.downloadpage(js_fxfx).data data_fxfx = httptools.downloadpage(js_fxfx).data
mfxfx = scrapertools.find_single_match(data_fxfx, 'get.*?({.*?})').replace("'","").replace(" ","") mfxfx = scrapertools.find_single_match(data_fxfx, 'get.*?({.*?})').replace("'","").replace(" ","")
matches = scrapertools.find_multiple_matches(mfxfx, '(\w+):(\w+)') matches = scrapertools.find_multiple_matches(mfxfx, '(\w+):(\w+)')
@@ -35,7 +35,7 @@ def get_video_url(page_url, premium=False, user="", password="", video_password=
logger.info("mfxfxfx2= %s" %pfxfx) logger.info("mfxfxfx2= %s" %pfxfx)
if pfxfx == "": if pfxfx == "":
pfxfx = "ss=yes&f=fail&fxfx=6" pfxfx = "ss=yes&f=fail&fxfx=6"
coding_url = 'https://www.flashx.bz/flashx.php?%s' %pfxfx coding_url = 'https://www.flashx.cc/flashx.php?%s' %pfxfx
# {f: 'y', fxfx: '6'} # {f: 'y', fxfx: '6'}
bloque = scrapertools.find_single_match(data, '(?s)Form method="POST" action(.*?)span') bloque = scrapertools.find_single_match(data, '(?s)Form method="POST" action(.*?)span')
flashx_id = scrapertools.find_single_match(bloque, 'name="id" value="([^"]+)"') flashx_id = scrapertools.find_single_match(bloque, 'name="id" value="([^"]+)"')