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

This commit is contained in:
unknown
2018-01-25 08:12:32 -03:00
11 changed files with 484 additions and 435 deletions
+5 -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="2.4.12" provider-name="Alfa Addon"> <addon id="plugin.video.alfa" name="Alfa" version="2.4.13" provider-name="Alfa Addon">
<requires> <requires>
<import addon="xbmc.python" version="2.1.0"/> <import addon="xbmc.python" version="2.1.0"/>
<import addon="script.module.libtorrent" optional="true"/> <import addon="script.module.libtorrent" optional="true"/>
@@ -19,12 +19,10 @@
</assets> </assets>
<news>[B]Estos son los cambios para esta versión:[/B] <news>[B]Estos son los cambios para esta versión:[/B]
[COLOR green][B]Canales agregados y arreglos[/B][/COLOR] [COLOR green][B]Canales agregados y arreglos[/B][/COLOR]
» plusdede » pelisgratis » plusdede » cinecalidad
» seriesblanco » anitoonstv » allpeliculas » serieslan
» openload » powvideo » pepecine » cinetux
» streamplay » clipwatching » novelashdgratis ¤ arreglos internos
» flashx ¤ arreglos internos
[COLOR green]Gracias a [B][COLOR yellow]danielr460[/COLOR][/B] por su colaboración en esta versión[/COLOR]
</news> </news>
<description lang="es">Navega con Kodi por páginas web para ver sus videos de manera fácil.</description> <description lang="es">Navega con Kodi por páginas web para ver sus videos de manera fácil.</description>
<summary lang="en">Browse web pages using Kodi</summary> <summary lang="en">Browse web pages using Kodi</summary>
+1 -2
View File
@@ -8,8 +8,7 @@
"banner": "allpeliculas.png", "banner": "allpeliculas.png",
"categories": [ "categories": [
"movie", "movie",
"vos", "vos"
"tvshow"
], ],
"settings": [ "settings": [
{ {
+23 -30
View File
@@ -79,19 +79,9 @@ def start(itemlist, item):
:return: intenta autoreproducir, en caso de fallar devuelve el itemlist que recibio en un principio :return: intenta autoreproducir, en caso de fallar devuelve el itemlist que recibio en un principio
''' '''
logger.info() logger.info()
for videoitem in itemlist: logger.debug('item inicial %s' % item)
#Nos dice de donde viene si del addon o videolibrary
if item.contentChannel=='videolibrary':
videoitem.contentEpisodeNumber=item.contentEpisodeNumber
videoitem.contentPlot=item.contentPlot
videoitem.contentSeason=item.contentSeason
videoitem.contentSerieName=item.contentSerieName
videoitem.contentTitle=item.contentTitle
videoitem.contentType=item.contentType
videoitem.episode_id=item.episode_id
#videoitem.infoLabels=item.infoLabels
videoitem.thumbnail=item.thumbnail
#videoitem.title=item.title
if not config.is_xbmc(): if not config.is_xbmc():
#platformtools.dialog_notification('AutoPlay ERROR', 'Sólo disponible para XBMC/Kodi') #platformtools.dialog_notification('AutoPlay ERROR', 'Sólo disponible para XBMC/Kodi')
return itemlist return itemlist
@@ -245,9 +235,10 @@ def start(itemlist, item):
platformtools.stop_video() platformtools.stop_video()
for autoplay_elem in autoplay_list: for autoplay_elem in autoplay_list:
play_item = Item
if not platformtools.is_playing() and not played: if not platformtools.is_playing() and not played:
videoitem = autoplay_elem['videoitem'] videoitem = autoplay_elem['videoitem']
logger.debug('videoitem %s' % videoitem)
if videoitem.server not in max_intentos_servers: if videoitem.server not in max_intentos_servers:
max_intentos_servers[videoitem.server] = max_intentos max_intentos_servers[videoitem.server] = max_intentos
@@ -274,24 +265,23 @@ def start(itemlist, item):
else: else:
videoitem = resolved_item[0] videoitem = resolved_item[0]
# si no directamente reproduce y marca como visto # Si no directamente reproduce y marca como visto
videoitem.contentChannel='videolibrary'
import importlib # Verifica si el item viene de la videoteca
actual_server="servers."+videoitem.server
i = importlib.import_module(actual_server)
#from servers import streamango
try: try:
testv=i.test_video_exists(videoitem.url) if item.contentChannel =='videolibrary':
logger.info(testv) # Marca como visto
from platformcode import xbmc_videolibrary
xbmc_videolibrary.mark_auto_as_watched(item)
# Rellena el video con los datos del item principal y reproduce
play_item = item.clone(url=videoitem)
platformtools.play_video(play_item.url, autoplay=True)
else:
# Si no viene de la videoteca solo reproduce
platformtools.play_video(videoitem, autoplay=True)
except: except:
testv=(True,'') pass
logger.debug("La funcion no existe en el conector "+videoitem.server)
testvideo=list(testv)
if testvideo[0]==True:
from platformcode import xbmc_videolibrary
xbmc_videolibrary.mark_auto_as_watched(item)
#platformtools.play_video(videoitem)
launcher.run(videoitem)
try: try:
if platformtools.is_playing(): if platformtools.is_playing():
@@ -310,6 +300,9 @@ def start(itemlist, item):
if not platformtools.dialog_yesno("AutoPlay", text, if not platformtools.dialog_yesno("AutoPlay", text,
"¿Desea ignorar todos los enlaces de este servidor?"): "¿Desea ignorar todos los enlaces de este servidor?"):
max_intentos_servers[videoitem.server] = max_intentos max_intentos_servers[videoitem.server] = max_intentos
logger.debug('elem: %s list %s' % (autoplay_list.index(autoplay_elem),autoplay_list[-1]))
if autoplay_elem == autoplay_list[-1]:
platformtools.dialog_notification('AutoPlay', 'No hubo enlaces funcionales')
else: else:
platformtools.dialog_notification('AutoPlay No Fue Posible', 'No Hubo Coincidencias') platformtools.dialog_notification('AutoPlay No Fue Posible', 'No Hubo Coincidencias')
+2 -2
View File
@@ -272,7 +272,7 @@ def findvideos(item):
"http://filescdn.com/": "filescdn", "http://filescdn.com/": "filescdn",
"https://www.yourupload.com/watch/": "yourupload", "https://www.yourupload.com/watch/": "yourupload",
"http://www.cinecalidad.to/protect/gdredirect.php?l=": "directo", "http://www.cinecalidad.to/protect/gdredirect.php?l=": "directo",
"https://openload.co/embed/": "openload" "https://openload.co/embed/": "openload",
} }
logger.info() logger.info()
@@ -298,7 +298,7 @@ def findvideos(item):
server = server_id.lower() server = server_id.lower()
thumbnail = item.thumbnail thumbnail = item.thumbnail
if server_id == 'TVM': if server_id == 'TVM':
server = 'thevideo.me' server = 'thevideome'
url = server_url[server_id] + video_id + '.html' url = server_url[server_id] + video_id + '.html'
else: else:
url = server_url[server_id] + video_id url = server_url[server_id] + video_id
+4 -26
View File
@@ -27,7 +27,6 @@ def mainlist(item):
logger.info() logger.info()
itemlist = [] itemlist = []
item.viewmode = viewmode item.viewmode = viewmode
data = httptools.downloadpage(CHANNEL_HOST + "pelicula").data data = httptools.downloadpage(CHANNEL_HOST + "pelicula").data
total = scrapertools.find_single_match(data, "Películas</h1><span>(.*?)</span>") total = scrapertools.find_single_match(data, "Películas</h1><span>(.*?)</span>")
titulo = "Peliculas (%s)" %total titulo = "Peliculas (%s)" %total
@@ -56,7 +55,6 @@ def mainlist(item):
itemlist.append(item.clone(title="", action="")) itemlist.append(item.clone(title="", action=""))
itemlist.append(item.clone(action="search", title="Buscar...", text_color=color3)) itemlist.append(item.clone(action="search", title="Buscar...", text_color=color3))
itemlist.append(item.clone(action="configuracion", title="Configurar canal...", text_color="gold", folder=False)) itemlist.append(item.clone(action="configuracion", title="Configurar canal...", text_color="gold", folder=False))
return itemlist return itemlist
@@ -121,7 +119,6 @@ def newest(categoria):
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("{0}".format(line)) logger.error("{0}".format(line))
return [] return []
return itemlist return itemlist
@@ -129,7 +126,6 @@ def peliculas(item):
logger.info() logger.info()
itemlist = [] itemlist = []
item.text_color = color2 item.text_color = color2
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
patron = '(?s)class="(?:result-item|item movies)">.*?<img src="([^"]+)' patron = '(?s)class="(?:result-item|item movies)">.*?<img src="([^"]+)'
patron += '.*?alt="([^"]+)"' patron += '.*?alt="([^"]+)"'
@@ -162,7 +158,6 @@ def peliculas(item):
if next_page_link: if next_page_link:
itemlist.append(item.clone(action="peliculas", title=">> Página siguiente", url=next_page_link, itemlist.append(item.clone(action="peliculas", title=">> Página siguiente", url=next_page_link,
text_color=color3)) text_color=color3))
return itemlist return itemlist
@@ -170,15 +165,11 @@ def destacadas(item):
logger.info() logger.info()
itemlist = [] itemlist = []
item.text_color = color2 item.text_color = color2
# Descarga la página
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
bloque = scrapertools.find_single_match(data, 'peliculas_destacadas.*?class="letter_home"')
# Extrae las entradas (carpetas) patron = '(?s)title="([^"]+)".*?'
bloque = scrapertools.find_single_match(data, 'peliculas_destacadas.*?class="single-page') patron += 'href="([^"]+)".*?'
patron = '(?s)title="([^"]+)"' patron += 'src="([^"]+)'
patron += '.href="([^"]+)"'
patron += '.*?src="([^"]+)'
matches = scrapertools.find_multiple_matches(bloque, patron) matches = scrapertools.find_multiple_matches(bloque, patron)
for scrapedtitle, scrapedurl, scrapedthumbnail in matches: for scrapedtitle, scrapedurl, scrapedthumbnail in matches:
scrapedurl = CHANNEL_HOST + scrapedurl scrapedurl = CHANNEL_HOST + scrapedurl
@@ -186,7 +177,6 @@ def destacadas(item):
url=scrapedurl, thumbnail=scrapedthumbnail, url=scrapedurl, thumbnail=scrapedthumbnail,
contentType="movie" contentType="movie"
)) ))
# Extrae el paginador
next_page_link = scrapertools.find_single_match(data, '<a href="([^"]+)"\s+><span [^>]+>&raquo;</span>') next_page_link = scrapertools.find_single_match(data, '<a href="([^"]+)"\s+><span [^>]+>&raquo;</span>')
if next_page_link: if next_page_link:
itemlist.append( itemlist.append(
@@ -197,11 +187,8 @@ def destacadas(item):
def generos(item): def generos(item):
logger.info() logger.info()
itemlist = [] itemlist = []
# Descarga la página
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
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:
@@ -211,25 +198,21 @@ def generos(item):
if scrapedtitle == "Erotico" and config.get_setting("adult_mode") == 0: if scrapedtitle == "Erotico" and config.get_setting("adult_mode") == 0:
continue continue
itemlist.append(item.clone(action="peliculas", title=scrapedtitle, url=scrapedurl)) itemlist.append(item.clone(action="peliculas", title=scrapedtitle, url=scrapedurl))
return itemlist return itemlist
def idioma(item): def idioma(item):
logger.info() logger.info()
itemlist = [] itemlist = []
itemlist.append(item.clone(action="peliculas", title="Español", url= CHANNEL_HOST + "idioma/espanol/")) itemlist.append(item.clone(action="peliculas", title="Español", url= CHANNEL_HOST + "idioma/espanol/"))
itemlist.append(item.clone(action="peliculas", title="Latino", url= CHANNEL_HOST + "idioma/latino/")) itemlist.append(item.clone(action="peliculas", title="Latino", url= CHANNEL_HOST + "idioma/latino/"))
itemlist.append(item.clone(action="peliculas", title="VOSE", url= CHANNEL_HOST + "idioma/subtitulado/")) itemlist.append(item.clone(action="peliculas", title="VOSE", url= CHANNEL_HOST + "idioma/subtitulado/"))
return itemlist return itemlist
def findvideos(item): def findvideos(item):
logger.info() logger.info()
itemlist = [] itemlist = []
try: try:
filtro_idioma = config.get_setting("filterlanguages", item.channel) filtro_idioma = config.get_setting("filterlanguages", item.channel)
filtro_enlaces = config.get_setting("filterlinks", item.channel) filtro_enlaces = config.get_setting("filterlinks", item.channel)
@@ -237,13 +220,9 @@ def findvideos(item):
filtro_idioma = 3 filtro_idioma = 3
filtro_enlaces = 2 filtro_enlaces = 2
dict_idiomas = {'Español': 2, 'Latino': 1, 'Subtitulado': 0} dict_idiomas = {'Español': 2, 'Latino': 1, 'Subtitulado': 0}
# Busca el argumento
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
if item.infoLabels["year"]: if item.infoLabels["year"]:
tmdb.set_infoLabels(item, __modo_grafico__) tmdb.set_infoLabels(item, __modo_grafico__)
if filtro_enlaces != 0: if filtro_enlaces != 0:
list_enlaces = bloque_enlaces(data, filtro_idioma, dict_idiomas, "online", item) list_enlaces = bloque_enlaces(data, filtro_idioma, dict_idiomas, "online", item)
if list_enlaces: if list_enlaces:
@@ -256,7 +235,6 @@ def findvideos(item):
itemlist.append(item.clone(action="", title="Enlaces Descarga", text_color=color1, itemlist.append(item.clone(action="", title="Enlaces Descarga", text_color=color1,
text_bold=True)) text_bold=True))
itemlist.extend(list_enlaces) itemlist.extend(list_enlaces)
if itemlist: if itemlist:
itemlist.append(item.clone(channel="trailertools", title="Buscar Tráiler", action="buscartrailer", context="", itemlist.append(item.clone(channel="trailertools", title="Buscar Tráiler", action="buscartrailer", context="",
text_color="magenta")) text_color="magenta"))
@@ -0,0 +1,39 @@
{
"id": "novelashdgratis",
"name": "Novelas HD Gratis",
"active": true,
"adult": false,
"language": ["lat"],
"thumbnail": "https://s18.postimg.org/okqzs7zy1/logo.gif",
"banner": "",
"version": 1,
"categories": [
"tvshow"
],
"settings": [
{
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en busqueda global",
"default": false,
"enabled": false,
"visible": false
},
{
"id": "include_in_newest_peliculas",
"type": "bool",
"label": "Incluir en Novedades - Peliculas",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_infantiles",
"type": "bool",
"label": "Incluir en Novedades - Infantiles",
"default": true,
"enabled": true,
"visible": true
}
]
}
@@ -0,0 +1,164 @@
# -*- coding: utf-8 -*-
# -*- Channel Novelas HD Gratis -*-
# -*- Created for Alfa-addon -*-
# -*- By the Alfa Develop Group -*-
import re
from channelselector import get_thumb
from core import httptools
from core import scrapertools
from core import servertools
from core.item import Item
from platformcode import config, logger
from channels import filtertools
from channels import autoplay
host = 'http://www.novelashdgratis.io'
IDIOMAS = {'la':'Latino'}
list_language = IDIOMAS.values()
list_quality = []
list_servers = ['powvideo',
'netu',
'playedto',
'allmyvideos',
'gamovideo',
'openload',
'dailymotion',
'streamplay',
'streaminto',
'youtube',
'vidoza',
'flashx']
def mainlist(item):
logger.info()
autoplay.init(item.channel, list_servers, list_quality)
itemlist = list()
itemlist.append(item.clone(title="En Emision", action="list_all", url=host, type='emision'))
itemlist.append(item.clone(title="Ultimas Agregadas", action="list_all", url=host, type='ultimas'))
itemlist.append(item.clone(title="Todas", action="list_all", url=host, type='todas'))
itemlist.append(item.clone(title="Alfabetico", action="alpha", url=host, type='alfabetico'))
if autoplay.context:
autoplay.show_option(item.channel, itemlist)
return itemlist
def get_source(url):
logger.info()
data = httptools.downloadpage(url).data
data = re.sub(r'"|\n|\r|\t|&nbsp;|<br>|\s{2,}', "", data)
return data
def list_all(item):
logger.info()
itemlist =[]
data = get_source(item.url)
no_thumbs= ['emision', 'todas']
if item.type not in no_thumbs:
patron = '<div class=picture><a href=(.*?) title=(.*?)><img src=(.*?) width='
else:
if item.type == 'emision':
data = scrapertools.find_single_match(data, 'class=dt>Telenovelas que se Transmiten<\/div>.*?</ul>')
if item.type == 'todas':
data = scrapertools.find_single_match(data, 'class=dt>Lista de Novelas<\/div>.*?</ul>')
patron = '<li><a href=(.*?) title=(.*?)>.*?</a></li>'
matches = re.compile(patron, re.DOTALL).findall(data)
if item.type in no_thumbs:
for scrapedurl, scrapedtitle in matches:
url = host+scrapedurl
contentSerieName = scrapedtitle
title = contentSerieName
new_item = Item(channel=item.channel, title=title, url= url, action='episodes',
contentSerieName= contentSerieName)
itemlist.append(new_item)
else:
for scrapedurl, scrapedtitle, scrapedthumbnail in matches:
url = host + '/'+scrapedurl
contentSerieName = scrapedtitle
title = contentSerieName
thumbnail = scrapedthumbnail
new_item = Item(channel=item.channel, title=title, url=url, action='episodes', thumbnail=thumbnail,
contentSerieName=contentSerieName)
itemlist.append(new_item)
return itemlist
def alpha(item):
logger.info()
itemlist= []
data = get_source(item.url)
patron = '<li class=menu-gen><a href=(.*?)>(.*?)</a> </li>'
matches = re.compile(patron,re.DOTALL).findall(data)
for scrapedurl, scrapedtitle in matches:
itemlist.append(item.clone(title=scrapedtitle, url=host+scrapedurl, action='list_all'))
return itemlist
def episodes(item):
logger.info()
itemlist=[]
data=get_source(item.url)
patron='<li class=lc><a href=(.*?) title=.*?class=lcc>(.*?)</a>'
matches = re.compile(patron, re.DOTALL).findall(data)
for scrapedurl, scrapedtitle in matches:
title = scrapedtitle
url = host+scrapedurl
new_item = Item(channel=item.channel, title=title, url=url, action='findvideos')
itemlist.append(new_item)
return itemlist [::-1]
def findvideos(item):
logger.info()
servers = {'powvideo':'http://powvideo.net/embed-',
'netu':'http://netu.tv/watch_video.php?v=',
'played':'http://played.to/embed-',
'allmy':'http://allmyvideos.net/embed-',
'gamo':'http://gamovideo.com/embed-',
'openload':'https://openload.co/embed/',
'daily':'http://www.dailymotion.com/embed/video/',
'play':'http://streamplay.to/embed-',
'streamin':'http://streamin.to/embed-',
'youtube':'https://www.youtube.com/embed/',
'vidoza':'https://vidoza.net/embed-',
'flashx':'https://www.flashx.tv/embed-'}
itemlist = []
data = get_source(item.url)
patron = 'id=tab\d+><script>(.*?)\((.*?)\)<'
matches = re.compile(patron, re.DOTALL).findall(data)
for server, id in matches:
if server in servers:
url= '%s%s'%(servers[server], id)
itemlist.append(item.clone(url=url, title='%s', action='play', language=IDIOMAS['la']))
itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % i.server.capitalize())
# Requerido para FilterTools
itemlist = filtertools.get_links(itemlist, item, list_language)
# Requerido para AutoPlay
autoplay.start(itemlist, item)
return itemlist
+222 -350
View File
@@ -1,4 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# -*- Channel PepeCine -*-
# -*- Created for Alfa-addon -*-
# -*- By the Alfa Develop Group -*-
import re import re
import urlparse import urlparse
@@ -11,383 +14,252 @@ from core import tmdb
from core.item import Item, InfoLabels from core.item import Item, InfoLabels
from platformcode import config, logger from platformcode import config, logger
__url_base__ = "http://pepecine.net" host = "https://pepecine.tv"
__chanel__ = "pepecine" perpage = 20
fanart_host = "https://d12.usercdn.com/i/02278/u875vjx9c0xs.png"
def mainlist1(item):
logger.info()
itemlist = []
itemlist.append(Item(channel=item.channel, title="Películas", action='movies_menu'))
#itemlist.append(item.clone(title="Series", action='tvshows_menu'))
return itemlist
def mainlist(item): def mainlist(item):
logger.info() logger.info()
itemlist = [] itemlist = []
url_peliculas = urlparse.urljoin(__url_base__, "plugins/ultimas-peliculas-updated.php") itemlist.append(Item(channel=item.channel,
itemlist.append( title="Ultimas",
Item(channel=__chanel__, title="Películas", text_color="0xFFEB7600", text_bold=True, fanart=fanart_host, url=host+'/tv-peliculas-online',
thumbnail="https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/movies.png")) action='list_latest',
itemlist.append(Item(channel=__chanel__, action="listado", title=" Novedades", page=0, viewcontent="movies", indexp=1,
text_color="0xFFEB7600", extra="movie", fanart=fanart_host, url=url_peliculas, type='movie'))
thumbnail="https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/movies.png")) itemlist.append(Item(channel=item.channel,
itemlist.append(Item(channel=__chanel__, action="sub_filtrar", title=" Filtrar películas por género", title="Todas",
text_color="0xFFEB7600", extra="movie", fanart=fanart_host, url=url_peliculas, url= host+'/ver-online',
thumbnail="https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/movies_filtrar.png")) action='list_all',
itemlist.append(Item(channel=__chanel__, action="search", title=" Buscar películas por título", page='1',
text_color="0xFFEB7600", extra="movie", fanart=fanart_host, url=url_peliculas, type='movie'))
thumbnail="https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/movies_buscar.png")) itemlist.append(Item(channel=item.channel,
title="Género",
url_series = urlparse.urljoin(__url_base__, "plugins/series-episodios-updated.php") url= host,
itemlist.append( action='genero',
Item(channel=__chanel__, title="Series", text_color="0xFFEB7600", text_bold=True, fanart=fanart_host, page='1',
thumbnail="https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/tv.png")) type='movie'))
itemlist.append(Item(channel=__chanel__, action="listado", title=" Novedades", page=0, viewcontent="tvshows", itemlist.append(Item(channel=item.channel, title = "", action =""))
text_color="0xFFEB7600", extra="series", fanart=fanart_host, url=url_series, itemlist.append(Item(channel=item.channel,
thumbnail="https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/tv.png")) title="Buscar",
itemlist.append(Item(channel=__chanel__, action="sub_filtrar", title=" Filtrar series por género", url= host+'/esta-online?q=',
text_color="0xFFEB7600", extra="series", fanart=fanart_host, url=url_series, action='search',
thumbnail="https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/tv_filtrar.png")) page='1',
itemlist.append(Item(channel=__chanel__, action="search", title=" Buscar series por título", type='movie'))
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 return itemlist
def sub_filtrar(item): def genero(item):
logger.info() logger.info()
itemlist = [] itemlist=[]
generos = ("acción", "animación", "aventura", "ciencia ficción", "comedia", "crimen", data = httptools.downloadpage(item.url).data
"documental", "drama", "familia", "fantasía", "guerra", "historia", "misterio", data = data.replace("\n","")
"música", "musical", "romance", "terror", "thriller", "western") bloque = scrapertools.find_single_match(data, 'Peliculas</h2><div id="SlideMenu1" class="s2">.*?SlideMenu1_Folder">.*?</ul></li>')
thumbnail = ('https://d12.usercdn.com/i/02278/spvnq8hghtok.jpg', patron = '<a href="([^"]+).*?'
'https://d12.usercdn.com/i/02278/olhbpe7phjas.jpg', patron += '<li>([^<]+)'
'https://d12.usercdn.com/i/02278/8xm23q2vewtt.jpg', matches = scrapertools.find_multiple_matches(bloque, patron)
'https://d12.usercdn.com/i/02278/o4vuvd7q4bau.jpg', for scrapedurl, scrapedtitle in matches:
'https://d12.usercdn.com/i/02278/v7xq7k9bj3dh.jpg', itemlist.append(Item(action = "list_all",
'https://d12.usercdn.com/i/02278/yo5uj9ff7jmg.jpg', channel = item.channel,
'https://d12.usercdn.com/i/02278/ipeodwh6vw6t.jpg', page='1',
'https://d12.usercdn.com/i/02278/0c0ra1wb11ro.jpg', title = scrapedtitle,
'https://d12.usercdn.com/i/02278/zn85t6f2oxdv.jpg', type= item.type,
'https://d12.usercdn.com/i/02278/ipk94gsdqzwa.jpg', url = host + scrapedurl
'https://d12.usercdn.com/i/02278/z5hsi6fr4yri.jpg', ))
'https://d12.usercdn.com/i/02278/nq0jvyp7vlb9.jpg', return itemlist
'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))
def tvshows_menu(item):
logger.info()
itemlist=[]
itemlist.append(Item(channel=item.channel,
title="Ultimas",
url=host+'/ver-tv-serie-online',
action='list_latest',
type='serie'))
itemlist.append(item.clone(title="Todas",
url=host + '/serie-tv',
action='list_all',
page='1',
type='series'))
itemlist.append(item.clone(title="Buscar",
url= host+'/esta-online?q=',
action='search',
page='1',
type='series'))
return itemlist return itemlist
def search(item, texto): 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() logger.info()
itemlist = [] texto = texto.replace(" ", "+")
item.url = item.url + texto
try: item.extra = "busca"
data_dict = jsontools.load(httptools.downloadpage(item.url).data) if texto != '':
except: return sub_search(item)
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: else:
if len(data_dict["season"]) == 1: return []
# 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): def sub_search(item):
logger.info() logger.info()
itemlist = [] itemlist = []
# infoLabels = item.infoLabels data = httptools.downloadpage(item.url).data
f1 = "Peliculas"
data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) action = "findvideos"
patron = 'vars.title =(.*?)};' if item.type == "series":
try: action = "list_all"
data_dict = jsontools.load(scrapertools.get_match(data, patron) + '}') f1 = "Series"
except: patron = 'Ver %s .*?id="%s' %(f1, item.type)
return itemlist # Devolvemos lista vacia bloque = scrapertools.find_single_match(data, patron)
patron = 'col-sm-4 pretty-figure">\s*<a href="([^"]+).*?'
# Agrupar enlaces por episodios temXcap patron += 'src="([^"]+).*?'
temXcap_dict = {} patron += 'title="([^"]+).*?'
for link in data_dict['link']: matches = scrapertools.find_multiple_matches(bloque, patron)
try: for scrapedurl, scrapedthumbnail, scrapedtitle in matches:
season = str(int(link['season'])) path = scrapertools.find_single_match(scrapedthumbnail, "w\w+(/\w+.....)")
episode = str(int(link['episode'])).zfill(2) filtro_list = {"poster_path": path}
except: filtro_list = filtro_list.items()
continue itemlist.append(item.clone(action = "findvideos",
extra = "one",
if int(season) != item.infoLabels["season"] and item.extra != "serie_add": infoLabels={'filtro': filtro_list},
# Descartamos episodios de otras temporadas, excepto si los queremos todos thumbnail = scrapedthumbnail,
continue title = scrapedtitle,
fulltitle = scrapedtitle,
title_id = link['title_id'] url = scrapedurl
id = season + "x" + episode ))
if id in temXcap_dict: tmdb.set_infoLabels(itemlist)
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 return itemlist
def get_source(url):
logger.info()
data = httptools.downloadpage(url).data
data = re.sub(r'"|\n|\r|\t|&nbsp;|<br>|\s{2,}', "", data)
return data
def list_latest(item):
logger.info()
itemlist = []
data = get_source(item.url)
data_url= scrapertools.find_single_match(data,'<iframe.*?src=(.*?) style')
data = get_source(data_url)
patron = "<div class='online'>.*?<img src=(.*?) class=.*?alt=(.*?) title=.*?"
patron += "<b><a href=(.*?) target=.*?align=right><div class=s7>(.*?) <"
matches = re.compile(patron,re.DOTALL).findall(data)
count = 0
for thumbnail, title, url, language in matches:
count +=1
if count >= item.indexp and count < item.indexp + perpage:
path = scrapertools.find_single_match(thumbnail, "w\w+(/\w+.....)")
filtro_list = {"poster_path": path}
filtro_list = filtro_list.items()
itemlist.append(Item(channel=item.channel,
title=title,
fulltitle=title,
contentTitle=title,
url=host+url,
thumbnail=thumbnail,
language=language,
infoLabels={'filtro': filtro_list},
extra="one",
action='findvideos'))
tmdb.set_infoLabels(itemlist)
item.indexp += perpage
itemlist.append(Item(channel=item.channel,
title="Siguiente >>",
url=item.url,
extra="one",
indexp=item.indexp,
action='list_latest'))
return itemlist
def list_all(item):
logger.info()
itemlist=[]
genero = scrapertools.find_single_match(item.url, "genre=(\w+)")
data= get_source(item.url)
token = scrapertools.find_single_match(data, "token:.*?'(.*?)'")
url = host+'/titles/paginate?_token=%s&perPage=24&page=%s&order=mc_num_of_votesDesc&type=%s&minRating=&maxRating=&availToStream=1&genres[]=%s' % (token, item.page, item.type, genero)
data = httptools.downloadpage(url).data
dict_data = jsontools.load(data)
items = dict_data['items']
for dict in items:
new_item = Item(channel=item.channel,
title=dict['title']+' [%s]' % dict['year'],
plot = dict['plot'],
thumbnail=dict['poster'],
url=dict['link'],
infoLabels={'year':dict['year']})
if item.type == 'movie':
new_item.contentTitle=dict['title']
new_item.fulltitle=dict['title']
new_item.action = 'findvideos'
elif item.type == 'series':
new_item.contentSerieName = dict['title']
new_item.action = ''
itemlist.append(new_item)
tmdb.set_infoLabels(itemlist)
itemlist.append(item.clone(title='Siguiente>>>',
url=item.url,
action='list_all',
type= item.type,
page=str(int(item.page) + 1)))
return itemlist
def findvideos(item): def findvideos(item):
logger.info() logger.info()
itemlist = [] itemlist=[]
if item.extra == "one":
data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data) data = httptools.downloadpage(item.url).data
patron = 'vars.title =(.*?)};' patron = "renderTab.bind.*?'([^']+).*?"
try: patron += "app.utils.getFavicon.*?<b>(.*?) .*?"
data_dict = jsontools.load(scrapertools.get_match(data, patron) + '}') patron += 'color:#B1FFC5;">([^<]+)'
except: matches = scrapertools.find_multiple_matches(data, patron)
return itemlist # Devolvemos lista vacia for scrapedurl, scrapedlanguage, scrapedquality in matches:
title = "Ver enlace en %s " + "[" + scrapedlanguage + "]" + "[" + scrapedquality + "]"
for link in data_dict["link"]: if scrapedlanguage != 'zc':
if item.contentType == 'episode' \ itemlist.append(item.clone(action='play',
and (item.contentSeason != link['season'] or item.contentEpisodeNumber != link['episode']): title=title,
# Si buscamos enlaces de un episodio descartamos los q no sean de este episodio url=scrapedurl,
continue language=scrapedlanguage
))
url = link["url"] itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % i.server.capitalize())
flag = scrapertools.find_single_match(link["label"], '(\s*\<img src=.*\>)') else:
idioma = link["label"].replace(flag, "") for link in item.url:
if link["quality"] != "?": language = scrapertools.find_single_match(link['label'], '(.*?) <img')
calidad = (link["quality"]) if language != 'zc':
else: itemlist.append(item.clone(action='play',
calidad = "" title=item.title,
itemlist.extend(servertools.find_video_items(data=url)) url= link['url'],
language=language,
quality=link['quality']))
itemlist=servertools.get_servers_itemlist(itemlist)
for videoitem in itemlist: for videoitem in itemlist:
videoitem.channel = item.channel videoitem.title = '%s [%s]' % (videoitem.server.capitalize(), videoitem.language.capitalize())
videoitem.quality = calidad tmdb.set_infoLabels(itemlist)
videoitem.language = idioma if itemlist:
videoitem.contentTitle = item.title itemlist.append(Item(channel = item.channel))
itemlist = servertools.get_servers_itemlist(itemlist) itemlist.append(item.clone(channel="trailertools", title="Buscar Tráiler", action="buscartrailer", context="",
text_color="magenta"))
if config.get_videolibrary_support() and itemlist and item.contentType == "movie": # Opción "Añadir esta película a la videoteca de KODI"
infoLabels = {'tmdb_id': item.infoLabels['tmdb_id'], if item.extra != "library":
'title': item.infoLabels['title']} if config.get_videolibrary_support():
itemlist.append(Item(channel=item.channel, title="Añadir esta película a la videoteca", itemlist.append(Item(channel=item.channel, title="Añadir a la videoteca", text_color="green",
action="add_pelicula_to_library", url=item.url, infoLabels=infoLabels, action="add_pelicula_to_library", url=item.url, thumbnail = item.thumbnail,
text_color="0xFFe5ffcc", fulltitle = item.fulltitle
thumbnail='https://raw.githubusercontent.com/master-1970/resources/master/images/channels/pepecine/tv.png')) ))
return itemlist return itemlist
def episodios(item): def play(item):
# Necesario para las actualizaciones automaticas item.thumbnail = item.contentThumbnail
return get_temporadas(Item(channel=__chanel__, url=item.url, show=item.show, extra="serie_add")) return [item]
+4 -1
View File
@@ -761,7 +761,10 @@ def play(item):
videoitem.channel = item.channel videoitem.channel = item.channel
# Marcar como visto # Marcar como visto
checkseen(item) try:
checkseen(item)
except:
pass
return itemlist return itemlist
+1 -1
View File
@@ -95,7 +95,7 @@ def episodios(item):
# obtener el numero total de episodios # obtener el numero total de episodios
total_episode = 0 total_episode = 0
patron_caps = '<li><span>Capitulo ([^"]+)\:<\/span><[^"]+"(.+?)">([^"]+)<[^"]+<\/li>' patron_caps = '<li><span>Capitulo (\d+).*?</span><a href="(.*?)">(.*?)</a></li>'
matches = scrapertools.find_multiple_matches(data, patron_caps) matches = scrapertools.find_multiple_matches(data, patron_caps)
# data_info = scrapertools.find_single_match(data, '<div class="info">.+?<\/div><\/div>') # data_info = scrapertools.find_single_match(data, '<div class="info">.+?<\/div><\/div>')
patron_info = '<img src="([^"]+)">.+?</span>(.*?)</p>.*?<h2>Reseña:</h2><p>(.*?)</p>' patron_info = '<img src="([^"]+)">.+?</span>(.*?)</p>.*?<h2>Reseña:</h2><p>(.*?)</p>'
+19 -16
View File
@@ -503,7 +503,7 @@ def is_playing():
return xbmc.Player().isPlaying() return xbmc.Player().isPlaying()
def play_video(item, strm=False, force_direct=False): def play_video(item, strm=False, force_direct=False, autoplay=False):
logger.info() logger.info()
# logger.debug(item.tostring('\n')) # logger.debug(item.tostring('\n'))
@@ -523,7 +523,7 @@ def play_video(item, strm=False, force_direct=False):
logger.info("default_action=%s" % default_action) logger.info("default_action=%s" % default_action)
# Abre el diálogo de selección para ver las opciones disponibles # Abre el diálogo de selección para ver las opciones disponibles
opciones, video_urls, seleccion, salir = get_dialogo_opciones(item, default_action, strm) opciones, video_urls, seleccion, salir = get_dialogo_opciones(item, default_action, strm, autoplay)
if salir: if salir:
return return
@@ -669,7 +669,7 @@ def handle_wait(time_to_wait, title, text):
return True return True
def get_dialogo_opciones(item, default_action, strm): def get_dialogo_opciones(item, default_action, strm, autoplay):
logger.info() logger.info()
# logger.debug(item.tostring('\n')) # logger.debug(item.tostring('\n'))
from core import servertools from core import servertools
@@ -690,6 +690,7 @@ def get_dialogo_opciones(item, default_action, strm):
# Extrae las URL de los vídeos, y si no puedes verlo te dice el motivo # Extrae las URL de los vídeos, y si no puedes verlo te dice el motivo
# Permitir varias calidades para server "directo" # Permitir varias calidades para server "directo"
if item.video_urls: if item.video_urls:
video_urls, puedes, motivo = item.video_urls, True, "" video_urls, puedes, motivo = item.video_urls, True, ""
else: else:
@@ -730,22 +731,24 @@ def get_dialogo_opciones(item, default_action, strm):
# Si no puedes ver el vídeo te informa # Si no puedes ver el vídeo te informa
else: else:
if item.server != "": logger.debug('no puedes verlo :P')
if "<br/>" in motivo: if not autoplay:
dialog_ok("No puedes ver ese vídeo porque...", motivo.split("<br/>")[0], motivo.split("<br/>")[1], if item.server != "":
item.url) if "<br/>" in motivo:
dialog_ok("No puedes ver ese vídeo porque...", motivo.split("<br/>")[0], motivo.split("<br/>")[1],
item.url)
else:
dialog_ok("No puedes ver ese vídeo porque...", motivo, item.url)
else: else:
dialog_ok("No puedes ver ese vídeo porque...", motivo, item.url) dialog_ok("No puedes ver ese vídeo porque...", "El servidor donde está alojado no está",
else: "soportado en alfa todavía", item.url)
dialog_ok("No puedes ver ese vídeo porque...", "El servidor donde está alojado no está",
"soportado en alfa todavía", item.url)
if item.channel == "favorites": if item.channel == "favorites":
# "Quitar de favoritos" # "Quitar de favoritos"
opciones.append(config.get_localized_string(30154)) opciones.append(config.get_localized_string(30154))
if len(opciones) == 0: if len(opciones) == 0:
error = True error = True
return opciones, video_urls, seleccion, error return opciones, video_urls, seleccion, error