Files
addon/plugin.video.alfa/channels/pepecine.py
2017-09-12 14:28:58 -03:00

394 lines
17 KiB
Python
Executable File

# -*- coding: utf-8 -*-
import re
import urlparse
from core import httptools
from core import jsontools
from core import scrapertools
from core import servertools
from core import tmdb
from core.item import Item, InfoLabels
from platformcode import config, logger
__url_base__ = "http://pepecine.net"
__chanel__ = "pepecine"
fanart_host = "https://d12.usercdn.com/i/02278/u875vjx9c0xs.png"
def mainlist(item):
logger.info()
itemlist = []
url_peliculas = urlparse.urljoin(__url_base__, "plugins/ultimas-peliculas-updated.php")
itemlist.append(
Item(channel=__chanel__, title="Películas", text_color="0xFFEB7600", text_bold=True, fanart=fanart_host,
thumbnail="https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/movies.png"))
itemlist.append(Item(channel=__chanel__, action="listado", title=" Novedades", page=0, viewcontent="movies",
text_color="0xFFEB7600", extra="movie", fanart=fanart_host, url=url_peliculas,
thumbnail="https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/movies.png"))
itemlist.append(Item(channel=__chanel__, action="sub_filtrar", title=" Filtrar películas por género",
text_color="0xFFEB7600", extra="movie", fanart=fanart_host, url=url_peliculas,
thumbnail="https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/movies_filtrar.png"))
itemlist.append(Item(channel=__chanel__, action="search", title=" Buscar películas por título",
text_color="0xFFEB7600", extra="movie", fanart=fanart_host, url=url_peliculas,
thumbnail="https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/movies_buscar.png"))
url_series = urlparse.urljoin(__url_base__, "plugins/series-episodios-updated.php")
itemlist.append(
Item(channel=__chanel__, title="Series", text_color="0xFFEB7600", text_bold=True, fanart=fanart_host,
thumbnail="https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/tv.png"))
itemlist.append(Item(channel=__chanel__, action="listado", title=" Novedades", page=0, viewcontent="tvshows",
text_color="0xFFEB7600", extra="series", fanart=fanart_host, url=url_series,
thumbnail="https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/tv.png"))
itemlist.append(Item(channel=__chanel__, action="sub_filtrar", title=" Filtrar series por género",
text_color="0xFFEB7600", extra="series", fanart=fanart_host, url=url_series,
thumbnail="https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/tv_filtrar.png"))
itemlist.append(Item(channel=__chanel__, action="search", title=" Buscar series por título",
text_color="0xFFEB7600", extra="series", fanart=fanart_host, url=url_series,
thumbnail="https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/tv_buscar.png"))
itemlist.append(Item(channel=__chanel__, action="listado", title=" Ultimos episodios actualizados",
text_color="0xFFEB7600", extra="series_novedades", fanart=fanart_host,
url=urlparse.urljoin(__url_base__, "plugins/ultimos-capitulos-updated.php"),
thumbnail="https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/tv.png"))
return itemlist
def sub_filtrar(item):
logger.info()
itemlist = []
generos = ("acción", "animación", "aventura", "ciencia ficción", "comedia", "crimen",
"documental", "drama", "familia", "fantasía", "guerra", "historia", "misterio",
"música", "musical", "romance", "terror", "thriller", "western")
thumbnail = ('https://d12.usercdn.com/i/02278/spvnq8hghtok.jpg',
'https://d12.usercdn.com/i/02278/olhbpe7phjas.jpg',
'https://d12.usercdn.com/i/02278/8xm23q2vewtt.jpg',
'https://d12.usercdn.com/i/02278/o4vuvd7q4bau.jpg',
'https://d12.usercdn.com/i/02278/v7xq7k9bj3dh.jpg',
'https://d12.usercdn.com/i/02278/yo5uj9ff7jmg.jpg',
'https://d12.usercdn.com/i/02278/ipeodwh6vw6t.jpg',
'https://d12.usercdn.com/i/02278/0c0ra1wb11ro.jpg',
'https://d12.usercdn.com/i/02278/zn85t6f2oxdv.jpg',
'https://d12.usercdn.com/i/02278/ipk94gsdqzwa.jpg',
'https://d12.usercdn.com/i/02278/z5hsi6fr4yri.jpg',
'https://d12.usercdn.com/i/02278/nq0jvyp7vlb9.jpg',
'https://d12.usercdn.com/i/02278/tkbe7p3rjmps.jpg',
'https://d12.usercdn.com/i/02278/is60ge4zv1ve.jpg',
'https://d12.usercdn.com/i/02278/86ubk310hgn8.jpg',
'https://d12.usercdn.com/i/02278/ph1gfpgtljf7.jpg',
'https://d12.usercdn.com/i/02278/bzp3t2edgorg.jpg',
'https://d12.usercdn.com/i/02278/31i1xkd8m30b.jpg',
'https://d12.usercdn.com/i/02278/af05ulgs20uf.jpg')
if item.extra == "movie":
viewcontent = "movies"
else:
viewcontent = "tvshows"
for g, t in zip(generos, thumbnail):
itemlist.append(item.clone(action="listado", title=g.capitalize(), filtro=("genero", g), thumbnail=t,
viewcontent=viewcontent))
return itemlist
def search(item, texto):
logger.info("search:" + texto)
# texto = texto.replace(" ", "+")
item.filtro = ("search", texto.lower())
try:
return listado(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):
itemlist = []
item = Item()
try:
if categoria == 'peliculas':
item.url = urlparse.urljoin(__url_base__, "plugins/ultimas-peliculas-updated.php")
item.extra = "movie"
elif categoria == 'infantiles':
item.url = urlparse.urljoin(__url_base__, "plugins/ultimas-peliculas-updated.php")
item.filtro = ("genero", "animación")
item.extra = "movie"
elif categoria == 'series':
item.url = urlparse.urljoin(__url_base__, "plugins/ultimos-capitulos-updated.php")
item.extra = "series_novedades"
else:
return []
item.action = "listado"
itemlist = listado(item)
if itemlist[-1].action == "listado":
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 listado(item):
logger.info()
itemlist = []
try:
data_dict = jsontools.load(httptools.downloadpage(item.url).data)
except:
return itemlist # Devolvemos lista vacia
# Filtrado y busqueda
if item.filtro:
for i in data_dict["result"][:]:
if (item.filtro[0] == "genero" and item.filtro[1] not in i['genre'].lower()) or \
(item.filtro[0] == "search" and item.filtro[1] not in i['title'].lower()):
data_dict["result"].remove(i)
if not item.page:
item.page = 0
offset = int(item.page) * 30
limit = offset + 30
for i in data_dict["result"][offset:limit]:
infoLabels = InfoLabels()
idioma = ''
if item.extra == "movie":
action = "findvideos"
# viewcontent = 'movies'
infoLabels["title"] = i["title"]
title = '%s (%s)' % (i["title"], i['year'])
url = urlparse.urljoin(__url_base__, "ver-pelicula-online/" + str(i["id"]))
elif item.extra == "series":
action = "get_temporadas"
# viewcontent = 'seasons'
title = i["title"]
infoLabels['tvshowtitle'] = i["title"]
url = urlparse.urljoin(__url_base__, "episodio-online/" + str(i["id"]))
else: # item.extra=="series_novedades":
action = "findvideos"
# viewcontent = 'episodes'
infoLabels['tvshowtitle'] = i["title"]
infoLabels['season'] = i['season']
infoLabels['episode'] = i['episode'].zfill(2)
flag = scrapertools.find_single_match(i["label"], '(\s*\<img src=.*\>)')
idioma = i["label"].replace(flag, "")
title = '%s %sx%s (%s)' % (i["title"], infoLabels["season"], infoLabels["episode"], idioma)
url = urlparse.urljoin(__url_base__, "episodio-online/" + str(i["id"]))
if i.has_key("poster") and i["poster"]:
thumbnail = re.compile("/w\d{3}/").sub("/w500/", i["poster"])
else:
thumbnail = item.thumbnail
if i.has_key("background") and i["background"]:
fanart = i["background"]
else:
fanart = item.fanart
# Rellenamos el diccionario de infoLabels
infoLabels['title_id'] = i['id'] # title_id: identificador de la pelicula/serie en pepecine.com
if i['genre']: infoLabels['genre'] = i['genre']
if i['year']: infoLabels['year'] = i['year']
# if i['tagline']: infoLabels['plotoutline']=i['tagline']
if i['plot']:
infoLabels['plot'] = i['plot']
else:
infoLabels['plot'] = ""
if i['runtime']: infoLabels['duration'] = int(i['runtime']) * 60
if i['imdb_rating']:
infoLabels['rating'] = i['imdb_rating']
elif i['tmdb_rating']:
infoLabels['rating'] = i['tmdb_rating']
if i['tmdb_id']: infoLabels['tmdb_id'] = i['tmdb_id']
if i['imdb_id']: infoLabels['imdb_id'] = i['imdb_id']
newItem = Item(channel=item.channel, action=action, title=title, url=url, extra=item.extra,
fanart=fanart, thumbnail=thumbnail, viewmode="movie_with_plot", # viewcontent=viewcontent,
language=idioma, text_color="0xFFFFCE9C", infoLabels=infoLabels)
newItem.year = i['year']
newItem.contentTitle = i['title']
if 'season' in infoLabels and infoLabels['season']:
newItem.contentSeason = infoLabels['season']
if 'episode' in infoLabels and infoLabels['episode']:
newItem.contentEpisodeNumber = infoLabels['episode']
itemlist.append(newItem)
# Obtenemos los datos basicos mediante multihilos
tmdb.set_infoLabels(itemlist)
# Paginacion
if len(data_dict["result"]) > limit:
itemlist.append(item.clone(text_color="0xFF994D00", title=">> Pagina siguiente >>", page=item.page + 1))
return itemlist
def get_temporadas(item):
logger.info()
itemlist = []
infoLabels = {}
data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data)
patron = 'vars.title =(.*?)};'
try:
data_dict = jsontools.load(scrapertools.get_match(data, patron) + '}')
except:
return itemlist # Devolvemos lista vacia
if item.extra == "serie_add":
itemlist = get_episodios(item)
else:
if len(data_dict["season"]) == 1:
# Si solo hay una temporada ...
item.infoLabels['season'] = data_dict["season"][0]["number"]
itemlist = get_episodios(item)
else: # ... o si hay mas de una temporada
item.viewcontent = "seasons"
data_dict["season"].sort(key=lambda x: (x['number'])) # ordenamos por numero de temporada
for season in data_dict["season"]:
# filtramos enlaces por temporada
enlaces = filter(lambda l: l["season"] == season['number'], data_dict["link"])
if enlaces:
item.infoLabels['season'] = season['number']
title = '%s Temporada %s' % (item.title, season['number'])
itemlist.append(item.clone(action="get_episodios", title=title,
text_color="0xFFFFCE9C", viewmode="movie_with_plot"))
# Obtenemos los datos de todas las temporadas mediante multihilos
tmdb.set_infoLabels(itemlist)
if config.get_videolibrary_support() and itemlist:
infoLabels = {'tmdb_id': item.infoLabels['tmdb_id'], 'tvdb_id': item.infoLabels['tvdb_id'],
'imdb_id': item.infoLabels['imdb_id']}
itemlist.append(
Item(channel=item.channel, title="Añadir esta serie a la videoteca", text_color="0xFFe5ffcc",
action="add_serie_to_library", extra='get_episodios###serie_add', url=item.url,
contentSerieName=data_dict["title"], infoLabels=infoLabels,
thumbnail='https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/tv.png'))
return itemlist
def get_episodios(item):
logger.info()
itemlist = []
# infoLabels = item.infoLabels
data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data)
patron = 'vars.title =(.*?)};'
try:
data_dict = jsontools.load(scrapertools.get_match(data, patron) + '}')
except:
return itemlist # Devolvemos lista vacia
# Agrupar enlaces por episodios temXcap
temXcap_dict = {}
for link in data_dict['link']:
try:
season = str(int(link['season']))
episode = str(int(link['episode'])).zfill(2)
except:
continue
if int(season) != item.infoLabels["season"] and item.extra != "serie_add":
# Descartamos episodios de otras temporadas, excepto si los queremos todos
continue
title_id = link['title_id']
id = season + "x" + episode
if id in temXcap_dict:
l = temXcap_dict[id]
l.append(link)
temXcap_dict[id] = l
else:
temXcap_dict[id] = [link]
# Ordenar lista de enlaces por temporada y capitulo
temXcap_list = temXcap_dict.items()
temXcap_list.sort(key=lambda x: (int(x[0].split("x")[0]), int(x[0].split("x")[1])))
for episodio in temXcap_list:
title = '%s (%s)' % (item.contentSerieName, episodio[0])
item.infoLabels['season'], item.infoLabels['episode'] = episodio[0].split('x')
itemlist.append(item.clone(action="findvideos", title=title,
viewmode="movie_with_plot", text_color="0xFFFFCE9C"))
if item.extra != "serie_add":
# Obtenemos los datos de todos los capitulos de la temporada mediante multihilos
tmdb.set_infoLabels(itemlist)
for i in itemlist:
# Si el capitulo tiene nombre propio añadirselo al titulo del item
title = "%s: %s" % (i.title, i.infoLabels['title'])
i.title = title
return itemlist
def findvideos(item):
logger.info()
itemlist = []
data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data)
patron = 'vars.title =(.*?)};'
try:
data_dict = jsontools.load(scrapertools.get_match(data, patron) + '}')
except:
return itemlist # Devolvemos lista vacia
for link in data_dict["link"]:
if item.contentType == 'episode' \
and (item.contentSeason != link['season'] or item.contentEpisodeNumber != link['episode']):
# Si buscamos enlaces de un episodio descartamos los q no sean de este episodio
continue
url = link["url"]
flag = scrapertools.find_single_match(link["label"], '(\s*\<img src=.*\>)')
idioma = link["label"].replace(flag, "")
if link["quality"] != "?":
calidad = (link["quality"])
else:
calidad = ""
itemlist.extend(servertools.find_video_items(data=url))
for videoitem in itemlist:
videoitem.channel = item.channel
videoitem.quality = calidad
videoitem.language = idioma
videoitem.contentTitle = item.title
itemlist = servertools.get_servers_itemlist(itemlist)
if config.get_videolibrary_support() and itemlist and item.contentType == "movie":
infoLabels = {'tmdb_id': item.infoLabels['tmdb_id'],
'title': item.infoLabels['title']}
itemlist.append(Item(channel=item.channel, title="Añadir esta película a la videoteca",
action="add_pelicula_to_library", url=item.url, infoLabels=infoLabels,
text_color="0xFFe5ffcc",
thumbnail='https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/tv.png'))
return itemlist
def episodios(item):
# Necesario para las actualizaciones automaticas
return get_temporadas(Item(channel=__chanel__, url=item.url, show=item.show, extra="serie_add"))