Merge pull request #1 from alfa-addon/master

Update
This commit is contained in:
alfa-jor
2017-08-04 10:16:17 +02:00
committed by GitHub
20 changed files with 322 additions and 626 deletions
+22 -7
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="0.0.7" provider-name="unknown"> <addon id="plugin.video.alfa" name="Alfa" version="0.0.8" 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"/>
@@ -9,17 +9,32 @@
</extension> </extension>
<extension point="xbmc.addon.metadata"> <extension point="xbmc.addon.metadata">
<summary lang="es">Sumario en Español</summary> <summary lang="es">Sumario en Español</summary>
<news>[B]Estos son los cambios para esta versión:[/B][CR] <assets>
[COLOR green][B]Canales agregados y arreglos[/B][/COLOR] <icon>icon.png</icon>
[I]- Elitetorrent <fanart>fanart.jpg</fanart>
- Seriespapaya <screenshot>resources/media/general/ss/1.jpg</screenshot>
- Newpct1 -- [COLOR red]Momentáneamente búsqueda deshabilitada[/COLOR][/I][CR] <screenshot>resources/media/general/ss/2.jpg</screenshot>
<screenshot>resources/media/general/ss/3.jpg</screenshot>
<screenshot>resources/media/general/ss/4.jpg</screenshot>
</assets>
<news>[B]Estos son los cambios para esta versión:[/B]
[COLOR green][B]Arreglos de canales[/B][/COLOR]
[I]- Seriespapaya
- Playmax - Gracias a d3v3l0p1n
- Seriesblanco - Posible error en versiones anteriores a kodi 16 por https
- AnimesHD
- Cinetux[/I]
[COLOR green][B]Servidor Nuevo[/B][/COLOR]
[I]- Vidlox
[COLOR green][B]Arreglos internos[/B][/COLOR] [COLOR green][B]Arreglos internos[/B][/COLOR]
[I]- videolibrary_service -- ahora no actualiza una serie de un canal, si está desactivado[/I] [I]- platformtools - posible solución de favoritos
- videolibrarytools - solución a añadir películas de varios canales[/I]
[COLOR blue]Gracias a devalls por su cooperación en esta release.[/COLOR]
</news> </news>
<description lang="es">Descripción en Español</description> <description lang="es">Descripción en Español</description>
<summary lang="en">English summary</summary> <summary lang="en">English summary</summary>
<description lang="en">English description</description> <description lang="en">English description</description>
<disclaimer>[COLOR red]The owners and submitters to this addon do not host or distribute any of the content displayed by these addons nor do they have any affiliation with the content providers.[/COLOR]</disclaimer>
<platform>all</platform> <platform>all</platform>
<license>GNU GPL v3</license> <license>GNU GPL v3</license>
<forum>foro</forum> <forum>foro</forum>
+7 -12
View File
@@ -7,6 +7,7 @@ from core import httptools
from core import logger from core import logger
from core import scrapertools from core import scrapertools
from core.item import Item from core.item import Item
from core import servertools
tgenero = {"Comedia": "https://s7.postimg.org/ne9g9zgwb/comedia.png", tgenero = {"Comedia": "https://s7.postimg.org/ne9g9zgwb/comedia.png",
"Drama": "https://s16.postimg.org/94sia332d/drama.png", "Drama": "https://s16.postimg.org/94sia332d/drama.png",
@@ -172,19 +173,13 @@ def findvideos(item):
itemlist = [] itemlist = []
data = get_source(item.url) data = get_source(item.url)
patron = '<iframe.*?src=(.*?) frameborder=0' itemlist.extend(servertools.find_video_items(data=data))
matches = re.compile(patron, re.DOTALL).findall(data)
for video_url in matches: for videoitem in itemlist:
data = get_source(video_url) title = item.title+' (%s)'%videoitem.server
data = data.replace("'", '') videoitem.channel = item.channel
patron = 'file:(.*?),label:(.*?),type' videoitem.title = title
matches = re.compile(patron, re.DOTALL).findall(data) videoitem.action = 'play'
for scrapedurl, scrapedquality in matches:
url = scrapedurl
quality = scrapedquality
title = item.contentSerieName + ' (%s)' % quality
itemlist.append(item.clone(action='play', title=title, url=url, quality=quality))
return itemlist return itemlist
+12 -5
View File
@@ -211,7 +211,7 @@ def generos(item):
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
bloque = scrapertools.find_single_match(data, '(?s)dos_columnas">(.*?)</ul>') bloque = scrapertools.find_single_match(data, '(?s)dos_columnas">(.*?)</ul>')
# Extrae las entradas # Extrae las entradas
patron = '<li><a href="/([^"]+)">(.*?)</li>' patron = '<li><a.*?href="/([^"]+)">(.*?)</li>'
matches = scrapertools.find_multiple_matches(bloque, patron) matches = scrapertools.find_multiple_matches(bloque, patron)
for scrapedurl, scrapedtitle in matches: for scrapedurl, scrapedtitle in matches:
scrapedurl = CHANNEL_HOST + scrapedurl scrapedurl = CHANNEL_HOST + scrapedurl
@@ -312,11 +312,13 @@ def bloque_enlaces(data, filtro_idioma, dict_idiomas, type, item):
if "lazy" in bloque1: if "lazy" in bloque1:
lazy = "lazy-" lazy = "lazy-"
patron = '(?s)id="%s".*?metaframe.*?%ssrc="([^"]+)' %(scrapedoption, lazy) patron = '(?s)id="%s".*?metaframe.*?%ssrc="([^"]+)' %(scrapedoption, lazy)
#logger.info("Intel22 %s" %patron)
url = scrapertools.find_single_match(bloque1, patron) url = scrapertools.find_single_match(bloque1, patron)
if "goo.gl" in url: if "goo.gl" in url:
url = httptools.downloadpage(url, follow_redirects=False, only_headers=True).headers.get("location","") url = httptools.downloadpage(url, follow_redirects=False, only_headers=True).headers.get("location","")
server = servertools.get_server_from_url(url) if "www.cinetux.me" in url:
server = scrapertools.find_single_match(url, "player/(.*?)\.")
else:
server = servertools.get_server_from_url(url)
matches.append([url, server, "", language.strip(), t_tipo]) matches.append([url, server, "", language.strip(), t_tipo])
bloque2 = scrapertools.find_single_match(data, '(?s)box_links.*?dt_social_single') bloque2 = scrapertools.find_single_match(data, '(?s)box_links.*?dt_social_single')
bloque2 = bloque2.replace("\t","").replace("\r","") bloque2 = bloque2.replace("\t","").replace("\r","")
@@ -367,12 +369,17 @@ def play(item):
id = scrapertools.find_single_match(data, 'img src="[^#]+#(.*?)"') id = scrapertools.find_single_match(data, 'img src="[^#]+#(.*?)"')
item.url = "https://youtube.googleapis.com/embed/?status=ok&hl=es&allow_embed=1&ps=docs&partnerid=30&hd=1&autoplay=0&cc_load_policy=1&showinfo=0&docid=" + id item.url = "https://youtube.googleapis.com/embed/?status=ok&hl=es&allow_embed=1&ps=docs&partnerid=30&hd=1&autoplay=0&cc_load_policy=1&showinfo=0&docid=" + id
itemlist = servertools.find_video_items(data = item.url) itemlist = servertools.find_video_items(data = item.url)
elif "links" in item.url: elif "links" in item.url or "www.cinetux.me" in item.url:
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
scrapedurl = scrapertools.find_single_match(data, '<a href="(http[^"]+)') scrapedurl = scrapertools.find_single_match(data, '<a href="(http[^"]+)')
logger.info("Intel11 %s" %scrapedurl)
if scrapedurl == "": if scrapedurl == "":
scrapedurl = scrapertools.find_single_match(data, '(?i)<frame src="(http[^"]+)') scrapedurl = scrapertools.find_single_match(data, '(?i)<frame src="(http[^"]+)')
if "goo.gl" in scrapedurl: logger.info("Intel22 %s" %scrapedurl)
if scrapedurl == "":
scrapedurl = scrapertools.find_single_match(data, 'replace."([^"]+)"')
logger.info("Intel33 %s" %scrapedurl)
elif "goo.gl" in scrapedurl:
scrapedurl = httptools.downloadpage(scrapedurl, follow_redirects=False, only_headers=True).headers.get("location", "") scrapedurl = httptools.downloadpage(scrapedurl, follow_redirects=False, only_headers=True).headers.get("location", "")
item.url = scrapedurl item.url = scrapedurl
itemlist = servertools.find_video_items(data = item.url) itemlist = servertools.find_video_items(data = item.url)
@@ -1,78 +0,0 @@
{
"id": "pelisdanko",
"name": "PelisDanko",
"language": "es",
"active": true,
"adult": false,
"version": 1,
"changes": [
{
"date": "15/03/2017",
"description": "limpieza código"
},
{
"date": "08/07/2016",
"description": "Correcciones y adaptacion a la nueva version."
}
],
"thumbnail": "pelisdanko.png",
"banner": "pelisdanko.png",
"categories": [
"movie",
"latino",
"vos"
],
"settings": [
{
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en búsqueda global",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_peliculas",
"type": "bool",
"label": "Incluir en Novedades - Películas",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "modo_grafico",
"type": "bool",
"label": "Buscar información extra",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "filterlanguages",
"type": "list",
"label": "Mostrar enlaces en idioma...",
"default": 3,
"enabled": true,
"visible": true,
"lvalues": [
"VOSE",
"Latino",
"Español",
"No filtrar"
]
},
{
"id": "filterlinks",
"type": "list",
"label": "Mostrar enlaces de tipo...",
"default": 2,
"enabled": true,
"visible": true,
"lvalues": [
"Solo Descarga",
"Solo Online",
"No filtrar"
]
}
]
}
-308
View File
@@ -1,308 +0,0 @@
# -*- coding: utf-8 -*-
import re
from core import config
from core import logger
from core import scrapertools
from core.item import Item
__modo_grafico__ = config.get_setting('modo_grafico', 'pelisdanko')
host = "http://pelisdanko.com"
art = "http://pelisdanko.com/img/background.jpg"
def mainlist(item):
logger.info()
itemlist = []
itemlist.append(item.clone(action="novedades", title="Novedades", url=host + "/novedades",
fanart=art))
itemlist.append(item.clone(action="novedades", title="Estrenos", url=host + "/estrenos",
fanart=art))
itemlist.append(item.clone(action="novedades", title="Populares", url=host + "/populares",
fanart=art))
itemlist.append(item.clone(action="actualizadas", title="Películas actualizadas", url=host,
fanart=art))
itemlist.append(item.clone(action="indices", title="Índices", fanart=art))
itemlist.append(item.clone(title="", action=""))
itemlist.append(item.clone(action="search", title="Buscar...", fanart=art))
itemlist.append(item.clone(action="configuracion", title="Configurar canal...", fanart=art,
text_color="gold", folder=False))
return itemlist
def configuracion(item):
from platformcode import platformtools
ret = platformtools.show_channel_settings()
platformtools.itemlist_refresh()
return ret
def search(item, texto):
logger.info()
texto = texto.replace(" ", "+")
item.url = "http://pelisdanko.com/busqueda?terms=%s" % texto
try:
return novedades(item)
# Se captura la excepción, para no interrumpir al buscador global si un canal falla
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
return []
def newest(categoria):
logger.info()
itemlist = []
item = Item()
try:
if categoria == 'peliculas':
item.url = "http://pelisdanko.com/novedades"
itemlist = novedades(item)
if itemlist[-1].action == "novedades":
itemlist.pop()
# Se captura la excepción, para no interrumpir al canal novedades si un canal falla
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
return []
return itemlist
def novedades(item):
logger.info()
itemlist = []
# Descarga la pagina
data = scrapertools.downloadpage(item.url)
bloque = scrapertools.find_multiple_matches(data, '<div class="col-xs-[\d] col-sm-[\d] col-md-[\d] col-lg-[\d]'
' text-center"(.*?)</div>')
for match in bloque:
calidades = scrapertools.find_multiple_matches(match, '<span class="badge badge-critic badge-qualities[^>]+>'
'([^<]+)</span>')
calidad = "[COLOR darkseagreen] "
for quality in calidades:
calidad += "[" + quality + "]"
patron = 'title="([^"]+)".*?href="([^"]+)".*?class="img-responsive img-thumbnail" src="([^"]+)"'
matches = scrapertools.find_multiple_matches(match, patron)
for scrapedtitle, scrapedurl, scrapedthumbnail in matches:
contentTitle = scrapedtitle[:]
scrapedtitle = "[COLOR darkorange][B]" + scrapedtitle + "[/B][/COLOR]" + calidad + "[/COLOR]"
logger.debug("title=[" + scrapedtitle + "], url=[" + scrapedurl + "], thumbnail=[" + scrapedthumbnail + "]")
itemlist.append(item.clone(action="enlaces", title=bbcode_kodi2html(scrapedtitle),
url=scrapedurl, thumbnail=scrapedthumbnail, fanart=scrapedthumbnail,
fulltitle=contentTitle, filtro=False, contentTitle=contentTitle,
context=["buscar_trailer"], contentType="movie", trailer=True))
# Busca enlaces de paginas siguientes...
next_page_url = scrapertools.find_single_match(data, '<a href="([^"]+)" rel="next">')
if len(next_page_url) > 0:
itemlist.append(item.clone(action="novedades", title=">> Página siguiente", url=next_page_url))
return itemlist
def actualizadas(item):
logger.info()
itemlist = []
# Descarga la pagina
data = scrapertools.downloadpage(item.url)
bloque_big = scrapertools.find_single_match(data, 'Últimas actualizaciones(.*?)<div class="col-xs-10 col-md-8 '
'text-left">')
bloque = scrapertools.find_multiple_matches(bloque_big, '<div class="col-xs-[\d] col-sm-[\d] col-md-[\d]'
' col-lg-[\d] text-center"(.*?)<br><br>')
for match in bloque:
calidades = scrapertools.find_multiple_matches(match, '<span class="badge badge-critic badge-qualities[^>]+>'
'([^<]+)</span>')
calidad = "[COLOR darkseagreen] "
for quality in calidades:
calidad += "[" + quality + "]"
languages = scrapertools.find_multiple_matches(match, '<img width="28".*?alt="([^"]+)"')
idiomas = " ("
for idioma in languages:
idioma = idioma.replace('ES_', '').replace('ES', 'CAST')
if idioma != "CAST" and idioma != "LAT":
idioma = "VOSE"
idiomas += idioma + "/"
patron = 'title="([^"]+)".*?href="([^"]+)".*?class="img-responsive img-thumbnail" src="([^"]+)"'
matches = scrapertools.find_multiple_matches(match, patron)
for scrapedtitle, scrapedurl, scrapedthumbnail in matches:
contentTitle = scrapedtitle[:]
scrapedtitle = "[COLOR darkorange][B]" + scrapedtitle + "[/B][/COLOR]" + calidad + idiomas[
:-1] + ")[/COLOR]"
logger.debug("title=[" + scrapedtitle + "], url=[" + scrapedurl + "], thumbnail=[" + scrapedthumbnail + "]")
itemlist.append(item.clone(action="enlaces", title=bbcode_kodi2html(scrapedtitle),
url=scrapedurl, thumbnail=scrapedthumbnail, fanart=scrapedthumbnail,
fulltitle=contentTitle, filtro=False, contentTitle=contentTitle,
context=["buscar_trailer"], contentType="movie"))
return itemlist
def indices(item):
logger.info()
itemlist = []
item.text_color = "orchid"
itemlist.append(item.clone(action="indice_list", title="Género", url=host, fulltitle="genero"))
itemlist.append(item.clone(action="indice_list", title="Alfabético", url=host, fulltitle="letra"))
itemlist.append(item.clone(action="indice_list", title="Idioma", url=host, fulltitle="idioma"))
itemlist.append(item.clone(action="indice_list", title="Calidad", url=host, fulltitle="calidad"))
itemlist.append(item.clone(action="indice_list", title="Nacionalidad", url=host, fulltitle="nacionalidad"))
return itemlist
def indice_list(item):
logger.info()
itemlist = []
# Descarga la pagina
data = scrapertools.downloadpage(item.url)
patron = '<a href="(http://pelisdanko.com/%s/[^"]+)">([^<]+)</a>' % item.fulltitle
matches = scrapertools.find_multiple_matches(data, patron)
for scrapedurl, scrapedtitle in matches:
scrapedtitle = scrapedtitle.capitalize()
itemlist.append(item.clone(action="novedades", title=scrapedtitle, url=scrapedurl))
return itemlist
def enlaces(item):
logger.info()
item.extra = ""
item.text_color = ""
itemlist = []
# Descarga la pagina
data = scrapertools.downloadpage(item.url)
data = re.sub(r"\n|\r|\t|\s{2}", '', data)
item.fanart = scrapertools.find_single_match(data, "CUSTOM BACKGROUND.*?url\('([^']+)'")
item.infoLabels["plot"] = scrapertools.find_single_match(data, 'dt>Sinopsis</dt> <dd class=[^>]+>(.*?)</dd>')
year = scrapertools.find_single_match(data, '<dt>Estreno</dt> <dd>(\d+)</dd>')
try:
from core import tmdb
item.infoLabels['year'] = int(year)
# Obtenemos los datos basicos de todas las peliculas mediante multihilos
tmdb.set_infoLabels_item(item, __modo_grafico__)
except:
pass
filtro_idioma = config.get_setting("filterlanguages", item.channel)
filtro_enlaces = config.get_setting("filterlinks", item.channel)
dict_idiomas = {'CAST': 2, 'LAT': 1, 'VOSE': 0}
if filtro_enlaces != 0:
itemlist.append(item.clone(action="", title="Enlaces Online", text_color="dodgerblue", text_bold=True))
itemlist = bloque_enlaces(data, filtro_idioma, dict_idiomas, itemlist, "ss", item)
if filtro_enlaces != 1:
itemlist.append(item.clone(action="", title="Enlaces Descarga", text_color="dodgerblue", text_bold=True))
itemlist = bloque_enlaces(data, filtro_idioma, dict_idiomas, itemlist, "dd", item)
trailer_id = scrapertools.find_single_match(data, 'data:\s*\{\s*id:\s*"([^"]+)"')
data_trailer = scrapertools.downloadpage("http://pelisdanko.com/trailer", post="id=%s" % trailer_id)
url_trailer = scrapertools.find_single_match(data_trailer, 'src="([^"]+)"')
if url_trailer != "":
url_trailer = url_trailer.replace("embed/", "watch?v=")
item.infoLabels['trailer'] = url_trailer
itemlist.append(item.clone(channel="trailertools", action="buscartrailer", title="Buscar Tráiler",
text_color="magenta"))
return itemlist
def bloque_enlaces(data, filtro_idioma, dict_idiomas, itemlist, type, item):
logger.info()
bloque = scrapertools.find_single_match(data, '<div role="tabpanel" class="tab-pane fade" id="tab-' +
type + '">(.*?)</table>')
patron = '<tr class="rip hover".*?data-slug="([^"]+)".*?src="http://pelisdanko.com/img/flags/(.*?).png"' \
'.*?<span class="label label-default quality[^>]+>([^<]+)</span>.*?<td class="small">([^<]+)</td>'
matches = scrapertools.find_multiple_matches(bloque, patron)
filtrados = []
for slug, flag, quality, date in matches:
if flag != "ES" and flag != "ES_LAT":
flag = "VOSE"
flag = flag.replace('ES_LAT', 'LAT').replace('ES', 'CAST')
scrapedurl = "%s/%s/%s?#%s" % (item.url, slug, type, type)
scrapedtitle = " [COLOR firebrick]Mostrar enlaces: [/COLOR][COLOR goldenrod][" \
+ flag + "/" + quality + "][/COLOR][COLOR khaki] " + date + "[/COLOR]"
if filtro_idioma == 3 or item.filtro:
itemlist.append(item.clone(title=bbcode_kodi2html(scrapedtitle), action="findvideos",
url=scrapedurl, id_enlaces=slug, calidad=quality))
else:
idioma = dict_idiomas[flag]
if idioma == filtro_idioma:
itemlist.append(item.clone(title=bbcode_kodi2html(scrapedtitle),
action="findvideos", url=scrapedurl, id_enlaces=slug))
else:
if flag not in filtrados:
filtrados.append(flag)
if filtro_idioma != 3:
if len(filtrados) > 0:
title = bbcode_kodi2html("[COLOR orangered] Mostrar enlaces filtrados en %s[/COLOR]") % ", ".join(
filtrados)
itemlist.append(item.clone(title=title, action="enlaces", url=item.url, filtro=True))
return itemlist
def findvideos(item):
logger.info()
itemlist = []
if item.url[-2:] == "ss":
prefix = "strms"
else:
prefix = "lnks"
# Descarga la pagina
data = scrapertools.downloadpage(item.url)
# Parametros para redireccion donde muestra los enlaces
data_slug = scrapertools.find_single_match(data, '<div id="ad" data-id="[^"]+" data-slug="([^"]+)"')
data_id = scrapertools.find_single_match(data, '<tr class="rip hover" data-id="([^"]+)"')
url = "http://pelisdanko.com/%s/%s/%s/%s" % (prefix, data_id, item.id_enlaces, data_slug)
data = scrapertools.downloadpage(url, post="")
from core import servertools
video_item_list = servertools.find_video_items(data=data)
for video_item in video_item_list:
title = "[COLOR green]%s[/COLOR] | [COLOR darkorange][%s][/COLOR]" % (video_item.server, item.calidad)
itemlist.append(item.clone(title=bbcode_kodi2html(title), url=video_item.url, action="play",
server=video_item.server, text_color=""))
# Opción "Añadir esta película a la videoteca de XBMC"
if config.get_videolibrary_support() and len(itemlist) > 0 and item.category != "Cine":
itemlist.append(Item(channel=item.channel, title="Añadir película a la videoteca", url=item.url,
infoLabels={'title': item.fulltitle}, action="add_pelicula_to_library",
fulltitle=item.fulltitle, text_color="green", id_enlaces=item.id_enlaces))
return itemlist
def bbcode_kodi2html(text):
if config.get_platform().startswith("plex") or config.get_platform().startswith("mediaserver"):
import re
text = re.sub(r'\[COLOR\s([^\]]+)\]',
r'<span style="color: \1">',
text)
text = text.replace('[/COLOR]', '</span>') \
.replace('[CR]', '<br>') \
.replace('[B]', '<strong>') \
.replace('[/B]', '</strong>') \
.replace('"color: white"', '"color: auto"')
return text
+1 -1
View File
@@ -23,7 +23,7 @@
"description": "Canal renovado desde cero." "description": "Canal renovado desde cero."
} }
], ],
"thumbnail": "http://i.imgur.com/X5Z40kT.png", "thumbnail": "playmax.png",
"banner": "playmax.png", "banner": "playmax.png",
"categories": [ "categories": [
"movie", "movie",
+91 -28
View File
@@ -139,7 +139,7 @@ def busqueda(item):
itemlist = [] itemlist = []
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
data = json.Xml2Json(data).result data = xml2dict(data)
for f in data["Data"]["Fichas"]["Ficha"]: for f in data["Data"]["Fichas"]["Ficha"]:
title = "%s (%s)" % (f["Title"], f["Year"]) title = "%s (%s)" % (f["Title"], f["Year"])
@@ -296,12 +296,14 @@ def fichas(item):
itemlist = [] itemlist = []
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
# data = re.sub(r"\n|\r|\t|\s{2}|-\s", "", data)
fichas_marca = {'1': 'Siguiendo', '2': 'Pendiente', '3': 'Favorita', '4': 'Vista', '5': 'Abandonada'} fichas_marca = {'1': 'Siguiendo', '2': 'Pendiente', '3': 'Favorita', '4': 'Vista', '5': 'Abandonada'}
patron = '<div class="c_fichas_image">.*?href="\.([^"]+)".*?src="\.([^"]+)".*?' \ patron = '<div class="c_fichas_image".*?href="\.([^"]+)".*?src-data="\.([^"]+)".*?' \
'<div class="c_fichas_data".*?marked="([^"]*)".*?serie="([^"]*)".*?' \ '<div class="c_fichas_data".*?marked="([^"]*)".*?serie="([^"]*)".*?' \
'<div class="c_fichas_title">(?:<div class="c_fichas_episode">([^<]+)</div>|)([^<]+)</div>' '<div class="c_fichas_title">(?:<div class="c_fichas_episode">([^<]+)</div>|)([^<]+)</div>'
matches = scrapertools.find_multiple_matches(data, patron) matches = scrapertools.find_multiple_matches(data, patron)
for scrapedurl, scrapedthumbnail, marca, serie, episodio, scrapedtitle in matches: for scrapedurl, scrapedthumbnail, marca, serie, episodio, scrapedtitle in matches:
tipo = "movie" tipo = "movie"
scrapedurl = host + scrapedurl.rsplit("-dc=")[0] scrapedurl = host + scrapedurl.rsplit("-dc=")[0]
@@ -472,7 +474,7 @@ def findvideos(item):
url = "https://playmax.mx/c_enlaces_n.php?apikey=%s&sid=%s&ficha=%s&cid=%s" % (apikey, sid, ficha, cid) url = "https://playmax.mx/c_enlaces_n.php?apikey=%s&sid=%s&ficha=%s&cid=%s" % (apikey, sid, ficha, cid)
data = httptools.downloadpage(url).data data = httptools.downloadpage(url).data
data = json.Xml2Json(data).result data = xml2dict(data)
for k, v in data["Data"].items(): for k, v in data["Data"].items():
try: try:
@@ -490,31 +492,34 @@ def findvideos(item):
elif type(v["Item"]) is dict: elif type(v["Item"]) is dict:
v["Item"] = [v["Item"]] v["Item"] = [v["Item"]]
for it in v["Item"]: for it in v["Item"]:
thumbnail = "%s/styles/prosilver/imageset/%s.png" % (host, it['Host']) try:
title = " %s - %s/%s" % (it['Host'].capitalize(), it['Quality'], it['Lang']) thumbnail = "%s/styles/prosilver/imageset/%s.png" % (host, it['Host'])
calidad = int(scrapertools.find_single_match(it['Quality'], '(\d+)p')) title = " %s - %s/%s" % (it['Host'].capitalize(), it['Quality'], it['Lang'])
calidadaudio = it['QualityA'].replace("...", "") calidad = int(scrapertools.find_single_match(it['Quality'], '(\d+)p'))
subtitulos = it['Subtitles'].replace("Sin subtítulos", "") calidadaudio = it['QualityA'].replace("...", "")
if subtitulos: subtitulos = it['Subtitles'].replace("Sin subtítulos", "")
title += " (%s)" % subtitulos if subtitulos:
if calidadaudio: title += " (%s)" % subtitulos
title += " [Audio:%s]" % calidadaudio if calidadaudio:
title += " [Audio:%s]" % calidadaudio
likes = 0 likes = 0
if it["Likes"] != "0" or it["Dislikes"] != "0": if it["Likes"] != "0" or it["Dislikes"] != "0":
likes = int(it["Likes"]) - int(it["Dislikes"]) likes = int(it["Likes"]) - int(it["Dislikes"])
title += " (%s ok, %s ko)" % (it["Likes"], it["Dislikes"]) title += " (%s ok, %s ko)" % (it["Likes"], it["Dislikes"])
if type(it["Url"]) is dict: if type(it["Url"]) is dict:
for i, enlace in enumerate(it["Url"]["Item"]): for i, enlace in enumerate(it["Url"]["Item"]):
titulo = title + " (Parte %s)" % (i + 1) titulo = title + " (Parte %s)" % (i + 1)
itemlist.append(item.clone(title=titulo, url=enlace, action="play", calidad=calidad, itemlist.append(item.clone(title=titulo, url=enlace, action="play", calidad=calidad,
thumbnail=thumbnail, order=order, like=likes, ficha=ficha,
cid=cid, folder=False))
else:
url = it["Url"]
itemlist.append(item.clone(title=title, url=url, action="play", calidad=calidad,
thumbnail=thumbnail, order=order, like=likes, ficha=ficha, thumbnail=thumbnail, order=order, like=likes, ficha=ficha,
cid=cid, folder=False)) cid=cid, folder=False))
else: except:
url = it["Url"] pass
itemlist.append(item.clone(title=title, url=url, action="play", calidad=calidad,
thumbnail=thumbnail, order=order, like=likes, ficha=ficha,
cid=cid, folder=False))
except: except:
pass pass
@@ -632,7 +637,7 @@ def acciones_fichas(item, sid, ficha, season=False):
estados = [{'following': 'seguir'}, {'favorite': 'favorita'}, {'view': 'vista'}, {'slope': 'pendiente'}] estados = [{'following': 'seguir'}, {'favorite': 'favorita'}, {'view': 'vista'}, {'slope': 'pendiente'}]
url = "https://playmax.mx/ficha.php?apikey=%s&sid=%s&f=%s" % (apikey, sid, ficha) url = "https://playmax.mx/ficha.php?apikey=%s&sid=%s&f=%s" % (apikey, sid, ficha)
data = httptools.downloadpage(url).data data = httptools.downloadpage(url).data
data = json.Xml2Json(data).result data = xml2dict(data)
try: try:
marked = data["Data"]["User"]["Marked"] marked = data["Data"]["User"]["Marked"]
@@ -716,7 +721,7 @@ def acciones_cuenta(item):
return itemlist return itemlist
elif "Añadir a una lista" in item.title: elif "Añadir a una lista" in item.title:
data = httptools.downloadpage(host + "/c_listas.php?apikey=%s&sid=%s" % (apikey, sid)).data data = httptools.downloadpage(host + "/c_listas.php?apikey=%s&sid=%s" % (apikey, sid)).data
data = json.Xml2Json(data).result data = xml2dict(data)
itemlist.append(item.clone(title="Crear nueva lista", folder=False)) itemlist.append(item.clone(title="Crear nueva lista", folder=False))
if data["Data"]["TusListas"] != "\t": if data["Data"]["TusListas"] != "\t":
import random import random
@@ -845,7 +850,7 @@ def listas(item):
itemlist = [] itemlist = []
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
data = json.Xml2Json(data).result data = xml2dict(data)
if item.extra == "listas": if item.extra == "listas":
itemlist.append(Item(channel=item.channel, title="Listas más seguidas", action="listas", text_color=color1, itemlist.append(Item(channel=item.channel, title="Listas más seguidas", action="listas", text_color=color1,
url=item.url + "&orden=1", extra="listas_plus")) url=item.url + "&orden=1", extra="listas_plus"))
@@ -921,3 +926,61 @@ def select_page(item):
item.url = re.sub(r'start=(\d+)', "start=%s" % number, item.url) item.url = re.sub(r'start=(\d+)', "start=%s" % number, item.url)
return fichas(item) return fichas(item)
def xml2dict(xmldata):
"""
Lee un fichero o texto XML y retorna un diccionario json
Parametros:
file (str) -- Ruta completa al archivo XML que se desea convertir en JSON.
xmldata (str) -- Texto XML que se desea convertir en JSON.
Retorna:
Un diccionario construido a partir de los campos del XML.
"""
from core import filetools
import sys
parse = globals().get(sys._getframe().f_code.co_name)
# if xmldata is None and file is None:
# raise Exception("No hay nada que convertir!")
# elif xmldata is None:
# if not filetools.exists(file):
# raise Exception("El archivo no existe!")
# xmldata = open(file, "rb").read()
matches = re.compile("<(?P<tag>[^>]+)>[\n]*[\s]*[\t]*(?P<value>.*?)[\n]*[\s]*[\t]*<\/(?P=tag)\s*>",
re.DOTALL).findall(xmldata)
return_dict = {}
for tag, value in matches:
# Si tiene elementos
if "<" and "</" in value:
if tag in return_dict:
if type(return_dict[tag]) == list:
return_dict[tag].append(parse(value))
else:
return_dict[tag] = [return_dict[tag]]
return_dict[tag].append(parse(value))
else:
return_dict[tag] = parse(value)
else:
if tag in return_dict:
if type(return_dict[tag]) == list:
return_dict[tag].append(value)
else:
return_dict[tag] = [return_dict[tag]]
return_dict[tag].append(value)
else:
if value in ["true", "false"]:
if value == "true":
value = True
else:
value = False
return_dict[tag] = value
return return_dict
+2
View File
@@ -4,6 +4,8 @@
"active": true, "active": true,
"adult": false, "adult": false,
"language": "es", "language": "es",
"thumbnail": "plusdede.png",
"banner": "plusdede.png",
"version": 1, "version": 1,
"changes": [ "changes": [
{ {
+1 -1
View File
@@ -46,7 +46,7 @@ def mainlist(item):
url=urlparse.urljoin(HOST, "fichas_creadas/"), thumbnail=thumb_series)) url=urlparse.urljoin(HOST, "fichas_creadas/"), thumbnail=thumb_series))
itemlist.append(Item(channel=item.channel, title="Series por género", action="generos", itemlist.append(Item(channel=item.channel, title="Series por género", action="generos",
url=HOST, thumbnail=thumb_series)) url=HOST, thumbnail=thumb_series))
itemlist.append(Item(channel=item.channel, title="Buscar...", action="search", url=HOST + "finder.php", itemlist.append(Item(channel=item.channel, title="Buscar...", action="search", url="https://seriesblanco.com/finder.php",
thumbnail=thumb_buscar)) thumbnail=thumb_buscar))
itemlist = filtertools.show_option(itemlist, item.channel, list_idiomas, CALIDADES) itemlist = filtertools.show_option(itemlist, item.channel, list_idiomas, CALIDADES)
+1 -1
View File
@@ -197,7 +197,7 @@ def findvideos(item):
quality=quality, quality=quality,
) for lang, date, server, url, linkType, quality, uploader in links] ) for lang, date, server, url, linkType, quality, uploader in links]
itemlist = filtertools.get_links(itemlist, item.channel, list_idiomas, CALIDADES) itemlist = filtertools.get_links(itemlist, item, list_idiomas, CALIDADES)
return itemlist return itemlist
+1 -1
View File
@@ -330,7 +330,7 @@ def resolve_video_urls_for_playing(server, url, video_password="", muestra_dialo
video_urls.extend(response) video_urls.extend(response)
except: except:
save_server_stats({server: "error"}, "resolve") save_server_stats({server: "error"}, "resolve")
logger.error("Error al obrener la url en modo free") logger.error("Error al obtener la url en modo free")
error_messages.append("Se ha producido un error en %s" % server_name) error_messages.append("Se ha producido un error en %s" % server_name)
import traceback import traceback
logger.error(traceback.format_exc()) logger.error(traceback.format_exc())
+1 -1
View File
@@ -132,7 +132,7 @@ def save_movie(item):
for c in subcarpetas: for c in subcarpetas:
code = scrapertools.find_single_match(c, '\[(.*?)\]') code = scrapertools.find_single_match(c, '\[(.*?)\]')
if code and code in item.infoLabels['code']: if code and code in item.infoLabels['code']:
path = c path = filetools.join(MOVIES_PATH, c)
_id = code _id = code
break break
+3 -3
View File
@@ -375,7 +375,7 @@ def set_context_commands(item, parent_item):
((item.channel not in ["favorites", "videolibrary", "help", ""] ((item.channel not in ["favorites", "videolibrary", "help", ""]
or item.action in ["update_videolibrary"]) and parent_item.channel != "favorites"): or item.action in ["update_videolibrary"]) and parent_item.channel != "favorites"):
context_commands.append((config.get_localized_string(30155), "XBMC.RunPlugin(%s?%s)" % context_commands.append((config.get_localized_string(30155), "XBMC.RunPlugin(%s?%s)" %
(sys.argv[0], item.clone(channel="favoritos", action="addFavourite", (sys.argv[0], item.clone(channel="favorites", action="addFavourite",
from_channel=item.channel, from_channel=item.channel,
from_action=item.action).tourl()))) from_action=item.action).tourl())))
@@ -660,7 +660,7 @@ def get_dialogo_opciones(item, default_action, strm):
dialog_ok("No puedes ver ese vídeo porque...", "El servidor donde está alojado no está", dialog_ok("No puedes ver ese vídeo porque...", "El servidor donde está alojado no está",
"soportado en alfa todavía", item.url) "soportado en alfa todavía", item.url)
if item.channel == "favoritos": if item.channel == "favorites":
# "Quitar de favoritos" # "Quitar de favoritos"
opciones.append(config.get_localized_string(30154)) opciones.append(config.get_localized_string(30154))
@@ -699,7 +699,7 @@ def set_opcion(item, seleccion, opciones, video_urls):
# "Añadir a favoritos": # "Añadir a favoritos":
elif opciones[seleccion] == config.get_localized_string(30155): elif opciones[seleccion] == config.get_localized_string(30155):
from channels import favorites from channels import favorites
item.from_channel = "favoritos" item.from_channel = "favorites"
favorites.addFavourite(item) favorites.addFavourite(item)
salir = True salir = True
Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 KiB