Merge pull request #176 from alfa-jor/master

Arreglos
This commit is contained in:
Alfa
2017-11-19 17:09:17 +01:00
committed by GitHub
12 changed files with 325 additions and 1417 deletions
@@ -1,33 +1,33 @@
{ {
"id": "pasateatorrent", "id": "grantorrent",
"name": "PasateaTorrent", "name": "GranTorrent",
"active": true, "active": true,
"adult": false, "adult": false,
"language": ["cast"], "language": ["cast"],
"thumbnail": "http://imgur.com/iLeISt0.png", "thumbnail": "grantorrent.jpg",
"banner": "pasateatorrent.png", "banner": "grantorrent.png",
"fanart": "http://imgur.com/uexmGEg.png", "fanart": "grantorrent.png",
"categories": [ "categories": [
"torrent", "torrent",
"movie", "movie",
"tvshow" "tvshow"
], ],
"settings": [ "settings": [
{ {
"id": "include_in_global_search", "id": "include_in_global_search",
"type": "bool", "type": "bool",
"label": "Incluir en busqueda global", "label": "Incluir en busqueda global",
"default": true, "default": true,
"enabled": true, "enabled": true,
"visible": true "visible": true
}, },
{ {
"id": "modo_grafico", "id": "modo_grafico",
"type": "bool", "type": "bool",
"label": "Buscar información extra (TMDB)", "label": "Buscar información extra (TMDB)",
"default": true, "default": true,
"enabled": true, "enabled": true,
"visible": true "visible": true
} }
] ]
} }
@@ -1,273 +1,273 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import re import re
from channelselector import get_thumb from channelselector import get_thumb
from core import httptools from core import httptools
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
host = "https://pasateatorrent.com/" host = "https://grantorrent.com/"
dict_url_seasons = dict() dict_url_seasons = dict()
__modo_grafico__ = config.get_setting('modo_grafico', 'pasateatorrent') __modo_grafico__ = config.get_setting('modo_grafico', 'grantorrent')
def mainlist(item): def mainlist(item):
logger.info() logger.info()
thumb_movie = get_thumb("channels_movie.png") thumb_movie = get_thumb("channels_movie.png")
thumb_tvshow = get_thumb("channels_tvshow.png") thumb_tvshow = get_thumb("channels_tvshow.png")
itemlist = list() itemlist = list()
itemlist.append( itemlist.append(
Item(channel=item.channel, title="Peliculas", action="peliculas", thumbnail=thumb_movie)) Item(channel=item.channel, title="Peliculas", action="peliculas", thumbnail=thumb_movie))
itemlist.append( itemlist.append(
Item(channel=item.channel, title="Series", action="series", thumbnail=thumb_tvshow)) Item(channel=item.channel, title="Series", action="series", thumbnail=thumb_tvshow))
return itemlist return itemlist
def peliculas(item): def peliculas(item):
logger.info() logger.info()
thumb_search = get_thumb("search.png") thumb_search = get_thumb("search.png")
itemlist = list() itemlist = list()
itemlist.append(item.clone(channel=item.channel, title="Novedades", action="listado", url=host)) itemlist.append(item.clone(channel=item.channel, title="Novedades", action="listado", url=host))
# itemlist.append(item.clone(channel=item.channel, title="Filtrar películas", action="listado", url=host)) # itemlist.append(item.clone(channel=item.channel, title="Filtrar películas", action="listado", url=host))
itemlist.append(item.clone(channel=item.channel, title="Buscar", action="search", url=host, media="película", itemlist.append(item.clone(channel=item.channel, title="Buscar", action="search", url=host, media="película",
thumbnail=thumb_search)) thumbnail=thumb_search))
return itemlist return itemlist
def series(item): def series(item):
logger.info() logger.info()
thumb_search = get_thumb("search.png") thumb_search = get_thumb("search.png")
itemlist = list() itemlist = list()
itemlist.append(item.clone(channel=item.channel, title="Novedades", action="listado", url=host + "series/")) itemlist.append(item.clone(channel=item.channel, title="Novedades", action="listado", url=host + "series/"))
# itemlist.append(item.clone(channel=item.channel, title="Filtrar series", action="listado", url=host)) # itemlist.append(item.clone(channel=item.channel, title="Filtrar series", action="listado", url=host))
itemlist.append(item.clone(channel=item.channel, title="Buscar", action="search", url=host + "series/", itemlist.append(item.clone(channel=item.channel, title="Buscar", action="search", url=host + "series/",
media="serie", thumbnail=thumb_search)) media="serie", thumbnail=thumb_search))
return itemlist return itemlist
def search(item, texto): def search(item, texto):
logger.info("texto:" + texto) logger.info("texto:" + texto)
texto = texto.replace(" ", "+") texto = texto.replace(" ", "+")
itemlist = [] itemlist = []
try: try:
url = "%s?s=%s&post_type=Buscar+%s" % (item.url, texto, item.media) url = "%s?s=%s" % (item.url, texto)
data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url).data) data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url).data)
# logger.debug("data %s \n\n" % data) # logger.debug("data %s \n\n" % data)
video_section = scrapertools.find_single_match(data, '<div class="contenedor_imagenes">(.*?)</div><center>') video_section = scrapertools.find_single_match(data, '<div class="contenedor-imagen">(.*?</div>)</div></div>')
pattern = '<a href="(?P<url>[^"]+)">.*?<img.*?src="(?P<thumb>[^"]+)".*?class="bloque_inferior">' \ pattern = '<a href="(?P<url>[^"]+)"><img.*?src="(?P<thumb>[^"]+)".*?class="bloque-inferior">' \
'(?P<title>.*?)</div>' '\s*(?P<title>.*?)\s*</div>'
matches = re.compile(pattern, re.DOTALL).findall(video_section) matches = re.compile(pattern, re.DOTALL).findall(video_section)
for url, thumb, title in matches: for url, thumb, title in matches:
if item.media == "serie": if item.media == "serie":
action = "episodios" action = "episodios"
else: else:
action = "findvideos" action = "findvideos"
itemlist.append(Item(channel=item.channel, action=action, title=title, url=url, thumbnail=thumb, itemlist.append(Item(channel=item.channel, action=action, title=title, url=url, thumbnail=thumb,
contentTitle=title, contentType="movie")) contentTitle=title, contentType="movie"))
return itemlist return itemlist
# Se captura la excepción, para no interrumpir al buscador global si un canal falla # Se captura la excepción, para no interrumpir al buscador global si un canal falla
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("%s" % line) logger.error("%s" % line)
return [] return []
def listado(item): def listado(item):
logger.info() logger.info()
itemlist = [] itemlist = []
data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url).data) data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url).data)
# logger.debug("data %s \n\n" % data) # logger.debug("data %s \n\n" % data)
video_section = scrapertools.find_single_match(data, '<div class="contenedor_imagenes">(.*?)</div><center>') video_section = scrapertools.find_single_match(data, '<br><div class="contenedor-home">(.*?</div>)</div></div>')
# logger.debug("data %s \n\n" % video_section) # logger.debug("data %s \n\n" % video_section)
pattern = '<a href="(?P<url>[^"]+)">.*?<img.*?src="(?P<thumb>[^"]+)".*?class="bloque_superior">\s*' \ pattern = '<a href="(?P<url>[^"]+)"><img.*?src="(?P<thumb>[^"]+)".*?.*?class="bloque-superior">\s*' \
'(?P<quality>.*?)\s*</div>.*?src="(?P<lang>[^"]+)".*?class="bloque_inferior">\s*(?P<title>.*?)\s*' \ '(?P<quality>.*?)\s*<div class="imagen-idioma">\s*<img src=".*?icono_(?P<lang>[^\.]+).*?<div class=' \
'</div>.*?class="div_inferior_date">\s*(?P<date>.*?)\s*</div>' '"bloque-inferior">\s*(?P<title>.*?)\s*</div><div class="bloque-date">\s*(?P<date>.*?)\s*</div>'
matches = re.compile(pattern, re.DOTALL).findall(video_section) matches = re.compile(pattern, re.DOTALL).findall(video_section)
for url, thumb, quality, lang, title, date in matches: for url, thumb, quality, lang, title, date in matches:
title = scrapertools.htmlclean(title) title = scrapertools.htmlclean(title)
title = re.sub(r"\s{2}", " ", title) title = re.sub(r"\s{2}", " ", title)
if "/series" in item.url: if "/series" in item.url:
if quality: if quality:
title2 = "%s [%s]" % (title, quality) title2 = "%s [%s]" % (title, quality)
itemlist.append(Item(channel=item.channel, action="episodios", title=title2, url=url, thumbnail=thumb, itemlist.append(Item(channel=item.channel, action="episodios", title=title2, url=url, thumbnail=thumb,
quality=quality, contentTitle=title, contentType="tvshow")) quality=quality, contentTitle=title, contentType="tvshow"))
else: else:
if quality: if quality:
title2 = "%s [%s]" % (title, quality) title2 = "%s [%s]" % (title, quality)
itemlist.append(Item(channel=item.channel, action="findvideos", title=title2, url=url, thumbnail=thumb, itemlist.append(Item(channel=item.channel, action="findvideos", title=title2, url=url, thumbnail=thumb,
quality=quality, contentTitle=title, contentType="movie")) quality=quality, contentTitle=title, contentType="movie"))
pagination = scrapertools.find_single_match(data, '<div class="navigation">(.*?)</ul>') pagination = scrapertools.find_single_match(data, '<div class="nav-links">(.*?)</ul>')
if pagination: if pagination:
next_page = scrapertools.find_single_match(pagination, 'class="active"><a.*?<a.*?href="([^"]+)') next_page = scrapertools.find_single_match(pagination, "class='page-numbers current'.*?<a.*?href='([^']+)'")
# logger.debug("next %s" % next_page) # logger.debug("next %s" % next_page)
if next_page: if next_page:
itemlist.append(Item(channel=item.channel, action="listado", title=">> Página siguiente", url=next_page, itemlist.append(Item(channel=item.channel, action="listado", title=">> Página siguiente", url=next_page,
thumbnail=get_thumb("next.png"))) thumbnail=get_thumb("next.png")))
return itemlist return itemlist
def episodios(item): def episodios(item):
logger.info() logger.info()
itemlist = [] itemlist = []
dict_data = dict() dict_data = dict()
dict_data, item = get_episodes(item, dict_data) dict_data, item = get_episodes(item, dict_data)
for key in dict_data.keys(): for key in dict_data.keys():
d = dict_data[key] d = dict_data[key]
quality = "[%s]" % "][".join(d["quality"]) quality = "[%s]" % "][".join(d["quality"])
d["s_e"] = re.sub(r"\(Contrase.*?\)\s*", "NO REPRODUCIBLE-RAR", d["s_e"]) d["s_e"] = re.sub(r"\(Contrase.*?\)\s*", "NO REPRODUCIBLE-RAR", d["s_e"])
title = "%s [%s] %s" % (d["s_e"], d["lang"], quality) title = "%s [%s] %s" % (d["s_e"], d["lang"], quality)
logger.debug("bla %s" % d["s_e"]) # logger.debug("%s" % d["s_e"])
if "temporada" in d["s_e"].lower(): if "temporada" in d["s_e"].lower():
regex = re.compile('temporada\s*', re.I) regex = re.compile('temporada\s*', re.I)
d["s_e"] = regex.sub("", d["s_e"]) d["s_e"] = regex.sub("", d["s_e"])
season = scrapertools.find_single_match(d["s_e"], "(\d+)") season = scrapertools.find_single_match(d["s_e"], "(\d+)")
episode = 1 episode = 1
else: else:
season, episode = scrapertools.find_single_match(d["s_e"], "(\d+)&#215;(\d+)") season, episode = scrapertools.find_single_match(d["s_e"], "(\d+)&#215;(\d+)")
itemlist.append(item.clone(action="findvideos", title=title, thumbnail=item.thumbnail, url=d["url"], itemlist.append(item.clone(action="findvideos", title=title, thumbnail=item.thumbnail, url=d["url"],
server="torrent", contentSeason=season, contentEpisodeNumber=episode, server="torrent", contentSeason=season, contentEpisodeNumber=episode,
contentType="tvshow", fulltitle=item.title, quality=d["quality"], lang=d["lang"])) contentType="tvshow", fulltitle=item.title, quality=d["quality"], lang=d["lang"]))
# order list # order list
if len(itemlist) > 1: if len(itemlist) > 1:
itemlist = sorted(itemlist, key=lambda it: (int(it.contentSeason), int(it.contentEpisodeNumber))) itemlist = sorted(itemlist, key=lambda it: (int(it.contentSeason), int(it.contentEpisodeNumber)))
try: try:
from core import tmdb from core import tmdb
tmdb.set_infoLabels_itemlist(itemlist, __modo_grafico__) tmdb.set_infoLabels_itemlist(itemlist, __modo_grafico__)
except: except:
pass pass
return itemlist return itemlist
def get_episodes(item, dict_data): def get_episodes(item, dict_data):
global dict_url_seasons global dict_url_seasons
data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url).data) data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url).data)
# logger.debug("data %s \n\n" % data) # logger.debug("data %s \n\n" % data)
if item.contentTitle != "": if item.contentTitle != "":
title = scrapertools.find_single_match(data, '<div class="titulo_page_exit">(.*?)[.]</div>') title = scrapertools.find_single_match(data, '<h3 class="bold">.*?original:\s*(.*?)[.]</h3>')
year = scrapertools.find_single_match(data, '<div class="ano_page_exit">(\d+)</div>') year = scrapertools.find_single_match(data, '<h3 class="bold">\s*Estreno:\s*(\d+)[.]</h')
# logger.debug("title es %s" % title) # logger.debug("title es %s" % title)
if title: if title:
item.contentTitle = title item.contentTitle = title
item.show = title item.show = title
if year: if year:
item.infoLabels['year'] = year item.infoLabels['year'] = year
links_section = scrapertools.find_single_match(data, 'div id="Tokyo" [^>]+>(.*?)</div>') links_section = scrapertools.find_single_match(data, 'div id="Tokyo" [^>]+>(.*?)</div>')
# logger.debug("data %s \n\n" % data) # logger.debug("data %s \n\n" % links_section)
pattern = 'icono_.*?png" title="(?P<lang>.*?)" [^>]+></td><td>(?P<s_e>.*?)</td><td>(?P<quality>.*?)</td><td>' \ pattern = 'icono_.*?png" title="(?P<lang>.*?)" [^>]+></td><td>(?P<s_e>.*?)</td><td>(?P<quality>.*?)</td><td>' \
'<a href="(?P<url>[^"]+)"' '<a class="link" href="(?P<url>[^"]+)"'
matches = re.compile(pattern, re.DOTALL).findall(links_section) matches = re.compile(pattern, re.DOTALL).findall(links_section)
for lang, s_e, quality, url in matches: for lang, s_e, quality, url in matches:
if s_e + lang not in dict_data: if s_e + lang not in dict_data:
dict_data[s_e + lang] = {"url": [url], "lang": lang, "s_e": s_e, dict_data[s_e + lang] = {"url": [url], "lang": lang, "s_e": s_e,
"quality": [quality]} "quality": [quality]}
else: else:
if quality not in dict_data[s_e+lang]["quality"]: if quality not in dict_data[s_e+lang]["quality"]:
dict_data[s_e + lang]["quality"].append(quality) dict_data[s_e + lang]["quality"].append(quality)
dict_data[s_e + lang]["url"].append(url) dict_data[s_e + lang]["url"].append(url)
url_to_check = scrapertools.find_single_match(links_section, '</table><p><a .*?href="([^"]+)">Temporada.*?</a>') url_to_check = scrapertools.find_single_match(links_section, '</table><p><a.*?href="([^"]+)".*?>\s*Temporada.*?</a>')
# logger.debug("url es %s " % url_to_check) # logger.debug("url es %s " % url_to_check)
# if url doesn't exist we add it into the dict # if url doesn't exist we add it into the dict
if url_to_check not in dict_url_seasons: if url_to_check and url_to_check not in dict_url_seasons:
dict_url_seasons[url_to_check] = False dict_url_seasons[url_to_check] = False
for key, value in dict_url_seasons.items(): for key, value in dict_url_seasons.items():
if not value: if not value:
item.url = key item.url = key
dict_url_seasons[key] = True dict_url_seasons[key] = True
dict_data, item = get_episodes(item, dict_data) dict_data, item = get_episodes(item, dict_data)
# logger.debug("URL_LIST es %s " % dict_url_seasons) # logger.debug("URL_LIST es %s " % dict_url_seasons)
return dict_data, item return dict_data, item
def findvideos(item): def findvideos(item):
logger.info() logger.info()
itemlist = [] itemlist = []
if item.contentType == "movie": if item.contentType == "movie":
data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url).data) data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url).data)
# logger.debug("data %s \n\n" % data) # logger.debug("data %s \n\n" % data)
if item.contentTitle != "": if item.contentTitle != "":
title = scrapertools.find_single_match(data, '<div class="titulo_page_exit">(.*?)[.]</div>') title = scrapertools.find_single_match(data, '<div class="titulo_page_exit">(.*?)[.]</div>')
year = scrapertools.find_single_match(data, '<div class="ano_page_exit">(\d+)</div>') year = scrapertools.find_single_match(data, '<div class="ano_page_exit">(\d+)</div>')
logger.debug("title es %s" % title) logger.debug("title es %s" % title)
if title: if title:
item.contentTitle = title item.contentTitle = title
item.show = title item.show = title
if year: if year:
item.infoLabels['year'] = year item.infoLabels['year'] = year
links_section = scrapertools.find_single_match(data, 'div id="Tokyo" [^>]+>(.*?)</div>') links_section = scrapertools.find_single_match(data, 'div id="Tokyo" [^>]+>(.*?)</div>')
# logger.debug("data %s \n\n" % data) # logger.debug("data %s \n\n" % data)
pattern = 'icono_.*?png" title="(?P<lang>.*?)" [^>]+></td><td>(?P<quality>.*?)</td><td>(?P<size>.*?)</td><td>' \ pattern = 'icono_.*?png" title="(?P<lang>.*?)" [^>]+></td><td>(?P<quality>.*?)</td><td>(?P<size>.*?)</td><td>' \
'<a href="(?P<url>[^"]+)"' '<a class="link" href="(?P<url>[^"]+)"'
matches = re.compile(pattern, re.DOTALL).findall(links_section) matches = re.compile(pattern, re.DOTALL).findall(links_section)
for lang, quality, size, url in matches: for lang, quality, size, url in matches:
title = "[%s] [%s] (%s)" % (lang, quality, size) title = "[%s] [%s] (%s)" % (lang, quality, size)
itemlist.append(item.clone(action="play", title=title, url=url, thumbnail=item.thumbnail, server="torrent", itemlist.append(item.clone(action="play", title=title, url=url, thumbnail=item.thumbnail, server="torrent",
fulltitle=item.title)) fulltitle=item.title))
try: try:
from core import tmdb from core import tmdb
tmdb.set_infoLabels_itemlist(itemlist, __modo_grafico__) tmdb.set_infoLabels_itemlist(itemlist, __modo_grafico__)
except: except:
pass pass
else: else:
for index, url in enumerate(item.url): for index, url in enumerate(item.url):
title = "%sx%s [%s] [%s]" % (item.contentSeason, item.contentEpisodeNumber, item.lang, item.quality[index]) title = "%sx%s [%s] [%s]" % (item.contentSeason, item.contentEpisodeNumber, item.lang, item.quality[index])
itemlist.append(item.clone(action="play", title=title, url=url, thumbnail=item.thumbnail, server="torrent", itemlist.append(item.clone(action="play", title=title, url=url, thumbnail=item.thumbnail, server="torrent",
quality=item.quality[index])) quality=item.quality[index]))
return itemlist return itemlist
-114
View File
@@ -1,114 +0,0 @@
{
"id": "playmax",
"name": "PlayMax",
"language": ["cast", "lat"],
"active": false,
"adult": false,
"thumbnail": "playmax.png",
"banner": "playmax.png",
"categories": [
"movie",
"tvshow"
],
"settings": [
{
"id": "playmaxuser",
"type": "text",
"color": "0xFF25AA48",
"label": "@30014",
"enabled": true,
"visible": true
},
{
"id": "playmaxpassword",
"type": "text",
"color": "0xFF25AA48",
"hidden": true,
"label": "@30015",
"enabled": "!eq(-1,'')",
"visible": true
},
{
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en búsqueda global",
"default": false,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_peliculas",
"type": "bool",
"label": "Incluir en Novedades - Películas",
"default": false,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_infantiles",
"type": "bool",
"label": "Incluir en Novedades - Infantiles",
"default": false,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_series",
"type": "bool",
"label": "Incluir en Novedades - Series",
"default": false,
"enabled": true,
"visible": true
},
{
"id": "modo_grafico",
"type": "bool",
"color": "0xFFd50b0b",
"label": "Buscar información extra",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "menu_info",
"type": "bool",
"color": "0xFFd50b0b",
"label": "Mostrar menú intermedio película/episodio",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "perfil",
"type": "list",
"label": "Perfil de color",
"default": 3,
"enabled": true,
"visible": true,
"lvalues": [
"Sin color",
"Perfil 3",
"Perfil 2",
"Perfil 1"
]
},
{
"id": "last_page",
"type": "bool",
"color": "0xFFd50b0b",
"label": "Ocultar opción elegir página en películas (Kodi)",
"default": false,
"enabled": true,
"visible": true
},
{
"id": "order_web",
"type": "bool",
"color": "0xFFd50b0b",
"label": "Usar el mismo orden de los enlaces que la web",
"default": false,
"enabled": true,
"visible": true
}
]
}
-979
View File
@@ -1,979 +0,0 @@
# -*- coding: utf-8 -*-
import re
from core import httptools
from core import scrapertools
from core import tmdb
from core.item import Item
from platformcode import config, logger
sid = config.get_setting("sid_playmax", "playmax")
apikey = "0ea143087685e9e0a23f98ae"
__modo_grafico__ = config.get_setting('modo_grafico', 'playmax')
__perfil__ = config.get_setting('perfil', "playmax")
__menu_info__ = config.get_setting('menu_info', 'playmax')
# Fijar perfil de color
perfil = [['0xFFFFE6CC', '0xFFFFCE9C', '0xFF994D00', '0xFFFE2E2E', '0xFF088A08'],
['0xFFA5F6AF', '0xFF5FDA6D', '0xFF11811E', '0xFFFE2E2E', '0xFF088A08'],
['0xFF58D3F7', '0xFF2E9AFE', '0xFF2E64FE', '0xFFFE2E2E', '0xFF088A08']]
if __perfil__ - 1 >= 0:
color1, color2, color3, color4, color5 = perfil[__perfil__ - 1]
else:
color1 = color2 = color3 = color4 = color5 = ""
host = "https://playmax.mx"
def login():
logger.info()
try:
user = config.get_setting("playmaxuser", "playmax")
password = config.get_setting("playmaxpassword", "playmax")
if user == "" and password == "":
return False, "Para ver los enlaces de este canal es necesario registrarse en playmax.mx"
elif user == "" or password == "":
return False, "Usuario o contraseña en blanco. Revisa tus credenciales"
data = httptools.downloadpage("https://playmax.mx/ucp.php?mode=login").data
if re.search(r'(?i)class="hb_user_data" title="%s"' % user, data):
if not config.get_setting("sid_playmax", "playmax"):
sid_ = scrapertools.find_single_match(data, 'sid=([^"]+)"')
if not sid_:
sid_ = scrapertools.find_single_match(config.get_cookie_data(), 'playmax.*?_sid\s*([A-z0-9]+)')
config.set_setting("sid_playmax", sid_, "playmax")
return True, ""
confirm_id = scrapertools.find_single_match(data, 'name="confirm_id" value="([^"]+)"')
sid_log = scrapertools.find_single_match(data, 'name="sid" value="([^"]+)"')
post = "username=%s&password=%s&autologin=on&agreed=true&change_lang=0&confirm_id=%s&login=&sid=%s" \
"&redirect=index.php&login=Entrar" % (user, password, confirm_id, sid_log)
data = httptools.downloadpage("https://playmax.mx/ucp.php?mode=login", post=post).data
if "contraseña incorrecta" in data:
logger.error("Error en el login")
return False, "Contraseña errónea. Comprueba tus credenciales"
elif "nombre de usuario incorrecto" in data:
logger.error("Error en el login")
return False, "Nombre de usuario no válido. Comprueba tus credenciales"
else:
logger.info("Login correcto")
sid_ = scrapertools.find_single_match(data, 'sid=([^"]+)"')
if not sid_:
sid_ = scrapertools.find_single_match(config.get_cookie_data(), 'playmax.*?_sid\s*([A-z0-9]+)')
config.set_setting("sid_playmax", sid_, "playmax")
# En el primer logueo se activa la busqueda global y la seccion novedades
if not config.get_setting("primer_log", "playmax"):
config.set_setting("include_in_global_search", True, "playmax")
config.set_setting("include_in_newest_peliculas", True, "playmax")
config.set_setting("include_in_newest_series", True, "playmax")
config.set_setting("include_in_newest_infantiles", True, "playmax")
config.set_setting("primer_log", False, "playmax")
return True, ""
except:
import traceback
logger.error(traceback.format_exc())
return False, "Error en el login. Comprueba tus credenciales o si la web está operativa"
def mainlist(item):
logger.info()
itemlist = []
item.text_color = color1
logueado, error_message = login()
if not logueado:
config.set_setting("include_in_global_search", False, "playmax")
itemlist.append(item.clone(title=error_message, action="configuracion", folder=False))
return itemlist
itemlist.append(item.clone(title="Películas", action="", text_color=color2))
item.contentType = "movie"
itemlist.append(
item.clone(title=" Novedades", action="fichas", url=host + "/catalogo.php?tipo[]=2&ad=2&ordenar="
"novedades&con_dis=on"))
itemlist.append(
item.clone(title=" Populares", action="fichas", url=host + "/catalogo.php?tipo[]=2&ad=2&ordenar="
"pop&con_dis=on"))
itemlist.append(item.clone(title=" Índices", action="indices"))
itemlist.append(item.clone(title="Series", action="", text_color=color2))
item.contentType = "tvshow"
itemlist.append(item.clone(title=" Nuevos capítulos", action="fichas", url=host + "/catalogo.php?tipo[]=1&ad=2&"
"ordenar=novedades&con_dis=on"))
itemlist.append(item.clone(title=" Nuevas series", action="fichas", url=host + "/catalogo.php?tipo[]=1&ad=2&"
"ordenar=año&con_dis=on"))
itemlist.append(item.clone(title=" Índices", action="indices"))
item.contentType = "movie"
itemlist.append(item.clone(title="Documentales", action="fichas", text_color=color2,
url=host + "/catalogo.php?&tipo[]=3&ad=2&ordenar=novedades&con_dis=on"))
itemlist.append(item.clone(title="Listas", action="listas", text_color=color2,
url=host + "/listas.php?apikey=%s&sid=%s&start=0" % (apikey, sid), extra="listas"))
itemlist.append(item.clone(action="search", title="Buscar...", text_color=color2))
itemlist.append(item.clone(action="acciones_cuenta", title="Tus fichas", text_color=color4))
itemlist.append(item.clone(title="Configuración del canal", action="configuracion", text_color="gold"))
return itemlist
def search(item, texto):
logger.info()
texto = texto.replace(" ", "%20")
item.url = "%s/buscar.php?apikey=%s&sid=%s&buscar=%s&modo=[fichas]&start=0" % (host, apikey, sid, texto)
try:
return busqueda(item)
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
return []
def busqueda(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
data = xml2dict(data)
if type(data["Data"]["Fichas"]["Ficha"]) == dict:
searched_data = [data["Data"]["Fichas"]["Ficha"]]
else:
searched_data = data["Data"]["Fichas"]["Ficha"]
for f in searched_data:
f["Title"] = f["Title"].replace("<![CDATA[", "").replace("]]>", "")
title = "%s (%s)" % (f["Title"], f["Year"])
infolab = {'year': f["Year"]}
thumbnail = f["Poster"]
url = "%s/ficha.php?f=%s" % (host, f["Id"])
action = "findvideos"
if __menu_info__:
action = "menu_info"
if f["IsSerie"] == "1":
tipo = "tvshow"
show = f["Title"]
if not __menu_info__:
action = "episodios"
else:
tipo = "movie"
show = ""
itemlist.append(Item(channel=item.channel, action=action, title=title, url=url, text_color=color2,
contentTitle=f["Title"], show=show, contentType=tipo, infoLabels=infolab,
thumbnail=thumbnail))
if __modo_grafico__:
tmdb.set_infoLabels_itemlist(itemlist, __modo_grafico__)
total = int(data["Data"]["totalResultsFichas"])
actualpage = int(scrapertools.find_single_match(item.url, "start=(\d+)"))
if actualpage + 20 < total:
next_page = item.url.replace("start=%s" % actualpage, "start=%s" % (actualpage + 20))
itemlist.append(Item(channel=item.channel, action="busqueda", title=">> Página Siguiente",
url=next_page, thumbnail=item.thumbnail))
return itemlist
def configuracion(item):
from platformcode import platformtools
ret = platformtools.show_channel_settings()
platformtools.itemlist_refresh()
return ret
def newest(categoria):
logger.info()
itemlist = []
item = Item()
try:
if categoria == 'series':
item.channel = "playmax"
item.extra = "newest"
item.url = host + "/catalogo.php?tipo[]=1&ad=2&ordenar=novedades&con_dis=on"
item.contentType = "tvshow"
itemlist = fichas(item)
if itemlist[-1].action == "fichas":
itemlist.pop()
elif categoria == 'peliculas':
item.channel = "playmax"
item.extra = "newest"
item.url = host + "/catalogo.php?tipo[]=2&ad=2&ordenar=novedades&con_dis=on"
item.contentType = "movie"
itemlist = fichas(item)
if itemlist[-1].action == "fichas":
itemlist.pop()
elif categoria == 'infantiles':
item.channel = "playmax"
item.extra = "newest"
item.url = host + "/catalogo.php?tipo[]=2&generos[]=60&ad=2&ordenar=novedades&con_dis=on"
item.contentType = "movie"
itemlist = fichas(item)
if itemlist[-1].action == "fichas":
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("%s" % line)
return []
return itemlist
def indices(item):
logger.info()
itemlist = []
tipo = "2"
if item.contentType == "tvshow":
tipo = "1"
if "Índices" in item.title:
if item.contentType == "tvshow":
itemlist.append(item.clone(title="Populares", action="fichas", url=host + "/catalogo.php?tipo[]=1&ad=2&"
"ordenar=pop&con_dis=on"))
itemlist.append(item.clone(title="Más vistas", action="fichas", url=host + "/catalogo.php?tipo[]=%s&ad=2&"
"ordenar=siempre&con_dis=on" % tipo))
itemlist.append(item.clone(title="Mejor valoradas", action="fichas", url=host + "/catalogo.php?tipo[]=%s&ad=2&"
"ordenar=valoracion&con_dis=on" % tipo))
itemlist.append(item.clone(title="Géneros", url=host + "/catalogo.php"))
itemlist.append(item.clone(title="Idiomas", url=host + "/catalogo.php"))
if item.contentType == "movie":
itemlist.append(item.clone(title="Por calidad", url=host + "/catalogo.php"))
itemlist.append(item.clone(title="Por año"))
itemlist.append(item.clone(title="Por país", url=host + "/catalogo.php"))
return itemlist
if "Géneros" in item.title:
data = httptools.downloadpage(item.url).data
patron = '<div class="sel gen" value="([^"]+)">([^<]+)</div>'
matches = scrapertools.find_multiple_matches(data, patron)
for value, genero in matches:
url = item.url + "?tipo[]=%s&generos[]=%s&ad=2&ordenar=novedades&con_dis=on" % (tipo, value)
itemlist.append(item.clone(action="fichas", title=genero, url=url))
elif "Idiomas" in item.title:
data = httptools.downloadpage(item.url).data
bloque = scrapertools.find_single_match(data, 'oname="Idioma">Cualquier(.*?)<input')
patron = '<div class="sel" value="([^"]+)">([^<]+)</div>'
matches = scrapertools.find_multiple_matches(bloque, patron)
for value, idioma in matches:
url = item.url + "?tipo[]=%s&ad=2&ordenar=novedades&con_dis=on&e_idioma=%s" % (tipo, value)
itemlist.append(item.clone(action="fichas", title=idioma, url=url))
elif "calidad" in item.title:
data = httptools.downloadpage(item.url).data
bloque = scrapertools.find_single_match(data, 'oname="Calidad">Cualquier(.*?)<input')
patron = '<div class="sel" value="([^"]+)">([^<]+)</div>'
matches = scrapertools.find_multiple_matches(bloque, patron)
for value, calidad in matches:
url = item.url + "?tipo[]=%s&ad=2&ordenar=novedades&con_dis=on&e_calidad=%s" % (tipo, value)
itemlist.append(item.clone(action="fichas", title=calidad, url=url))
elif "país" in item.title:
data = httptools.downloadpage(item.url).data
bloque = scrapertools.find_single_match(data, 'oname="País">Todos(.*?)<input')
patron = '<div class="sel" value="([^"]+)">([^<]+)</div>'
matches = scrapertools.find_multiple_matches(bloque, patron)
for value, pais in matches:
url = item.url + "?tipo[]=%s&ad=2&ordenar=novedades&con_dis=on&pais=%s" % (tipo, value)
itemlist.append(item.clone(action="fichas", title=pais, url=url))
else:
from datetime import datetime
year = datetime.now().year
for i in range(year, 1899, -1):
url = "%s/catalogo.php?tipo[]=%s&del=%s&al=%s&año=personal&ad=2&ordenar=novedades&con_dis=on" \
% (host, tipo, i, i)
itemlist.append(item.clone(action="fichas", title=str(i), url=url))
return itemlist
def fichas(item):
logger.info()
itemlist = []
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'}
patron = '<div class="c_fichas_image"[^>]*>[^<]*<[^>]+href="\.([^"]+)".*?src-data="([^"]+)".*?' \
'<div class="c_fichas_data".*?marked="([^"]*)".*?serie="([^"]*)".*?' \
'<div class="c_fichas_title">(?:<div class="c_fichas_episode">([^<]+)</div>|)([^<]+)</div>'
matches = scrapertools.find_multiple_matches(data, patron)
for scrapedurl, scrapedthumbnail, marca, serie, episodio, scrapedtitle in matches:
tipo = "movie"
scrapedurl = host + scrapedurl.rsplit("-dc=")[0]
if not "-dc=" in scrapedurl:
scrapedurl += "-dc="
action = "findvideos"
if __menu_info__:
action = "menu_info"
if serie:
tipo = "tvshow"
if episodio:
title = "%s - %s" % (episodio.replace("X", "x"), scrapedtitle)
else:
title = scrapedtitle
if marca:
title += " [COLOR %s][%s][/COLOR]" % (color4, fichas_marca[marca])
new_item = Item(channel=item.channel, action=action, title=title, url=scrapedurl,
thumbnail=scrapedthumbnail, contentTitle=scrapedtitle, contentType=tipo,
text_color=color2)
if new_item.contentType == "tvshow":
new_item.show = scrapedtitle
if not __menu_info__:
new_item.action = "episodios"
itemlist.append(new_item)
if itemlist and (item.extra == "listas_plus" or item.extra == "sigo"):
follow = scrapertools.find_single_match(data, '<div onclick="seguir_lista.*?>(.*?)<')
title = "Seguir Lista"
if follow == "Siguiendo":
title = "Dejar de seguir lista"
item.extra = ""
url = host + "/data.php?mode=seguir_lista&apikey=%s&sid=%s&lista=%s" % (
apikey, sid, item.url.rsplit("/l", 1)[1])
itemlist.insert(0, item.clone(action="acciones_cuenta", title=title, url=url, text_color=color4,
lista=item.title, folder=False))
next_page = scrapertools.find_single_match(data, 'href="([^"]+)" class="next"')
if next_page:
next_page = host + next_page.replace("&amp;", "&")
itemlist.append(Item(channel=item.channel, action="fichas", title=">> Página Siguiente", url=next_page))
try:
total = int(scrapertools.find_single_match(data, '<span class="page-dots">.*href.*?>(\d+)'))
except:
total = 0
if not config.get_setting("last_page", item.channel) and config.is_xbmc() and total > 2 \
and item.extra != "newest":
itemlist.append(item.clone(action="select_page", title="Ir a página... (Total:%s)" % total, url=next_page,
text_color=color5))
return itemlist
def episodios(item):
logger.info()
itemlist = []
# Descarga la página
data = httptools.downloadpage(item.url).data
data = re.sub(r"\n|\r|\t|\s{2}|&nbsp;|<br>", "", data)
if not item.infoLabels["tmdb_id"]:
item.infoLabels["tmdb_id"] = scrapertools.find_single_match(data,
'<a href="https://www.themoviedb.org/[^/]+/(\d+)')
item.infoLabels["year"] = scrapertools.find_single_match(data, 'class="e_new">(\d{4})')
if not item.infoLabels["genre"]:
item.infoLabels["genre"] = ", ".join(scrapertools.find_multiple_matches(data,
'<a itemprop="genre"[^>]+>([^<]+)</a>'))
if not item.infoLabels["plot"]:
item.infoLabels["plot"] = scrapertools.find_single_match(data, 'itemprop="description">([^<]+)</div>')
dc = scrapertools.find_single_match(data, "var dc_ic = '\?dc=([^']+)'")
patron = '<div class="f_cl_l_c f_cl_l_c_id[^"]+" c_id="([^"]+)" .*?c_num="([^"]+)" c_name="([^"]+)"' \
'.*?load_f_links\(\d+\s*,\s*(\d+).*?<div class="([^"]+)" onclick="marcar_capitulo'
matches = scrapertools.find_multiple_matches(data, patron)
lista_epis = []
for c_id, episodio, title, ficha, status in matches:
episodio = episodio.replace("X", "x")
if episodio in lista_epis:
continue
lista_epis.append(episodio)
url = "https://playmax.mx/c_enlaces_n.php?ficha=%s&c_id=%s&dc=%s" % (ficha, c_id, dc)
title = "%s - %s" % (episodio, title)
if "_mc a" in status:
title = "[COLOR %s]%s[/COLOR] %s" % (color5, u"\u0474".encode('utf-8'), title)
new_item = Item(channel=item.channel, action="findvideos", title=title, url=url, thumbnail=item.thumbnail,
fanart=item.fanart, show=item.show, infoLabels=item.infoLabels, text_color=color2,
referer=item.url, contentType="episode")
try:
new_item.infoLabels["season"], new_item.infoLabels["episode"] = episodio.split('x', 1)
except:
pass
itemlist.append(new_item)
itemlist.sort(key=lambda it: (it.infoLabels["season"], it.infoLabels["episode"]), reverse=True)
if __modo_grafico__:
tmdb.set_infoLabels_itemlist(itemlist, __modo_grafico__)
library_path = config.get_videolibrary_path()
if config.get_videolibrary_support() and not item.extra:
title = "Añadir serie a la videoteca"
if item.infoLabels["imdb_id"] and not library_path.lower().startswith("smb://"):
try:
from core import filetools
path = filetools.join(library_path, "SERIES")
files = filetools.walk(path)
for dirpath, dirname, filename in files:
if item.infoLabels["imdb_id"] in dirpath:
for f in filename:
if f != "tvshow.nfo":
continue
from core import videolibrarytools
head_nfo, it = videolibrarytools.read_nfo(filetools.join(dirpath, dirname, f))
canales = it.library_urls.keys()
canales.sort()
if "playmax" in canales:
canales.pop(canales.index("playmax"))
canales.insert(0, "[COLOR red]playmax[/COLOR]")
title = "Serie ya en tu videoteca. [%s] ¿Añadir?" % ",".join(canales)
break
except:
import traceback
logger.error(traceback.format_exc())
pass
itemlist.append(item.clone(action="add_serie_to_library", title=title, text_color=color5,
extra="episodios###library"))
if itemlist and not __menu_info__:
ficha = scrapertools.find_single_match(item.url, '-f(\d+)-')
itemlist.extend(acciones_fichas(item, sid, ficha))
return itemlist
def findvideos(item):
logger.info()
itemlist = []
if item.contentType == "movie":
# Descarga la página
data = httptools.downloadpage(item.url).data
data = re.sub(r"\n|\r|\t|\s{2}|&nbsp;|<br>", "", data)
if not item.infoLabels["tmdb_id"]:
item.infoLabels["tmdb_id"] = scrapertools.find_single_match(data, '<a href="https://www.themoviedb.org/'
'[^/]+/(\d+)')
item.infoLabels["year"] = scrapertools.find_single_match(data, 'class="e_new">(\d{4})')
if __modo_grafico__:
tmdb.set_infoLabels_item(item, __modo_grafico__)
if not item.infoLabels["plot"]:
item.infoLabels["plot"] = scrapertools.find_single_match(data, 'itemprop="description">([^<]+)</div>')
if not item.infoLabels["genre"]:
item.infoLabels["genre"] = ", ".join(scrapertools.find_multiple_matches(data, '<a itemprop="genre"[^>]+>'
'([^<]+)</a>'))
ficha = scrapertools.find_single_match(item.url, '-f(\d+)-')
if not ficha:
ficha = scrapertools.find_single_match(item.url, 'f=(\d+)')
cid = "0"
else:
ficha, cid = scrapertools.find_single_match(item.url, 'ficha=(\d+)&c_id=(\d+)')
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 = xml2dict(data)
for k, v in data["Data"].items():
try:
if type(v) is dict:
if k == "Online":
order = 1
elif k == "Download":
order = 0
else:
order = 2
itemlist.append(item.clone(action="", title=k, text_color=color3, order=order))
if type(v["Item"]) is str:
continue
elif type(v["Item"]) is dict:
v["Item"] = [v["Item"]]
for it in v["Item"]:
try:
thumbnail = "%s/styles/prosilver/imageset/%s.png" % (host, it['Host'])
title = " %s - %s/%s" % (it['Host'].capitalize(), it['Quality'], it['Lang'])
calidad = int(scrapertools.find_single_match(it['Quality'], '(\d+)p'))
calidadaudio = it['QualityA'].replace("...", "")
subtitulos = it['Subtitles'].replace("Sin subtítulos", "")
if subtitulos:
title += " (%s)" % subtitulos
if calidadaudio:
title += " [Audio:%s]" % calidadaudio
likes = 0
if it["Likes"] != "0" or it["Dislikes"] != "0":
likes = int(it["Likes"]) - int(it["Dislikes"])
title += " (%s ok, %s ko)" % (it["Likes"], it["Dislikes"])
if type(it["Url"]) is dict:
for i, enlace in enumerate(it["Url"]["Item"]):
titulo = title + " (Parte %s)" % (i + 1)
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,
cid=cid, folder=False))
except:
pass
except:
pass
if not config.get_setting("order_web", "playmax"):
itemlist.sort(key=lambda it: (it.order, it.calidad, it.like), reverse=True)
else:
itemlist.sort(key=lambda it: it.order, reverse=True)
if itemlist:
itemlist.extend(acciones_fichas(item, sid, ficha))
if not itemlist and item.contentType != "movie":
url = url.replace("apikey=%s&" % apikey, "")
data = httptools.downloadpage(url).data
data = re.sub(r"\n|\r|\t|\s{2}|&nbsp;|<br>", "", data)
patron = '<div id="f_fde_c"[^>]+>(.*?update_fecha\(\d+\)">)</div>'
estrenos = scrapertools.find_multiple_matches(data, patron)
for info in estrenos:
info = "Estreno en " + scrapertools.htmlclean(info)
itemlist.append(item.clone(action="", title=info))
if not itemlist:
itemlist.append(item.clone(action="", title="No hay enlaces disponibles"))
return itemlist
def menu_info(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
data = re.sub(r"\n|\r|\t|\s{2}|&nbsp;|<br>", "", data)
item.infoLabels["tmdb_id"] = scrapertools.find_single_match(data, '<a href="https://www.themoviedb.org/[^/]+/(\d+)')
item.infoLabels["year"] = scrapertools.find_single_match(data, 'class="e_new">(\d{4})')
item.infoLabels["plot"] = scrapertools.find_single_match(data, 'itemprop="description">([^<]+)</div>')
item.infoLabels["genre"] = ", ".join(scrapertools.find_multiple_matches(data,
'<a itemprop="genre"[^>]+>([^<]+)</a>'))
if __modo_grafico__:
tmdb.set_infoLabels_item(item, __modo_grafico__)
action = "findvideos"
title = "Ver enlaces"
if item.contentType == "tvshow":
action = "episodios"
title = "Ver capítulos"
itemlist.append(item.clone(action=action, title=title))
carpeta = "CINE"
tipo = "película"
action = "add_pelicula_to_library"
extra = ""
if item.contentType == "tvshow":
carpeta = "SERIES"
tipo = "serie"
action = "add_serie_to_library"
extra = "episodios###library"
library_path = config.get_videolibrary_path()
if config.get_videolibrary_support():
title = "Añadir %s a la videoteca" % tipo
if item.infoLabels["imdb_id"] and not library_path.lower().startswith("smb://"):
try:
from core import filetools
path = filetools.join(library_path, carpeta)
files = filetools.walk(path)
for dirpath, dirname, filename in files:
if item.infoLabels["imdb_id"] in dirpath:
namedir = dirpath.replace(path, '')[1:]
for f in filename:
if f != namedir + ".nfo" and f != "tvshow.nfo":
continue
from core import videolibrarytools
head_nfo, it = videolibrarytools.read_nfo(filetools.join(dirpath, f))
canales = it.library_urls.keys()
canales.sort()
if "playmax" in canales:
canales.pop(canales.index("playmax"))
canales.insert(0, "[COLOR red]playmax[/COLOR]")
title = "%s ya en tu videoteca. [%s] ¿Añadir?" % (tipo.capitalize(), ",".join(canales))
break
except:
import traceback
logger.error(traceback.format_exc())
pass
itemlist.append(item.clone(action=action, title=title, text_color=color5, extra=extra))
token_auth = config.get_setting("token_trakt", "tvmoviedb")
if token_auth and item.infoLabels["tmdb_id"]:
extra = "movie"
if item.contentType != "movie":
extra = "tv"
itemlist.append(item.clone(channel="tvmoviedb", title="[Trakt] Gestionar con tu cuenta", action="menu_trakt",
extra=extra))
itemlist.append(item.clone(channel="trailertools", action="buscartrailer", title="Buscar Tráiler",
text_color="magenta", context=""))
itemlist.append(item.clone(action="", title=""))
ficha = scrapertools.find_single_match(item.url, '-f(\d+)-')
if not ficha:
ficha = scrapertools.find_single_match(item.url, 'f=(\d+)')
itemlist.extend(acciones_fichas(item, sid, ficha, season=True))
itemlist.append(item.clone(action="acciones_cuenta", title="Añadir a una lista", text_color=color3, ficha=ficha))
return itemlist
def acciones_fichas(item, sid, ficha, season=False):
marcarlist = []
new_item = item.clone()
new_item.infoLabels.pop("duration", None)
estados = [{'following': 'seguir'}, {'favorite': 'favorita'}, {'view': 'vista'}, {'slope': 'pendiente'}]
url = "https://playmax.mx/ficha.php?apikey=%s&sid=%s&f=%s" % (apikey, sid, ficha)
data = httptools.downloadpage(url).data
data = xml2dict(data)
try:
marked = data["Data"]["User"]["Marked"]
if new_item.contentType == "episode":
for epi in data["Data"]["Episodes"]["Season_%s" % new_item.infoLabels["season"]]["Item"]:
if int(epi["Episode"]) == new_item.infoLabels["episode"]:
epi_marked = epi["EpisodeViewed"].replace("yes", "ya")
epi_id = epi["Id"]
marcarlist.append(new_item.clone(action="marcar", title="Capítulo %s visto. ¿Cambiar?" % epi_marked,
text_color=color3, epi_id=epi_id))
break
except:
pass
try:
tipo = new_item.contentType.replace("movie", "Película").replace("episode", "Serie").replace("tvshow", "Serie")
for status in estados:
for k, v in status.items():
if k != marked:
title = "Marcar %s como %s" % (tipo.lower(), v)
action = "marcar"
else:
title = "%s marcada como %s" % (tipo, v)
action = ""
if k == "following" and tipo == "Película":
continue
elif k == "following" and tipo == "Serie":
title = title.replace("seguir", "seguida")
if k != marked:
title = "Seguir serie"
action = "marcar"
marcarlist.insert(1, new_item.clone(action=action, title=title, text_color=color4, ficha=ficha,
folder=False))
continue
marcarlist.append(new_item.clone(action="marcar", title=title, text_color=color3, ficha=ficha,
folder=False))
except:
pass
try:
if season and item.contentType == "tvshow":
seasonlist = []
for k, v in data["Data"]["Episodes"].items():
vistos = False
season = k.rsplit("_", 1)[1]
if type(v) is str:
continue
elif type(v["Item"]) is not list:
v["Item"] = [v["Item"]]
for epi in v["Item"]:
if epi["EpisodeViewed"] == "no":
vistos = True
seasonlist.append(
new_item.clone(action="marcar", title="Marcar temporada %s como vista" % season,
text_color=color1, season=int(season), ficha=ficha, folder=False))
break
if not vistos:
seasonlist.append(
new_item.clone(action="marcar", title="Temporada %s ya vista. ¿Revertir?" % season,
text_color=color1, season=int(season), ficha=ficha, folder=False))
seasonlist.sort(key=lambda it: it.season, reverse=True)
marcarlist.extend(seasonlist)
except:
pass
return marcarlist
def acciones_cuenta(item):
logger.info()
itemlist = []
if "Tus fichas" in item.title:
itemlist.append(item.clone(title="Capítulos", url="tf_block_c a", contentType="tvshow"))
itemlist.append(item.clone(title="Series", url="tf_block_s", contentType="tvshow"))
itemlist.append(item.clone(title="Películas", url="tf_block_p"))
itemlist.append(item.clone(title="Documentales", url="tf_block_d"))
return itemlist
elif "Añadir a una lista" in item.title:
data = httptools.downloadpage(host + "/c_listas.php?apikey=%s&sid=%s" % (apikey, sid)).data
data = xml2dict(data)
itemlist.append(item.clone(title="Crear nueva lista", folder=False))
if data["Data"]["TusListas"] != "\t":
import random
data = data["Data"]["TusListas"]["Item"]
if type(data) is not list:
data = [data]
for child in data:
image = ""
title = "%s (%s fichas)" % (child["Title"], child["FichasInList"])
images = []
for i in range(1, 5):
if "sinimagen.png" not in child["Poster%s" % i]:
images.append(child["Poster%s" % i].replace("/100/", "/400/"))
if images:
image = images[random.randint(0, len(images) - 1)]
url = host + "/data.php?mode=add_listas&apikey=%s&sid=%s&ficha_id=%s" % (apikey, sid, item.ficha)
post = "lista_id[]=%s" % child["Id"]
itemlist.append(item.clone(title=title, url=url, post=post, thumbnail=image, folder=False))
return itemlist
elif "Crear nueva lista" in item.title:
from platformcode import platformtools
nombre = platformtools.dialog_input("", "Introduce un nombre para la lista")
if nombre:
dict_priv = {0: 'Pública', 1: 'Privada'}
priv = platformtools.dialog_select("Privacidad de la lista", ['Pública', 'Privada'])
if priv != -1:
url = host + "/data.php?mode=create_list&apikey=%s&sid=%s" % (apikey, sid)
post = "name=%s&private=%s" % (nombre, priv)
data = httptools.downloadpage(url, post)
platformtools.dialog_notification("Lista creada correctamente",
"Nombre: %s - %s" % (nombre, dict_priv[priv]))
platformtools.itemlist_refresh()
return
elif re.search(r"(?i)Seguir Lista", item.title):
from platformcode import platformtools
data = httptools.downloadpage(item.url)
platformtools.dialog_notification("Operación realizada con éxito", "Lista: %s" % item.lista)
return
elif item.post:
from platformcode import platformtools
data = httptools.downloadpage(item.url, item.post).data
platformtools.dialog_notification("Ficha añadida a la lista", "Lista: %s" % item.title)
platformtools.itemlist_refresh()
return
data = httptools.downloadpage("https://playmax.mx/tusfichas.php").data
data = re.sub(r"\n|\r|\t|\s{2}|&nbsp;|<br>", "", data)
bloque = scrapertools.find_single_match(data, item.url + '">(.*?)(?:<div class="tf_blocks|<div class="tf_o_move">)')
matches = scrapertools.find_multiple_matches(bloque, '<div class="tf_menu_mini">([^<]+)<(.*?)<cb></cb></div>')
for category, contenido in matches:
itemlist.append(item.clone(action="", title=category, text_color=color3))
patron = '<div class="c_fichas_image"[^>]*>[^<]*<[^>]+href="\.([^"]+)".*?src="([^"]+)".*?serie="([^"]*)".*?' \
'<div class="c_fichas_title">(?:<div class="c_fichas_episode">([^<]+)</div>|)([^<]+)</div>'
entradas = scrapertools.find_multiple_matches(contenido, patron)
for scrapedurl, scrapedthumbnail, serie, episodio, scrapedtitle in entradas:
tipo = "movie"
scrapedurl = host + scrapedurl
scrapedthumbnail = host + scrapedthumbnail
action = "findvideos"
if __menu_info__:
action = "menu_info"
if serie:
tipo = "tvshow"
if episodio:
title = " %s - %s" % (episodio.replace("X", "x"), scrapedtitle)
else:
title = " " + scrapedtitle
new_item = Item(channel=item.channel, action=action, title=title, url=scrapedurl,
thumbnail=scrapedthumbnail, contentTitle=scrapedtitle, contentType=tipo,
text_color=color2)
if new_item.contentType == "tvshow":
new_item.show = scrapedtitle
if not __menu_info__:
new_item.action = "episodios"
itemlist.append(new_item)
return itemlist
def marcar(item):
logger.info()
if "Capítulo" in item.title:
url = "%s/data.php?mode=capitulo_visto&apikey=%s&sid=%s&c_id=%s" % (host, apikey, sid, item.epi_id)
message = item.title.replace("no", "marcado como").replace("ya", "cambiado a no").replace(" ¿Cambiar?", "")
elif "temporada" in item.title.lower():
type_marcado = "1"
if "como vista" in item.title:
message = "Temporada %s marcada como vista" % item.season
else:
type_marcado = "2"
message = "Temporada %s marcada como no vista" % item.season
url = "%s/data.php?mode=temporada_vista&apikey=%s&sid=%s&ficha=%s&t_id=%s&type=%s" \
% (host, apikey, sid, item.ficha, item.season, type_marcado)
else:
message = item.title.replace("Marcar ", "Marcada ").replace("Seguir serie", "Serie en seguimiento")
if "favorita" in item.title:
url = "%s/data.php?mode=marcar_ficha&apikey=%s&sid=%s&ficha=%s&tipo=%s" \
% (host, apikey, sid, item.ficha, "3")
elif "pendiente" in item.title:
url = "%s/data.php?mode=marcar_ficha&apikey=%s&sid=%s&ficha=%s&tipo=%s" \
% (host, apikey, sid, item.ficha, "2")
elif "vista" in item.title:
url = "%s/data.php?mode=marcar_ficha&apikey=%s&sid=%s&ficha=%s&tipo=%s" \
% (host, apikey, sid, item.ficha, "4")
elif "Seguir" in item.title:
url = "%s/data.php?mode=marcar_ficha&apikey=%s&sid=%s&ficha=%s&tipo=%s" \
% (host, apikey, sid, item.ficha, "2")
data = httptools.downloadpage(url)
url = "%s/data.php?mode=marcar_ficha&apikey=%s&sid=%s&ficha=%s&tipo=%s" \
% (host, apikey, sid, item.ficha, "1")
data = httptools.downloadpage(url)
if data.sucess and config.get_platform() != "plex" and item.action != "play":
from platformcode import platformtools
platformtools.dialog_notification("Acción correcta", message)
def listas(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
data = xml2dict(data)
if item.extra == "listas":
itemlist.append(Item(channel=item.channel, title="Listas más seguidas", action="listas", text_color=color1,
url=item.url + "&orden=1", extra="listas_plus"))
itemlist.append(Item(channel=item.channel, title="Listas con más fichas", action="listas", text_color=color1,
url=item.url + "&orden=2", extra="listas_plus"))
itemlist.append(Item(channel=item.channel, title="Listas aleatorias", action="listas", text_color=color1,
url=item.url + "&orden=3", extra="listas_plus"))
if data["Data"]["ListasSiguiendo"] != "\t":
itemlist.append(Item(channel=item.channel, title="Listas que sigo", action="listas", text_color=color1,
url=item.url, extra="sigo"))
if data["Data"]["TusListas"] != "\t":
itemlist.append(Item(channel=item.channel, title="Mis listas", action="listas", text_color=color1,
url=item.url, extra="mislistas"))
return itemlist
elif item.extra == "sigo":
data = data["Data"]["ListasSiguiendo"]["Item"]
elif item.extra == "mislistas":
data = data["Data"]["TusListas"]["Item"]
else:
data = data["Data"]["Listas"]["Item"]
if type(data) is not list:
data = [data]
import random
for child in data:
image = ""
title = "%s (%s fichas)" % (child["Title"], child["FichasInList"])
images = []
for i in range(1, 5):
if "sinimagen.png" not in child["Poster%s" % i]:
images.append(child["Poster%s" % i].replace("/100/", "/400/"))
if images:
image = images[random.randint(0, len(images) - 1)]
url = host + "/l%s" % child["Id"]
itemlist.append(Item(channel=item.channel, action="fichas", url=url, text_color=color3,
thumbnail=image, title=title, extra=item.extra))
if len(itemlist) == 20:
start = scrapertools.find_single_match(item.url, 'start=(\d+)')
end = int(start) + 20
url = re.sub(r'start=%s' % start, 'start=%s' % end, item.url)
itemlist.append(item.clone(title=">> Página Siguiente", url=url))
return itemlist
def play(item):
logger.info()
from core import servertools
devuelve = servertools.findvideos(item.url, True)
if devuelve:
item.url = devuelve[0][1]
item.server = devuelve[0][2]
if config.get_setting("mark_play", "playmax"):
if item.contentType == "movie":
marcar(item.clone(title="marcar como vista"))
else:
marcar(item.clone(title="Capítulo", epi_id=item.cid))
return [item]
def select_page(item):
import xbmcgui
dialog = xbmcgui.Dialog()
number = dialog.numeric(0, "Introduce el número de página")
if number != "":
number = int(number) * 60
item.url = re.sub(r'start=(\d+)', "start=%s" % number, item.url)
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.
"""
import sys
parse = globals().get(sys._getframe().f_code.co_name)
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 -1
View File
@@ -13,7 +13,6 @@ from platformcode import config, logger
from channels import autoplay from channels import autoplay
HOST = "https://seriesblanco.com/" HOST = "https://seriesblanco.com/"
IDIOMAS = {'es': 'Español', 'en': 'Inglés', 'la': 'Latino', 'vo': 'VO', 'vos': 'VOS', 'vosi': 'VOSI', 'otro': 'OVOS'} IDIOMAS = {'es': 'Español', 'en': 'Inglés', 'la': 'Latino', 'vo': 'VO', 'vos': 'VOS', 'vosi': 'VOSI', 'otro': 'OVOS'}
list_idiomas = IDIOMAS.values() list_idiomas = IDIOMAS.values()
@@ -97,6 +96,7 @@ def extract_series_from_data(item, data):
except UnicodeError: except UnicodeError:
name = unicode(name, "iso-8859-1", errors="replace").encode("utf-8") name = unicode(name, "iso-8859-1", errors="replace").encode("utf-8")
name = name.strip()
# logger.debug("Show found: %s -> %s (%s)" % (name, url, img)) # logger.debug("Show found: %s -> %s (%s)" % (name, url, img))
if not episode_pattern.search(url): if not episode_pattern.search(url):
action = "episodios" action = "episodios"
@@ -187,6 +187,7 @@ def search(item, texto):
"id=['\"]q2[1\"] name=['\"]q2['\"] value=['\"](?P<title>.*?)['\"]", data) "id=['\"]q2[1\"] name=['\"]q2['\"] value=['\"](?P<title>.*?)['\"]", data)
for url, img, title in shows: for url, img, title in shows:
title = title.strip()
itemlist.append(item.clone(title=title, url=urlparse.urljoin(HOST, url), action="episodios", show=title, itemlist.append(item.clone(title=title, url=urlparse.urljoin(HOST, url), action="episodios", show=title,
thumbnail=img, context=filtertools.context(item, list_idiomas, CALIDADES))) thumbnail=img, context=filtertools.context(item, list_idiomas, CALIDADES)))
+16 -16
View File
@@ -754,7 +754,7 @@ class Tmdb(object):
self.texto_buscado = kwargs.get('texto_buscado', '') self.texto_buscado = kwargs.get('texto_buscado', '')
self.busqueda_id = kwargs.get('id_Tmdb', '') self.busqueda_id = kwargs.get('id_Tmdb', '')
self.busqueda_texto = re.sub('\[\\\?(B|I|COLOR)\s?[^\]]*\]', '', self.texto_buscado) self.busqueda_texto = re.sub('\[\\\?(B|I|COLOR)\s?[^\]]*\]', '', self.texto_buscado).strip()
self.busqueda_tipo = kwargs.get('tipo', '') self.busqueda_tipo = kwargs.get('tipo', '')
self.busqueda_idioma = kwargs.get('idioma_busqueda', 'es') self.busqueda_idioma = kwargs.get('idioma_busqueda', 'es')
self.busqueda_include_adult = kwargs.get('include_adult', False) self.busqueda_include_adult = kwargs.get('include_adult', False)
@@ -839,7 +839,7 @@ class Tmdb(object):
if tipo not in cls.dic_generos[idioma]: if tipo not in cls.dic_generos[idioma]:
cls.dic_generos[idioma][tipo] = {} cls.dic_generos[idioma][tipo] = {}
url = ('http://api.themoviedb.org/3/genre/%s/list?api_key=6889f6089877fd092454d00edb44a84d&language=%s' url = ('http://api.themoviedb.org/3/genre/%s/list?api_key=a1ab8b8669da03637a4b98fa39c39228&language=%s'
% (tipo, idioma)) % (tipo, idioma))
try: try:
logger.info("[Tmdb.py] Rellenando dicionario de generos") logger.info("[Tmdb.py] Rellenando dicionario de generos")
@@ -856,17 +856,17 @@ class Tmdb(object):
if self.busqueda_id: if self.busqueda_id:
if source == "tmdb": if source == "tmdb":
# http://api.themoviedb.org/3/movie/1924?api_key=6889f6089877fd092454d00edb44a84d&language=es # http://api.themoviedb.org/3/movie/1924?api_key=a1ab8b8669da03637a4b98fa39c39228&language=es
# &append_to_response=images,videos,external_ids,credits&include_image_language=es,null # &append_to_response=images,videos,external_ids,credits&include_image_language=es,null
# http://api.themoviedb.org/3/tv/1407?api_key=6889f6089877fd092454d00edb44a84d&language=es # http://api.themoviedb.org/3/tv/1407?api_key=a1ab8b8669da03637a4b98fa39c39228&language=es
# &append_to_response=images,videos,external_ids,credits&include_image_language=es,null # &append_to_response=images,videos,external_ids,credits&include_image_language=es,null
url = ('http://api.themoviedb.org/3/%s/%s?api_key=6889f6089877fd092454d00edb44a84d&language=%s' url = ('http://api.themoviedb.org/3/%s/%s?api_key=a1ab8b8669da03637a4b98fa39c39228&language=%s'
'&append_to_response=images,videos,external_ids,credits&include_image_language=%s,null' % '&append_to_response=images,videos,external_ids,credits&include_image_language=%s,null' %
(self.busqueda_tipo, self.busqueda_id, self.busqueda_idioma, self.busqueda_idioma)) (self.busqueda_tipo, self.busqueda_id, self.busqueda_idioma, self.busqueda_idioma))
buscando = "id_Tmdb: %s" % self.busqueda_id buscando = "id_Tmdb: %s" % self.busqueda_id
else: else:
# http://api.themoviedb.org/3/find/%s?external_source=imdb_id&api_key=6889f6089877fd092454d00edb44a84d # http://api.themoviedb.org/3/find/%s?external_source=imdb_id&api_key=a1ab8b8669da03637a4b98fa39c39228
url = ('http://api.themoviedb.org/3/find/%s?external_source=%s&api_key=6889f6089877fd092454d00edb44a84d' url = ('http://api.themoviedb.org/3/find/%s?external_source=%s&api_key=a1ab8b8669da03637a4b98fa39c39228'
'&language=%s' % (self.busqueda_id, source, self.busqueda_idioma)) '&language=%s' % (self.busqueda_id, source, self.busqueda_idioma))
buscando = "%s: %s" % (source.capitalize(), self.busqueda_id) buscando = "%s: %s" % (source.capitalize(), self.busqueda_id)
@@ -898,9 +898,9 @@ class Tmdb(object):
buscando = "" buscando = ""
if self.busqueda_texto: if self.busqueda_texto:
# http://api.themoviedb.org/3/search/movie?api_key=6889f6089877fd092454d00edb44a84d&query=superman&language=es # http://api.themoviedb.org/3/search/movie?api_key=a1ab8b8669da03637a4b98fa39c39228&query=superman&language=es
# &include_adult=false&page=1 # &include_adult=false&page=1
url = ('http://api.themoviedb.org/3/search/%s?api_key=6889f6089877fd092454d00edb44a84d&query=%s&language=%s' url = ('http://api.themoviedb.org/3/search/%s?api_key=a1ab8b8669da03637a4b98fa39c39228&query=%s&language=%s'
'&include_adult=%s&page=%s' % (self.busqueda_tipo, self.busqueda_texto.replace(' ', '%20'), '&include_adult=%s&page=%s' % (self.busqueda_tipo, self.busqueda_texto.replace(' ', '%20'),
self.busqueda_idioma, self.busqueda_include_adult, page)) self.busqueda_idioma, self.busqueda_include_adult, page))
@@ -961,8 +961,8 @@ class Tmdb(object):
for key, value in self.discover.items(): for key, value in self.discover.items():
if key != "url": if key != "url":
params.append(key + "=" + str(value)) params.append(key + "=" + str(value))
# http://api.themoviedb.org/3/discover/movie?api_key=6889f6089877fd092454d00edb44a84d&query=superman&language=es # http://api.themoviedb.org/3/discover/movie?api_key=a1ab8b8669da03637a4b98fa39c39228&query=superman&language=es
url = ('http://api.themoviedb.org/3/%s?api_key=6889f6089877fd092454d00edb44a84d&%s' url = ('http://api.themoviedb.org/3/%s?api_key=a1ab8b8669da03637a4b98fa39c39228&%s'
% (type_search, "&".join(params))) % (type_search, "&".join(params)))
logger.info("[Tmdb.py] Buscando %s:\n%s" % (type_search, url)) logger.info("[Tmdb.py] Buscando %s:\n%s" % (type_search, url))
@@ -1116,7 +1116,7 @@ class Tmdb(object):
else: else:
self.busqueda_idioma = self.result['original_language'] self.busqueda_idioma = self.result['original_language']
url = ('http://api.themoviedb.org/3/%s/%s?api_key=6889f6089877fd092454d00edb44a84d&language=%s' % url = ('http://api.themoviedb.org/3/%s/%s?api_key=a1ab8b8669da03637a4b98fa39c39228&language=%s' %
(self.busqueda_tipo, self.busqueda_id, self.busqueda_idioma)) (self.busqueda_tipo, self.busqueda_id, self.busqueda_idioma))
resultado = self.get_json(url) resultado = self.get_json(url)
@@ -1243,9 +1243,9 @@ class Tmdb(object):
if not self.temporada.get(numtemporada, {}): if not self.temporada.get(numtemporada, {}):
# Si no hay datos sobre la temporada solicitada, consultar en la web # Si no hay datos sobre la temporada solicitada, consultar en la web
# http://api.themoviedb.org/3/tv/1407/season/1?api_key=6889f6089877fd092454d00edb44a84d&language=es& # http://api.themoviedb.org/3/tv/1407/season/1?api_key=a1ab8b8669da03637a4b98fa39c39228&language=es&
# append_to_response=credits # append_to_response=credits
url = "http://api.themoviedb.org/3/tv/%s/season/%s?api_key=6889f6089877fd092454d00edb44a84d&language=%s" \ url = "http://api.themoviedb.org/3/tv/%s/season/%s?api_key=a1ab8b8669da03637a4b98fa39c39228&language=%s" \
"&append_to_response=credits" % (self.result["id"], numtemporada, self.busqueda_idioma) "&append_to_response=credits" % (self.result["id"], numtemporada, self.busqueda_idioma)
buscando = "id_Tmdb: " + str(self.result["id"]) + " temporada: " + str(numtemporada) + "\nURL: " + url buscando = "id_Tmdb: " + str(self.result["id"]) + " temporada: " + str(numtemporada) + "\nURL: " + url
@@ -1361,7 +1361,7 @@ class Tmdb(object):
self.result["videos"] = self.result["videos"]['results'] self.result["videos"] = self.result["videos"]['results']
else: else:
# Primera búsqueda de videos en el idioma de busqueda # Primera búsqueda de videos en el idioma de busqueda
url = "http://api.themoviedb.org/3/%s/%s/videos?api_key=6889f6089877fd092454d00edb44a84d&language=%s" \ url = "http://api.themoviedb.org/3/%s/%s/videos?api_key=a1ab8b8669da03637a4b98fa39c39228&language=%s" \
% (self.busqueda_tipo, self.result['id'], self.busqueda_idioma) % (self.busqueda_tipo, self.result['id'], self.busqueda_idioma)
dict_videos = self.get_json(url) dict_videos = self.get_json(url)
@@ -1372,7 +1372,7 @@ class Tmdb(object):
# Si el idioma de busqueda no es ingles, hacer una segunda búsqueda de videos en inglés # Si el idioma de busqueda no es ingles, hacer una segunda búsqueda de videos en inglés
if self.busqueda_idioma != 'en': if self.busqueda_idioma != 'en':
url = "http://api.themoviedb.org/3/%s/%s/videos?api_key=6889f6089877fd092454d00edb44a84d" \ url = "http://api.themoviedb.org/3/%s/%s/videos?api_key=a1ab8b8669da03637a4b98fa39c39228" \
% (self.busqueda_tipo, self.result['id']) % (self.busqueda_tipo, self.result['id'])
dict_videos = self.get_json(url) dict_videos = self.get_json(url)
@@ -135,7 +135,7 @@ def render_items(itemlist, parent_item):
if item.fanart: if item.fanart:
fanart = item.fanart fanart = item.fanart
else: else:
fanart = os.path.join(config.get_runtime_path(), "fanart1.jpg") fanart = os.path.join(config.get_runtime_path(), "fanart.jpg")
# Creamos el listitem # Creamos el listitem
listitem = xbmcgui.ListItem(item.title) listitem = xbmcgui.ListItem(item.title)
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB