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

This commit is contained in:
unknown
2018-05-19 15:39:19 -03:00
38 changed files with 11578 additions and 2772 deletions

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.alfa" name="Alfa" version="2.5.13" provider-name="Alfa Addon">
<addon id="plugin.video.alfa" name="Alfa" version="2.5.14" provider-name="Alfa Addon">
<requires>
<import addon="xbmc.python" version="2.1.0"/>
<import addon="script.module.libtorrent" optional="true"/>
@@ -19,11 +19,17 @@
</assets>
<news>[B]Estos son los cambios para esta versión:[/B]
[COLOR green][B]Canales agregados y arreglos[/B][/COLOR]
» plusdede » cinefox
» kbagi/diskokosmiko » ultrapeliculashd
» mejortorrent » allcalidad
» seriespapaya » seriesdanko
» speedvideo » yourupload
» miradetodo » solocastellano
» descargacineclasico » poseidonhd
» estadepelis » pelismedia
» doramasmp4 » descargas2020
» mejortorrent » mispelisyseries
» torrentlocura » torrentrapid
» tumejortorrent » tvsinpagar
¤ arreglos internos
¤ Agradecimientos al equipo SOD, @angedam, @alaquepasa por colaborar con ésta versión.
</news>
<description lang="es">Navega con Kodi por páginas web para ver sus videos de manera fácil.</description>

View File

@@ -1,15 +1,15 @@
# -*- coding: utf-8 -*-
# -*- coding: utf-8 -*-
import re
import urlparse
from channelselector import get_thumb
from core import scrapertools
from core import servertools
from core.item import Item
from core.tmdb import Tmdb
from platformcode import logger
from servers.decrypters import expurl
from core import scrapertools, httptools
from core import servertools
from core import tmdb
from core.item import Item
from lib import unshortenit
host = "http://www.descargacineclasico.net"
def agrupa_datos(data):
@@ -22,54 +22,36 @@ def agrupa_datos(data):
def mainlist(item):
logger.info()
thumb_buscar = get_thumb("search.png")
itemlist = []
itemlist.append(Item(channel=item.channel, title="Últimas agregadas", action="agregadas",
url="http://www.descargacineclasico.net/", viewmode="movie_with_plot",
url=host, viewmode="movie_with_plot",
thumbnail=get_thumb('last', auto=True)))
itemlist.append(Item(channel=item.channel, title="Listado por género", action="porGenero",
url="http://www.descargacineclasico.net/",
url=host,
thumbnail=get_thumb('genres', auto=True)))
itemlist.append(
Item(channel=item.channel, title="Buscar", action="search", url="http://www.descargacineclasico.net/",
Item(channel=item.channel, title="Buscar", action="search", url=host,
thumbnail=get_thumb('search', auto=True)))
return itemlist
def porGenero(item):
logger.info()
itemlist = []
data = scrapertools.cache_page(item.url)
logger.info("data=" + data)
data = httptools.downloadpage(item.url).data
patron = '<ul class="columnas">(.*?)</ul>'
data = re.compile(patron, re.DOTALL).findall(data)
patron = '<li.*?>.*?href="([^"]+).*?>([^<]+)'
matches = re.compile(patron, re.DOTALL).findall(data[0])
for url, genero in matches:
itemlist.append(
Item(channel=item.channel, action="agregadas", title=genero, url=url, viewmode="movie_with_plot"))
data = re.compile(patron,re.DOTALL).findall(data)
patron = '<li.*?>.*?href="([^"]+).*?>([^<]+)'
matches = re.compile(patron,re.DOTALL).findall(data[0])
for url,genero in matches:
itemlist.append( Item(channel=item.channel , action="agregadas" , title=genero,url=url, viewmode="movie_with_plot"))
return itemlist
def search(item, texto):
def search(item,texto):
logger.info()
'''
texto_get = texto.replace(" ","%20")
texto_post = texto.replace(" ","+")
item.url = "http://pelisadicto.com/buscar/%s?search=%s" % (texto_get,texto_post)
'''
texto = texto.replace(" ", "+")
item.url = "http://www.descargacineclasico.net/?s=" + texto
item.url = host + "?s=" + texto
try:
return agregadas(item)
# Se captura la excepci?n, para no interrumpir al buscador global si un canal falla
@@ -83,98 +65,62 @@ def search(item, texto):
def agregadas(item):
logger.info()
itemlist = []
'''
# Descarga la pagina
if "?search=" in item.url:
url_search = item.url.split("?search=")
data = scrapertools.cache_page(url_search[0], url_search[1])
else:
data = scrapertools.cache_page(item.url)
logger.info("data="+data)
'''
data = scrapertools.cache_page(item.url)
logger.info("data=" + data)
# Extrae las entradas
fichas = re.sub(r"\n|\s{2}", "", scrapertools.get_match(data, '<div class="review-box-container">(.*?)wp-pagenavi'))
# <a href="http://www.descargacineclasico.net/ciencia-ficcion/quatermass-2-1957/"
# title="Quatermass II (Quatermass 2) (1957) Descargar y ver Online">
# <img style="border-radius:6px;"
# src="//www.descargacineclasico.net/wp-content/uploads/2015/12/Quatermass-II-2-1957.jpg"
# alt="Quatermass II (Quatermass 2) (1957) Descargar y ver Online Gratis" height="240" width="160">
patron = '<div class="post-thumbnail"><a href="([^"]+)".*?' # url
patron += 'title="([^"]+)".*?' # title
patron += 'src="([^"]+).*?' # thumbnail
patron += '<p>([^<]+)' # plot
matches = re.compile(patron, re.DOTALL).findall(fichas)
data = httptools.downloadpage(item.url).data
fichas = re.sub(r"\n|\s{2}","",scrapertools.get_match(data,'<div class="review-box-container">(.*?)wp-pagenavi'))
patron = '<div class="post-thumbnail"><a href="([^"]+)".*?' # url
patron+= 'title="([^"]+)".*?' # title
patron+= 'src="([^"]+).*?' # thumbnail
patron+= '<p>([^<]+)' # plot
matches = re.compile(patron,re.DOTALL).findall(fichas)
for url, title, thumbnail, plot in matches:
title = title[0:title.find("Descargar y ver Online")]
url = urlparse.urljoin(item.url, url)
thumbnail = urlparse.urljoin(url, thumbnail)
itemlist.append(Item(channel=item.channel, action="findvideos", title=title + " ", fulltitle=title, url=url,
thumbnail=thumbnail, plot=plot, show=title))
title = title.replace("Descargar y ver Online","").strip()
year = scrapertools.find_single_match(title, '\(([0-9]{4})')
fulltitle = title.replace("(%s)" %year,"").strip()
itemlist.append( Item(action="findvideos",
channel=item.channel,
contentSerieName="",
title=title+" ",
fulltitle=fulltitle ,
infoLabels={'year':year},
url=url ,
thumbnail=thumbnail,
plot=plot,
show=title) )
scrapertools.printMatches(itemlist)
tmdb.set_infoLabels(itemlist)
# Paginación
try:
# <ul class="pagination"><li class="active"><span>1</span></li><li><span><a href="2">2</a></span></li><li><span><a href="3">3</a></span></li><li><span><a href="4">4</a></span></li><li><span><a href="5">5</a></span></li><li><span><a href="6">6</a></span></li></ul>
patron_nextpage = r'<a class="nextpostslink" rel="next" href="([^"]+)'
next_page = re.compile(patron_nextpage, re.DOTALL).findall(data)
itemlist.append(Item(channel=item.channel, action="agregadas", title="Página siguiente >>", url=next_page[0],
viewmode="movie_with_plot"))
except:
pass
next_page = re.compile(patron_nextpage,re.DOTALL).findall(data)
itemlist.append( Item(channel=item.channel, action="agregadas", title="Página siguiente >>" , url=next_page[0], viewmode="movie_with_plot") )
except: pass
return itemlist
def findvideos(item):
logger.info()
itemlist = []
data = scrapertools.cache_page(item.url)
data = httptools.downloadpage(item.url).data
data = scrapertools.unescape(data)
titulo = item.title
titulo_tmdb = re.sub("([0-9+])", "", titulo.strip())
oTmdb = Tmdb(texto_buscado=titulo_tmdb, idioma_busqueda="es")
item.fanart = oTmdb.get_backdrop()
# Descarga la pagina
# data = scrapertools.cache_page(item.url)
patron = '#div_\d_\D.+?<img id="([^"]+).*?<span>.*?</span>.*?<span>(.*?)</span>.*?imgdes.*?imgdes/([^\.]+).*?<a href=([^\s]+)' # Añado calidad
matches = re.compile(patron, re.DOTALL).findall(data)
patron = '#div_\d_\D.+?<img id="([^"]+).*?<span>.*?</span>.*?<span>(.*?)</span>.*?imgdes.*?imgdes/([^\.]+).*?<a href=([^\s]+)' #Añado calidad
matches = scrapertools.find_multiple_matches(data, patron)
for scrapedidioma, scrapedcalidad, scrapedserver, scrapedurl in matches:
title = titulo + "_" + scrapedidioma + "_" + scrapedserver + "_" + scrapedcalidad
itemlist.append(Item(channel=item.channel, action="play", title=title, fulltitle=title, url=scrapedurl,
thumbnail=item.thumbnail, plot=item.plot, show=item.show, fanart=item.fanart))
while True:
loc = httptools.downloadpage(scrapedurl, follow_redirects=False).headers.get("location", "")
if not loc or "/ad/locked" in loc:
break
scrapedurl = loc
scrapedurl = scrapedurl.replace('"','')
scrapedurl, c = unshortenit.unshorten_only(scrapedurl)
title = item.title + "_" + scrapedidioma + "_"+ scrapedserver + "_" + scrapedcalidad
itemlist.append( item.clone(action="play",
title=title,
url=scrapedurl) )
tmdb.set_infoLabels(itemlist)
itemlist = servertools.get_servers_itemlist(itemlist)
return itemlist
def play(item):
logger.info()
video = expurl.expand_url(item.url)
itemlist = []
itemlist = servertools.find_video_items(data=video)
for videoitem in itemlist:
videoitem.title = item.title
videoitem.fulltitle = item.fulltitle
videoitem.thumbnail = item.thumbnail
videoitem.channel = item.channel
return itemlist
item.thumbnail = item.contentThumbnail
return [item]

View File

@@ -23,36 +23,431 @@
"visible": true
},
{
"id": "include_in_newest_peliculas",
"type": "bool",
"label": "Incluir en Novedades - Peliculas",
"default": true,
"id": "clonenewpct1_ver_enlaces_veronline",
"type": "list",
"label": "Mostrar enlaces Ver Online",
"default": 1,
"enabled": true,
"visible": true
"visible": true,
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20"
]
},
{
"id": "include_in_newest_series",
"type": "bool",
"label": "Incluir en Novedades - Episodios de series",
"default": true,
"id": "clonenewpct1_verificar_enlaces_veronline",
"type": "list",
"label": "Verificar enlaces Ver Online",
"default": 1,
"enabled": true,
"visible": true
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20"
]
},
{
"id": "include_in_newest_torrent",
"id": "clonenewpct1_verificar_enlaces_veronline_validos",
"type": "bool",
"label": "Incluir en Novedades - Torrent",
"label": "¿Contar sólo enlaces 'verificados' en Ver Online?",
"default": true,
"enabled": true,
"visible": true
"visible": "!eq(-1,'No') + !eq(-2,'No')"
},
{
"id": "include_in_newest_4k",
"id": "clonenewpct1_excluir1_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 9,
"max_excl": 5,
"enabled": true,
"visible": "!eq(-3,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir2_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 12,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir3_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 20,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir4_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir5_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_ver_enlaces_descargas",
"type": "list",
"label": "Mostrar enlaces Descargas",
"default": 0,
"enabled": true,
"visible": true,
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20",
"30",
"50",
"100"
]
},
{
"id": "clonenewpct1_verificar_enlaces_descargas",
"type": "list",
"label": "Verificar enlaces Descargas",
"default": 1,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20",
"30",
"50",
"100"
]
},
{
"id": "clonenewpct1_verificar_enlaces_descargas_validos",
"type": "bool",
"label": "Incluir en Novedades - 4K",
"label": "¿Contar sólo enlaces 'verificados' en Descargar?",
"default": true,
"enabled": true,
"visible": true
"visible": "!eq(-1,'No') + !eq(-2,'No')"
},
{
"id": "clonenewpct1_excluir1_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Ver Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-3,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir2_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Ver Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir3_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir4_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir5_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -27,8 +27,9 @@
"visible": true,
"lvalues": [
"No filtrar",
"VOSE"
"VOSE",
"VO"
]
}
]
}
}

View File

@@ -18,7 +18,7 @@ from channelselector import get_thumb
host = 'https://www.doramasmp4.com/'
IDIOMAS = {'sub': 'VOSE'}
IDIOMAS = {'sub': 'VOSE', 'VO': 'VO'}
list_language = IDIOMAS.values()
list_quality = []
list_servers = ['openload', 'streamango', 'netutv', 'okru', 'directo', 'mp4upload']
@@ -38,7 +38,7 @@ def mainlist(item):
itemlist.append(Item(channel= item.channel, title="Doramas", action="doramas_menu",
thumbnail=get_thumb('doramas', auto=True), type='dorama'))
itemlist.append(Item(channel=item.channel, title="Películas", action="list_all",
url=host + 'catalogue?type[]=pelicula', thumbnail=get_thumb('movies', auto=True),
url=host + 'catalogue?format=pelicula', thumbnail=get_thumb('movies', auto=True),
type='movie'))
itemlist.append(Item(channel=item.channel, title = 'Buscar', action="search", url= host+'search?q=',
thumbnail=get_thumb('search', auto=True)))
@@ -63,9 +63,8 @@ def list_all(item):
itemlist = []
data = get_source(item.url)
patron = '<a class=item_episode href=(.*?) title=.*?<img src=(.*?) title=.*?title>(.*?)'
patron += '</div> <div class=options> <span>(.*?)</span>'
patron = '<div class=col-lg-2 col-md-3 col-6><a href=(.*?) title=.*?'
patron += '<img src=(.*?) alt=(.*?) class=img-fluid>.*?bg-primary text-capitalize>(.*?)</span>'
matches = re.compile(patron, re.DOTALL).findall(data)
@@ -107,8 +106,8 @@ def latest_episodes(item):
itemlist = []
infoLabels = dict()
data = get_source(item.url)
patron = '<a class=episode href=(.*?) title=.*?<img src=(.*?) title=.*?title>(.*?)</div>.*?episode>(.*?)</div>'
patron = '<div class=col-lg-3 col-md-6 mb-2><a href=(.*?) title=.*?'
patron +='<img src=(.*?) alt.*?truncate-width>(.*?)<.*?mb-1>(.*?)<'
matches = re.compile(patron, re.DOTALL).findall(data)
for scrapedurl, scrapedthumbnail, scrapedtitle, scrapedep in matches:
@@ -116,6 +115,7 @@ def latest_episodes(item):
contentSerieName = scrapedtitle
itemlist.append(Item(channel=item.channel, action='findvideos', url=scrapedurl, thumbnail=scrapedthumbnail,
title=title, contentSerieName=contentSerieName, type='episode'))
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
return itemlist
@@ -125,8 +125,9 @@ def episodes(item):
logger.info()
itemlist = []
data = get_source(item.url)
patron = '<li class=link_episode><a itemprop=url href=(.*?) title=.*?itemprop=name>(.*?)'
patron += '</span></a><meta itemprop=episodeNumber content=(.*?) /></li>'
logger.debug(data)
patron = '<a itemprop=url href=(.*?) title=.*? class=media.*?truncate-width>(.*?)<.*?'
patron +='text-muted mb-1>Capítulo (.*?)</div>'
matches = re.compile(patron, re.DOTALL).findall(data)
infoLabels = item.infoLabels
@@ -139,7 +140,7 @@ def episodes(item):
infoLabels['episode'] = contentEpisodeNumber
if scrapedtitle != '':
title = scrapedtitle
title = '%sx%s - %s' % ('1',scrapedep, scrapedtitle)
else:
title = 'episodio %s' % scrapedep
@@ -148,7 +149,12 @@ def episodes(item):
itemlist.append(Item(channel=item.channel, action="findvideos", title=title, url=url,
contentEpisodeNumber=contentEpisodeNumber, type='episode', infoLabels=infoLabels))
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
if config.get_videolibrary_support() and len(itemlist) > 0:
itemlist.append(
item.clone(title="Añadir esta serie a la videoteca", action="add_serie_to_library", extra="episodes", text_color='yellow'))
return itemlist
def findvideos(item):
@@ -156,51 +162,69 @@ def findvideos(item):
itemlist = []
duplicated = []
headers={'referer':item.url}
data = get_source(item.url)
logger.debug(data)
patron = 'animated pulse data-url=(.*?)>'
matches = re.compile(patron, re.DOTALL).findall(data)
if '</strong> ¡Este capítulo no tiene subtítulos, solo audio original! </div>' in data:
language = IDIOMAS['vo']
else:
language = IDIOMAS['sub']
if item.type !='episode' and '<meta property=article:section content=Pelicula>' not in data:
item.type = 'dorama'
item.contentSerieName = item.contentTitle
item.contentTitle = ''
return episodes(item)
else:
itemlist.extend(servertools.find_video_items(data=data))
for video_item in itemlist:
if 'sgl.php' in video_item.url:
headers = {'referer': item.url}
patron_gvideo = "'file':'(.*?)','type'"
data_gvideo = httptools.downloadpage(video_item.url, headers=headers).data
video_item.url = scrapertools.find_single_match(data_gvideo, patron_gvideo)
duplicated.append(video_item.url)
video_item.channel = item.channel
video_item.infoLabels = item.infoLabels
video_item.language=IDIOMAS['sub']
patron = 'var item = {id: (\d+), episode: (\d+),'
matches = re.compile(patron, re.DOTALL).findall(data)
for id, episode in matches:
data_json=jsontools.load(httptools.downloadpage(host+'/api/stream/?id=%s&episode=%s' %(id, episode)).data)
sources = data_json['options']
for src in sources:
url = sources[src]
if 'sgl.php' in url:
headers = {'referer':item.url}
patron_gvideo = "'file':'(.*?)','type'"
data_gvideo = httptools.downloadpage(url, headers = headers).data
url = scrapertools.find_single_match(data_gvideo, patron_gvideo)
new_item = Item(channel=item.channel, title='%s', url=url, language=IDIOMAS['sub'], action='play',
infoLabels=item.infoLabels)
if url != '' and url not in duplicated:
itemlist.append(new_item)
duplicated.append(url)
try:
itemlist = servertools.get_servers_itemlist(itemlist, lambda x: x.title % x.server.capitalize())
except:
pass
for video_url in matches:
video_data = httptools.downloadpage(video_url, headers=headers).data
server = ''
if 'Media player DMP4' in video_data:
url = scrapertools.find_single_match(video_data, "sources: \[\{'file':'(.*?)'")
server = 'Directo'
else:
url = scrapertools.find_single_match(video_data, '<iframe src="(.*?)".*?scrolling="no"')
new_item = Item(channel=item.channel, title='[%s] [%s]', url=url, action='play', language = language)
if server !='':
new_item.server = server
itemlist.append(new_item)
# for video_item in itemlist:
# if 'sgl.php' in video_item.url:
# headers = {'referer': item.url}
# patron_gvideo = "'file':'(.*?)','type'"
# data_gvideo = httptools.downloadpage(video_item.url, headers=headers).data
# video_item.url = scrapertools.find_single_match(data_gvideo, patron_gvideo)
#
# duplicated.append(video_item.url)
# video_item.channel = item.channel
# video_item.infoLabels = item.infoLabels
# video_item.language=IDIOMAS['sub']
#
# patron = 'var item = {id: (\d+), episode: (\d+),'
# matches = re.compile(patron, re.DOTALL).findall(data)
#
# for id, episode in matches:
# data_json=jsontools.load(httptools.downloadpage(host+'/api/stream/?id=%s&episode=%s' %(id, episode)).data)
# sources = data_json['options']
# for src in sources:
# url = sources[src]
#
# if 'sgl.php' in url:
# headers = {'referer':item.url}
# patron_gvideo = "'file':'(.*?)','type'"
# data_gvideo = httptools.downloadpage(url, headers = headers).data
# url = scrapertools.find_single_match(data_gvideo, patron_gvideo)
#
# new_item = Item(channel=item.channel, title='%s', url=url, language=IDIOMAS['sub'], action='play',
# infoLabels=item.infoLabels)
# if url != '' and url not in duplicated:
# itemlist.append(new_item)
# duplicated.append(url)
itemlist = servertools.get_servers_itemlist(itemlist, lambda x: x.title % (x.server.capitalize(), x.language))
# Requerido para FilterTools
@@ -215,8 +239,13 @@ def findvideos(item):
def search(item, texto):
logger.info()
itemlist = []
texto = texto.replace(" ", "+")
item.url = item.url + texto
item.type = 'search'
if texto != '':
return list_all(item)
try:
return list_all(item)
except:
itemlist.append(item.clone(url='', title='No hay elementos...', action=''))
return itemlist

View File

@@ -28,7 +28,8 @@
"lvalues": [
"No filtrar",
"Latino",
"VOS"
"VOS",
"Castellano"
]
},
{

View File

@@ -22,7 +22,7 @@ list_quality = []
list_servers = ['yourupload', 'openload', 'sendvid']
vars = {
'ef5ca18f089cf01316bbc967fa10f72950790c39ef5ca18f089cf01316bbc967fa10f72950790c39': 'http://www.estadepelis.com/',
'ef5ca18f089cf01316bbc967fa10f72950790c39ef5ca18f089cf01316bbc967fa10f72950790c39': 'http://tawnestdplsnetps.pw/',
'b48699bb49d4550f27879deeb948d4f7d9c5949a8': 'embed',
'JzewJkLlrvcFnLelj2ikbA': 'php?url=',
'p889c6853a117aca83ef9d6523335dc065213ae86': 'player',
@@ -194,8 +194,8 @@ def generos(item):
itemlist = []
norep = []
data = httptools.downloadpage(item.url).data
patron = '<li class="cat-item cat-item-.*?"><a href="([^"]+)">([^<]+)<\/a>'
logger.debug(data)
patron = '<li class="cat-item cat-item-.*?"><a href="([^"]+)".*?>([^<]+)<\/a>'
matches = re.compile(patron, re.DOTALL).findall(data)
for scrapedurl, scrapedtitle in matches:
@@ -342,7 +342,6 @@ def findvideos(item):
langs = dict()
data = httptools.downloadpage(item.url).data
logger.debug('data: %s' % data)
patron = '<a onclick="return (play\d+).*?;"> (.*?) <\/a>'
matches = re.compile(patron, re.DOTALL).findall(data)
@@ -365,26 +364,28 @@ def findvideos(item):
url = dec(encurl)
title = ''
server = ''
servers = {'/opl': 'openload', '/your': 'yourupload', '/sen': 'senvid', '/face': 'netutv', '/vk': 'vk'}
servers = {'/opl': 'openload', '/your': 'yourupload', '/sen': 'senvid', '/face': 'netutv', '/vk': 'vk',
'/jk':'streamcherry'}
server_id = re.sub(r'.*?embed|\.php.*', '', url)
if server_id and server_id in servers:
server = servers[server_id]
logger.debug('server_id: %s' % server_id)
if langs[scrapedlang] in list_language:
if (scrapedlang in langs) and langs[scrapedlang] in list_language:
language = IDIOMAS[langs[scrapedlang]]
else:
language = 'Latino'
if langs[scrapedlang] == 'Latino':
idioma = '[COLOR limegreen]LATINO[/COLOR]'
elif langs[scrapedlang] == 'Sub Español':
idioma = '[COLOR red]SUB[/COLOR]'
#
# if langs[scrapedlang] == 'Latino':
# idioma = '[COLOR limegreen]LATINO[/COLOR]'
# elif langs[scrapedlang] == 'Sub Español':
# idioma = '[COLOR red]SUB[/COLOR]'
if item.extra == 'peliculas':
title = item.contentTitle + ' (' + server + ') ' + idioma
title = item.contentTitle + ' (' + server + ') ' + language
plot = scrapertools.find_single_match(data, '<p>([^<]+)<\/p>')
else:
title = item.contentSerieName + ' (' + server + ') ' + idioma
title = item.contentSerieName + ' (' + server + ') ' + language
plot = item.plot
thumbnail = servertools.guess_server_thumbnail(title)
@@ -399,7 +400,6 @@ def findvideos(item):
quality='',
language=language
))
logger.debug('url: %s' % url)
# Requerido para FilterTools
itemlist = filtertools.get_links(itemlist, item, list_language)
@@ -423,23 +423,13 @@ def findvideos(item):
def play(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url, add_referer=True).data
data = httptools.downloadpage(item.url).data
if 'your' in item.url:
item.url = 'http://www.yourupload.com/embed/' + scrapertools.find_single_match(data, 'src=".*?code=(.*?)"')
itemlist.append(item)
else:
itemlist = servertools.find_video_items(data=data)
if config.get_videolibrary_support() and len(itemlist) > 0:
itemlist.append(Item(channel=item.channel,
title='[COLOR yellow]Añadir esta pelicula a la videoteca[/COLOR]',
url=item.url,
action="add_pelicula_to_library",
extra="findvideos",
contentTitle=item.contentTitle
))
return itemlist

View File

@@ -3,7 +3,7 @@
"name": "Mejor Torrent",
"active": true,
"adult": false,
"language": ["cast"],
"language": ["*"],
"thumbnail": "mejortorrent.png",
"banner": "mejortorrent.png",
"categories": [
@@ -17,14 +17,14 @@
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en busqueda global",
"default": false,
"default": true,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_torrent",
"id": "include_in_newest_peliculas",
"type": "bool",
"label": "Incluir en Novedades - Torrent",
"label": "Incluir en Novedades - Peliculas",
"default": true,
"enabled": true,
"visible": true

View File

@@ -105,7 +105,7 @@ def listado(item):
item.action = "findvideos"
item.contentType = "movie"
pag = False #No hay paginación
elif item.extra == "peliculas" and not item.tipo: #Desde Menún principal
elif item.extra == "peliculas" and not item.tipo: #Desde Menú principal
patron = '<a href="(/peli-descargar-torrent[^"]+)">?'
patron += '<img src="([^"]+)"[^<]+</a>'
patron_enlace = "/peli-descargar-torrent-\d+-(.*?)\.html"
@@ -278,24 +278,24 @@ def listado(item):
title = scrapedtitle
title_subs = ""
item_local.language = ""
if "[subs" in title or "[Subs" in title or "[VOS" in title or "[VOSE" in title or "(V.O.S.E" in title:
item_local.language = "VOS"
title = title.replace(" [Subs. integrados]", "").replace(" [subs. Integrados]", "").replace(" [VOSE", "").replace(" (V.O.S.E)", "")
if "latino" in title or "Latino" in title or "rgentina" in title:
item_local.language = "LAT"
item_local.language = []
if "[subs" in title.lower() or "[vos" in title.lower() or "v.o.s" in title.lower():
item_local.language += ["VOS"]
title = title.replace(" [Subs. integrados]", "").replace(" [subs. Integrados]", "").replace(" [VOSE", "").replace(" [VOS", "").replace(" (V.O.S.E)", "")
if "latino" in title.lower() or "argentina" in title.lower():
item_local.language += ["LAT"]
title = title.replace(" Latino", "").replace(" latino", "").replace(" Argentina", "").replace(" argentina", "")
title = title.replace("Castellano", "").replace("castellano", "").replace("inglés", "").replace("ingles", "").replace("Inglés", "").replace("Ingles", "")
if "3d" in title or "3D" in title: #Reservamos info de subtítulos para después de TMDB
title_subs = "[3D]"
if "3d" in title.lower(): #Reservamos info para después de TMDB
title_subs = " 3D"
title = title.replace(" [3d]", "").replace(" 3d", "").replace(" [3D]", "").replace(" 3D", "")
if "Temp" in title or "temp" in title: #Reservamos info de Temporada para después de TMDB
if "temp" in title.lower(): #Reservamos info de Temporada para después de TMDB
title_subs = "[Temp.]"
if "Audio" in title or "audio" in title: #Reservamos info de subtítulos para después de TMDB
if "audio" in title.lower(): #Reservamos info de audio para después de TMDB
title_subs = '[%s]' % scrapertools.find_single_match(title, r'(\[[a|A]udio.*?\])')
title = re.sub(r'\[[a|A]udio.*?\]', '', title)
if "[Dual" in title or "[dual" in title:
if "[dual" in title.lower():
title_subs = "[Dual]"
title = title = re.sub(r'\[D|dual.*?\]', '', title)
@@ -312,9 +312,9 @@ def listado(item):
# Ahora preparamos el título y la calidad tanto para series como para documentales y películas
# scrapedinfo tiene la calidad, pero solo en llamadas desde peliculas sin alfabeto
if item_local.extra == "series" or item_local.extra == "documentales":
item_local.quality = scrapertools.find_single_match(scrapedtitle, '.*?[\[|\(](.*?\d+.*?)[\)|\]]')
item_local.quality = scrapertools.find_single_match(scrapedtitle, '.*?[\[|\(](\d+.*?)[\)|\]]')
if item_local.quality:
title = re.sub(r'[\[|\(].*?\d+.*?[\)|\]]', '', title) # Quitar la calidad del título
title = re.sub(r'[\[|\(]\d+.*?[\)|\]]', '', title) # Quitar la calidad del título
info = ""
item_local.contentSerieName = scrapertools.find_single_match(title, '(.*?) - \d.*?')
if not item_local.contentSerieName:
@@ -325,7 +325,7 @@ def listado(item):
if info != "" and not item_local.quality:
item_local.quality = info
if "(HDRip" in title or "(BR" in title or "(HDRip" in title or "(VHSRip" in title or "(DVDRip" in title or "(FullB" in title or "(fullb" in title or "(Blu" in title or "(4K" in title or "(4k" in title or "(HEVC" in title or "(IMAX" in title or "Extendida" in title or "[720p]" in title or "[1080p]" in title:
if "(hdrip" in title.lower() or "(br" in title.lower() or "(vhsrip" in title.lower() or "(dvdrip" in title.lower() or "(fullb" in title.lower() or "(blu" in title.lower() or "(4k" in title.lower() or "(hevc" in title.lower() or "(imax" in title.lower() or "extendida" in title.lower() or "[720p]" in title.lower() or "[1080p]" in title.lower():
if not item_local.quality:
item_local.quality = scrapertools.find_single_match(title, r'\(.*?\)?\(.*?\)')
if not item_local.quality:
@@ -333,10 +333,10 @@ def listado(item):
title = re.sub(r'\(.*?\)?\(.*?\)', '', title)
title = re.sub(r'[\[|\(].*?[\)|\]]', '', title)
if not item_local.quality:
if "FullBluRay" in title or "fullbluray" in title:
if "fullbluray" in title.lower():
item_local.quality = "FullBluRay"
title = title.replace("FullBluRay", "").replace("fullbluray", "")
if "4K" in title or "4k" in title or "HDR" in title or "hdr" in title:
if "4k" in title.lower() or "hdr" in title.lower():
item_local.quality = "4K"
title = title.replace("4k-hdr", "").replace("4K-HDR", "").replace("hdr", "").replace("HDR", "").replace("4k", "").replace("4K", "")
title = title.replace("(", "").replace(")", "").replace("[", "").replace("]", "")
@@ -347,15 +347,19 @@ def listado(item):
if item_local.extra == "peliculas":
item_local.contentTitle = title
if "Saga" in item_local.contentTitle or "Saga" in item_local.contentSerieName:
if "saga" in item_local.contentTitle.lower() or "saga" in item_local.contentSerieName.lower():
item_local.contentTitle = item_local.contentTitle.replace("Saga ", "").replace("Saga", "")
item_local.contentSerieName = item_local.contentSerieName.replace("Saga ", "").replace("Saga", "")
title_subs = "[Saga]"
if "Colecc" in item_local.contentTitle or "Colecc" in item_local.contentSerieName:
if "colecc" in item_local.contentTitle.lower() or "colecc" in item_local.contentSerieName.lower():
item_local.contentTitle = item_local.contentTitle.replace("Coleccion ", "").replace("Coleccion", "")
item_local.contentSerieName = item_local.contentSerieName.replace("Coleccion ", "").replace("Coleccion", "")
title_subs = "[Coleccion]"
if "3D" in title_subs: #Si es 3D lo añadimos a calidad
item_local.quality = item_local.quality + title_subs
title_subs = ''
# Guardamos temporalmente info extra, si lo hay
item_local.extra = item_local.extra + title_subs
@@ -386,6 +390,15 @@ def listado(item):
if item_local.infoLabels['year'] == "-":
item_local.infoLabels['year'] = ''
item_local.infoLabels['aired'] = ''
# Preparamos el título para series, con los núm. de temporadas, si las hay
if item_local.contentType == "season" or item_local.contentType == "tvshow":
item_local.contentTitle= ''
rating = ''
if item_local.infoLabels['rating'] and item_local.infoLabels['rating'] != '0.0':
rating = float(item_local.infoLabels['rating'])
rating = round(rating, 1)
#Cambiamos el título si son capítulos múltiples
if scrapertools.find_single_match(item_local.url, r'\d+x\d+.*?(\w+.*?\d+x\d+)'):
@@ -395,20 +408,20 @@ def listado(item):
if not config.get_setting("unify"): #Si Titulos Inteligentes NO seleccionados:
if item_local.contentType == "episode":
if item_local.infoLabels['episodio_titulo']:
title = '%sx%s %s, %s [%s][%s][%s]' % (str(item_local.contentSeason), item_local.contentEpisodeNumber, item_local.infoLabels['episodio_titulo'], item_local.contentSerieName, scrapertools.find_single_match(str(item_local.infoLabels['aired']), r'\/(\d{4})'), item_local.quality, item_local.language)
title = '%sx%s %s, %s [%s][%s][%s]' % (str(item_local.contentSeason), item_local.contentEpisodeNumber, item_local.infoLabels['episodio_titulo'], item_local.contentSerieName, scrapertools.find_single_match(str(item_local.infoLabels['aired']), r'\/(\d{4})'), item_local.quality, str(item_local.language))
else:
title = '%sx%s %s [%s][%s][%s]' % (str(item_local.contentSeason), item_local.contentEpisodeNumber, item_local.contentSerieName, scrapertools.find_single_match(str(item_local.infoLabels['aired']), r'\/(\d{4})'), item_local.quality, item_local.language)
title = '%sx%s %s [%s][%s][%s]' % (str(item_local.contentSeason), item_local.contentEpisodeNumber, item_local.contentSerieName, scrapertools.find_single_match(str(item_local.infoLabels['aired']), r'\/(\d{4})'), item_local.quality, str(item_local.language))
item_local.infoLabels['title'] = item_local.contentSerieName
elif item_local.contentType == "season" or item_local.contentType == "tvshow":
if item_local.extra == "series" or temporada == "[Temp.]":
title = '%s - Temporada %s [%s][%s][%s]' % (item_local.contentSerieName, str(item_local.contentSeason), scrapertools.find_single_match(str(item_local.infoLabels['aired']), r'\/(\d{4})'), item_local.quality, item_local.language)
title = '%s - Temporada %s [COLOR yellow][%s][/COLOR] [%s] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (item_local.contentSerieName, str(item_local.contentSeason), scrapertools.find_single_match(str(item_local.infoLabels['aired']), r'\/(\d{4})'), rating, item_local.quality, str(item_local.language))
else:
title = '%s [%s][%s][%s]' % (item_local.contentSerieName, scrapertools.find_single_match(str(item_local.infoLabels['aired']), r'\/(\d{4})'), item_local.quality, item_local.language)
title = '%s [COLOR yellow][%s][/COLOR] [%s] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (item_local.contentSerieName, scrapertools.find_single_match(str(item_local.infoLabels['aired']), r'\/(\d{4})'), rating, item_local.quality, str(item_local.language))
elif item_local.contentType == "movie":
title = '%s [%s][%s][%s]' % (title, str(item_local.infoLabels['year']), item_local.quality, item_local.language)
title = '%s [COLOR yellow][%s][/COLOR] [%s] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (title, str(item_local.infoLabels['year']), rating, item_local.quality, str(item_local.language))
if config.get_setting("unify"): #Si Titulos Inteligentes SÍ seleccionados:
if item_local.contentType == "episode":
if item_local.infoLabels['episodio_titulo']:
@@ -424,7 +437,9 @@ def listado(item):
title = '%s -%s-' % (item_local.contentSerieName, scrapertools.find_single_match(str(item_local.infoLabels['aired']), r'\/(\d{4})'))
title_subs = title_subs.replace("[", "-").replace("]", "-")
title = title.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "")
title = title.replace("--", "").replace(" []", "").replace("()", "").replace("(/)", "").replace("[/]", "")
title = re.sub(r'\s\[COLOR \w+\]\[\]\[\/COLOR\]', '', title)
title = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', title)
item_local.title = title + title_subs
item_local.contentTitle += title_subs #añadimos info adicional para display
@@ -441,7 +456,7 @@ def listado(item):
itemlist.append(
Item(channel=item.channel, action="listado", title="[COLOR gold][B]Pagina siguiente >>[/B][/COLOR]", url=url_next_page, next_page=next_page, cnt_pag=cnt_pag, pag=pag, modo=modo, extra=item.extra, tipo=item.tipo))
logger.debug(url_next_page + " / " + next_page + " / " + str(matches_cnt) + " / " + str(cnt_pag) + " / " + str(pag) + " / " + modo + " / " + item.extra + " / " + str(item.tipo))
#logger.debug(url_next_page + " / " + next_page + " / " + str(matches_cnt) + " / " + str(cnt_pag) + " / " + str(pag) + " / " + modo + " / " + item.extra + " / " + str(item.tipo))
return itemlist
@@ -452,6 +467,7 @@ def listado_busqueda(item):
url_next_page ='' # Controlde paginación
cnt_tot = 30 # Poner el num. máximo de items por página
pag = False # No hay paginación en la web
category = "" # Guarda la categoria que viene desde una busqueda global
data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, post=item.post).data)
#logger.debug(data)
@@ -478,6 +494,7 @@ def listado_busqueda(item):
patron_enlace = "\/doc-descargar-torrent-\d+-\d+-(.*?)\.html"
matches += re.compile(patron, re.DOTALL).findall(data)
#logger.debug("MATCHES: ")
#logger.debug(matches)
# Preparamos la paginación. Con un número variable de links, sin límite
@@ -518,6 +535,7 @@ def listado_busqueda(item):
# Creamos "item_local" y lo limpiamos un poco de algunos restos de item
item_local = item.clone()
if item_local.category:
category = item.category
del item_local.category
if item_local.tipo:
del item_local.tipo
@@ -531,14 +549,17 @@ def listado_busqueda(item):
# Limpiamos títulos, Sacamos datos de calidad, audio y lenguaje
scrapedtitle = re.sub('\r\n', '', scrapedtitle).decode('iso-8859-1').encode('utf8').strip()
title = scrapedtitle
title = title.replace("á", "a").replace("é", "e").replace("í", "i").replace("ó", "o").replace("ú", "u").replace("ü", "u").replace("�", "ñ").replace("ñ", "ñ")
title_subs = ""
item_local.language = ""
if "[subs" in title or "[Subs" in title or "[VOS" in title or "[VOSE" in title or "(V.O.S.E" in title:
item_local.language = "VOS"
title = title.replace(" [Subs. integrados]", "").replace(" [subs. Integrados]", "").replace(" [VOSE", "").replace(" (V.O.S.E)", "")
if "latino" in title or "Latino" in title or "rgentina" in title:
item_local.language = "LAT"
#Determinamos y marcamos idiomas distintos del castellano
item_local.language = []
if "[vos" in title.lower() or "v.o.s" in title.lower() or "vo" in title.lower():
item_local.language += ["VOS"]
title = title.replace(" [Subs. integrados]", "").replace(" [subs. Integrados]", "").replace(" [VOSE", "").replace(" [VOS", "").replace(" (V.O.S.E)", "").replace(" VO", "")
if "latino" in title.lower() or "argentina" in title.lower():
item_local.language += ["LAT"]
title = title.replace(" Latino", "").replace(" latino", "").replace(" Argentina", "").replace(" argentina", "")
title = title.replace("Castellano", "").replace("castellano", "").replace("inglés", "").replace("ingles", "").replace("Inglés", "").replace("Ingles", "")
@@ -552,11 +573,11 @@ def listado_busqueda(item):
title = re.sub(r'\[[a|A]udio.*?\]', '', title)
if "[Dual" in title or "[dual" in title:
title_subs = "[Dual]"
title = title = re.sub(r'\[D|dual.*?\]', '', title)
title = title = re.sub(r'\[[D|d]ual.*?\]', '', title)
if title.endswith('.'):
title = title[:-1]
title = title.replace("á", "a", 1).replace("é", "e", 1).replace("í", "i", 1).replace("ó", "o", 1).replace("ú", "u", 1).replace("ü", "u", 1)
if not title:
title = "dummy"
title = scrapertools.remove_htmltags(title)
@@ -634,6 +655,9 @@ def listado_busqueda(item):
#logger.debug(item_local)
if not category: #Si este campo no existe es que viene de la primera pasada de una búsqueda global
return itemlist #Retornamos sin pasar por la fase de maquillaje para ahorra tiempo
#Llamamos a TMDB para que complete InfoLabels desde itemlist. Mejor desde itemlist porque envía las queries en paralelo
tmdb.set_infoLabels(itemlist, seekTmdb = True)
@@ -655,16 +679,25 @@ def listado_busqueda(item):
item_local.infoLabels['year'] = ''
item_local.infoLabels['aired'] = ''
# Preparamos el título para series, con los núm. de temporadas, si las hay
if item_local.contentType == "season" or item_local.contentType == "tvshow":
item_local.contentTitle= ''
rating = ''
if item_local.infoLabels['rating'] and item_local.infoLabels['rating'] != '0.0':
rating = float(item_local.infoLabels['rating'])
rating = round(rating, 1)
# Ahora maquillamos un poco los titulos dependiendo de si se han seleccionado títulos inteleigentes o no
if not config.get_setting("unify"): #Si Titulos Inteligentes NO seleccionados:
if item_local.contentType == "season" or item_local.contentType == "tvshow":
if item_local.extra == "series" or temporada == "[Temp.]":
title = '%s - Temporada %s [%s][%s][%s]' % (item_local.contentSerieName, str(item_local.contentSeason), scrapertools.find_single_match(str(item_local.infoLabels['aired']), r'\/(\d{4})'), item_local.quality, item_local.language)
title = '%s - Temporada %s [COLOR yellow][%s][/COLOR] [%s] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (item_local.contentSerieName, str(item_local.contentSeason), scrapertools.find_single_match(str(item_local.infoLabels['aired']), r'\/(\d{4})'), rating, item_local.quality, str(item_local.language))
else:
title = '%s [%s][%s][%s]' % (item_local.contentSerieName, scrapertools.find_single_match(str(item_local.infoLabels['aired']), r'\/(\d{4})'), item_local.quality, item_local.language)
title = '%s [COLOR yellow][%s][/COLOR] [%s] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (item_local.contentSerieName, scrapertools.find_single_match(str(item_local.infoLabels['aired']), r'\/(\d{4})'), rating, item_local.quality, str(item_local.language))
elif item_local.contentType == "movie":
title = '%s [%s][%s][%s]' % (title, str(item_local.infoLabels['year']), item_local.quality, item_local.language)
title = '%s [COLOR yellow][%s][/COLOR] [%s] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (title, str(item_local.infoLabels['year']), rating, item_local.quality, str(item_local.language))
if config.get_setting("unify"): #Si Titulos Inteligentes SÍ seleccionados:
if item_local.contentType == "season" or item_local.contentType == "tvshow":
@@ -674,7 +707,9 @@ def listado_busqueda(item):
title = '%s -%s-' % (item_local.contentSerieName, scrapertools.find_single_match(str(item_local.infoLabels['aired']), r'\/(\d{4})'))
title_subs = title_subs.replace("[", "-").replace("]", "-")
title = title.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "")
title = title.replace("--", "").replace(" []", "").replace("()", "").replace("(/)", "").replace("[/]", "")
title = re.sub(r'\s\[COLOR \w+\]\[\]\[\/COLOR\]', '', title)
title = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', title)
item_local.title = title + title_subs
item_local.contentTitle += title_subs #añadimos info adicional para display
@@ -685,25 +720,26 @@ def listado_busqueda(item):
itemlist.append(
Item(channel=item.channel, action="listado_busqueda", title="[COLOR gold][B]Pagina siguiente >>[/B][/COLOR]", url=url_next_page, next_page=next_page, cnt_pag=cnt_pag, pag=pag, modo=modo, extra=item.extra, tipo=item.tipo))
logger.debug(url_next_page + " / " + next_page + " / " + str(matches_cnt) + " / " + str(cnt_pag) + " / " + str(pag) + " / " + modo + " / " + item.extra + " / " + str(item.tipo))
#logger.debug(url_next_page + " / " + next_page + " / " + str(matches_cnt) + " / " + str(cnt_pag) + " / " + str(pag) + " / " + modo + " / " + item.extra + " / " + str(item.tipo))
return itemlist
def findvideos(item):
#import xbmc
import xbmc
logger.info()
itemlist = []
# Saber si estamos en una ventana emergente lanzada desde una viñeta del menú principal,
# con la función "play_from_library"
#unify_status = False
#if xbmc.getCondVisibility('Window.IsMedia') == 1:
# unify_status = config.get_setting("unify")
unify_status = config.get_setting("unify")
unify_status = False
if xbmc.getCondVisibility('Window.IsMedia') == 1:
unify_status = config.get_setting("unify")
# Obtener la información actualizada del Episodio, si no la hay
if not item.infoLabels['tmdb_id']:
if not item.infoLabels['tmdb_id'] or (not item.infoLabels['episodio_titulo'] and item.contentType == 'episode'):
tmdb.set_infoLabels(item, True)
elif (not item.infoLabels['tvdb_id'] and item.contentType == 'episode') or item.contentChannel == "videolibrary":
tmdb.set_infoLabels(item, True)
if item.post: #Puede traer datos para una llamada "post". De momento usado para documentales, pero podrían ser series
@@ -720,74 +756,84 @@ def findvideos(item):
#logger.debug(matches)
for scrapedurl in matches:
#Generamos una copia de Item para trabajar sobre ella
item_local = item.clone()
url = urlparse.urljoin(item.url, scrapedurl)
# Localiza el .torrent en el siguiente link
if not item.post: # Si no es llamada con Post, hay que bajar un nivel más
torrent_data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(url).data)
#logger.debug(torrent_data)
link = scrapertools.get_match(torrent_data, ">Pincha.*?<a href='(.*?\/uploads\/torrents\/\w+\/.*?\.torrent)'")
link = urlparse.urljoin(url, link)
item_local.url = scrapertools.get_match(torrent_data, ">Pincha.*?<a href='(.*?\/uploads\/torrents\/\w+\/.*?\.torrent)'")
item_local.url = urlparse.urljoin(url, item_local.url)
else:
link = url # Ya teníamos el link desde el primer nivel (documentales)
link = link.replace(" ", "%20")
item_local.url = url # Ya teníamos el link desde el primer nivel (documentales)
item_local.url = item_local.url.replace(" ", "%20")
# Añadir el año del episodio para series y pelis, si hace falta
year = item.infoLabels['year']
if item.contentType == 'episode':
if item.infoLabels['aired']:
year = scrapertools.find_single_match(str(item.infoLabels['aired']), r'\/(\d{4})')
if item.infoLabels['episodio_titulo']:
title_torrent = '%sx%s - %s' % (str(item.contentSeason), str(item.contentEpisodeNumber), item.infoLabels['episodio_titulo'])
else:
title_torrent = '%sx%s' % (str(item.contentSeason), str(item.contentEpisodeNumber))
if not scrapertools.find_single_match(title_torrent, r'(\d{4})'):
title = '%s [%s] %s' % (title_torrent, year, item.contentSerieName)
else:
title = '%s, %s' % (title_torrent, item.contentSerieName)
item.infoLabels['year'] = year
#Pintamos el pseudo-título con toda la información disponible del vídeo
item_local.action = ""
item_local.server = "torrent"
else:
title = item.title
title_torrent = item.contentTitle
title_torrent = re.sub(r"\[\d+\]", "", title_torrent)
# Pone la calidad y lenguaje si es necesario
if not item.infoLabels['quality']:
if "HDTV" in link or "720p" in link or "1080p" in link or "4K" in link:
item.infoLabels['quality'] = scrapertools.find_single_match(link, '.*?_([H|7|1|4].*?)\.torrent')
item.infoLabels['quality'] = item.infoLabels['quality'].replace("_", " ")
if item.infoLabels['quality']:
if item.infoLabels['quality'] not in title:
title = '%s [%s]' % (title, item.infoLabels['quality'])
if item.infoLabels['quality'] not in title_torrent:
if not unify_status or item.contentChannel == "videolibrary":
title_torrent = '%s [%s]' % (title_torrent, item.infoLabels['quality'])
if item.language:
title = '%s [%s]' % (title, item.language)
# Extrae la dimensión del vídeo
if scrapertools.find_single_match(link, '.*?(\d{1,3},\d{1,2}\w+)\.torrent'):
if not unify_status: #Si Titulos Inteligentes NO seleccionados:
title = '%s[%s]' % (title, scrapertools.find_single_match(link, '.*?(\d{1,3},\d{1,2}\w+)\.torrent'))
else:
title = '%s - %s' % (title, scrapertools.find_single_match(link, '.*?(\d{1,3},\d{1,2}\w+)\.torrent'))
# Maquilla la seudo-etiqueta de Enlances Ver, incluyendo el Servidor cuando es llamado desde Videoteca
if not unify_status: #Si Titulos Inteligentes NO seleccionados:
title = '[COLOR gold]**- Enlaces Ver: [/COLOR]%s -**' % (title)
title_torrent = '[COLOR yellow][Torrent]:[/COLOR] %s' % (title_torrent)
else:
title = '[COLOR gold]Enlaces Ver: [/COLOR]%s' % (title)
#Limpiamos de año y rating de episodios
if item_local.infoLabels['episodio_titulo']:
item_local.infoLabels['episodio_titulo'] = re.sub(r'\s?\[.*?\]', '', item_local.infoLabels['episodio_titulo'])
if item_local.infoLabels['episodio_titulo'] == item_local.contentSerieName:
item_local.infoLabels['episodio_titulo'] = ''
if config.get_setting("quit_channel_name", "videolibrary") == 1 and item.contentChannel == "videolibrary":
title = '%s: %s' % (item.channel.capitalize(), title)
rating = '' #Ponemos el rating
if item_local.infoLabels['rating'] and item_local.infoLabels['rating'] != '0.0':
rating = float(item_local.infoLabels['rating'])
rating = round(rating, 1)
# Extrae la dimensión del vídeo
size = scrapertools.find_single_match(item_local.url, '(\d{1,3},\d{1,2}?\w+)\.torrent')
size = size.upper().replace(".", ",").replace("G", " G").replace("M", " M") #sustituimos . por , porque Unify lo borra
item_local.quality = re.sub('\s\[\d+,?\d*?\s\w[b|B]\]', '', item_local.quality) #Quitamos size de calidad, si lo traía
if size:
item_local.title = re.sub('\s\[\d+,?\d*?\s\w[b|B]\]', '', item_local.title) #Quitamos size de título, si lo traía
item_local.title = '%s [%s]' % (item_local.title, size) #Agregamos size al final del título
# Poner la calidad, si es necesario
if not item_local.quality:
if "HDTV" in item_local.url or "720p" in item_local.url or "1080p" in item_local.url or "4K" in item_local.url:
item_local.quality = scrapertools.find_single_match(item_local.url, '.*?_([H|7|1|4].*?)\.torrent')
item_local.quality = item_local.quality.replace("_", " ")
if item_local.contentType == "episode":
title = '%sx%s' % (str(item_local.contentSeason), str(item_local.contentEpisodeNumber).zfill(2))
if item_local.infoLabels['temporada_num_episodios']:
title = '%s (de %s)' % (title, str(item_local.infoLabels['temporada_num_episodios']))
title = '%s %s' % (title, item_local.infoLabels['episodio_titulo'])
title_gen = '%s, %s [COLOR yellow][%s][/COLOR] [%s] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR] [%s]' % (title, item_local.contentSerieName, item_local.infoLabels['year'], rating, item_local.quality, str(item_local.language), size)
else:
title = item_local.title
title_gen = title
itemlist.append(item.clone(title=title, action="")) #Título con todos los datos del vídeo
title_gen = re.sub(r'\s\[COLOR \w+\]\[\]\[\/COLOR\]', '', title_gen) #Quitamos etiquetas vacías
title_gen = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', title_gen) #Quitamos colores vacíos
title_gen = title_gen.replace(" []", "") #Quitamos etiquetas vacías
if not unify_status: #Si Titulos Inteligentes NO seleccionados:
title_gen = '**- [COLOR gold]Enlaces Ver: [/COLOR]%s[COLOR gold] -**[/COLOR]' % (title_gen)
else:
title_gen = '[COLOR gold]Enlaces Ver: [/COLOR]%s' % (title_gen)
itemlist.append(item.clone(action="play", server="torrent", title=title_torrent, url=link))
if config.get_setting("quit_channel_name", "videolibrary") == 1 and item_local.contentChannel == "videolibrary":
title_gen = '%s: %s' % (item_local.channel.capitalize(), title_gen)
logger.debug("title=[" + title + "], torrent=[ " + link + " ], url=[ " + url + " ], post=[" + item.post + "], thumbnail=[ " + item.thumbnail + " ]")
itemlist.append(item_local.clone(title=title_gen)) #Título con todos los datos del vídeo
#Ahora pintamos el link del Torrent, si lo hay
if item_local.url: # Hay Torrent ?
item_local.title = '[COLOR yellow][?][/COLOR] [COLOR yellow][Torrent][/COLOR] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (item_local.quality, str(item_local.language)) #Preparamos título de Torrent
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\]\[\/COLOR\]', '', item_local.title) #Quitamos etiquetas vacías
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', item_local.title) #Quitamos colores vacíos
item_local.alive = "??" #Calidad del link sin verificar
item_local.action = "play" #Visualizar vídeo
itemlist.append(item_local.clone()) #Pintar pantalla
#logger.debug("title=[" + title + "], torrent=[ " + item_local.url + " ], url=[ " + url + " ], post=[" + item.post + "], thumbnail=[ " + item.thumbnail + " ]")
return itemlist
@@ -809,7 +855,7 @@ def episodios(item):
"(<form name='episodios' action='secciones.php\?sec=descargas\&ap=contar_varios' method='post'>.*?)</form>")
# Prepara el patrón de búsqueda de: URL, título, fechas y dos valores mas sin uso
if item.extra == 'series':
if '/serie' in item.url:
patron = ".*?<td bgcolor[^>]+><a href='(.*?)'>?([^>]+)<\/a><\/td>.*?"
else:
patron = "<form name='episodios' action='(.*?)' method='post'>.*?<td bgcolor[^>]+>(.*?)<\/td>.*?"
@@ -824,7 +870,7 @@ def episodios(item):
#logger.debug(data)
# Recorremos todos los episodios generando un Item local por cada uno en Itemlist
for scrapedurl, scrapedtitle, fecha, name, value in matches:
for scrapedurl, scrapedtitle, year, name, value in matches:
item_local = item.clone()
item_local.action = "findvideos"
item_local.contentType = "episode"
@@ -837,9 +883,9 @@ def episodios(item):
if scrapedtitle.endswith('.'):
scrapedtitle = scrapedtitle[:-1]
if not scrapedtitle:
scrapedtitle = "dummy"
scrapedtitle = "SIN TITULO"
if item.extra == 'series':
if '/serie' in item.url:
title = scrapedtitle.lower()
epi = title.split("x")
if len(epi) > 1:
@@ -855,50 +901,83 @@ def episodios(item):
item_local.url = host + "/secciones.php?sec=descargas&ap=contar_varios"
item_local.post = urllib.urlencode({name: value, "total_capis": total_capis, "tabla": tabla, "titulo": titulo_post})
if year:
item_local.infoLabels['year'] = scrapertools.find_single_match(year, r'(\d{4})')
item_local.title = scrapedtitle
itemlist.append(item_local.clone())
# Llamamos a TMDB para que complete el episodio en InfoLabels
tmdb.set_infoLabels(itemlist, seekTmdb = True)
if len(itemlist) > 1:
itemlist = sorted(itemlist, key=lambda it: (int(it.contentSeason), int(it.contentEpisodeNumber)))
# Pasada para maqullaje de los títulos obtenidos desde TMDB
num_episodios = 1
num_temporada = 1
for item_local in itemlist:
title = item_local.title
# Si no hay datos de TMDB, pongo los datos locales que conozco
if item_local.infoLabels['aired']:
year = scrapertools.find_single_match(str(item_local.infoLabels['aired']), r'\/(\d{4})')
else:
year = scrapertools.find_single_match(fecha, r'(\d{4})')
if not item_local.infoLabels['year']:
item_local.infoLabels['year'] = year
item_local.infoLabels['year'] = scrapertools.find_single_match(str(item_local.infoLabels['aired']), r'\/(\d{4})')
# Si son episodios múltiples, se toman los datos locales para nombre de episodio
if scrapertools.find_single_match(title, r'\d+x\d+.*?(\w+.*?\d+x\d+)'):
item_local.infoLabels['episodio_titulo'] = scrapertools.find_single_match(title, r'\d+x\d+.*?(\w+.*?\d+x\d+)')
if scrapertools.find_single_match(item_local.title, r'\d+x\d+.*?(\w+.*?\d+x\d+)'):
item_local.infoLabels['episodio_titulo'] = scrapertools.find_single_match(item_local.title, r'\d+x\d+.*?(\w+.*?\d+x\d+)')
item_local.title = '%sx%s - %s' % (str(item_local.contentSeason), str(item_local.contentEpisodeNumber).zfill(2), item_local.infoLabels['episodio_titulo'])
else:
item_local.title = '%sx%s -' % (str(item_local.contentSeason), str(item_local.contentEpisodeNumber).zfill(2))
rating = ''
if item_local.infoLabels['rating'] and item_local.infoLabels['rating'] != '0.0':
rating = float(item_local.infoLabels['rating'])
rating = round(rating, 1)
#Salvamos en número de episodios de la temporada
if num_temporada != item_local.contentSeason:
num_temporada = item_local.contentSeason
num_episodios = 0
if item_local.infoLabels['temporada_num_episodios']:
num_episodios = item_local.infoLabels['temporada_num_episodios']
#Preparamos el título para que sea compatible con Añadir Serie a Videoteca
if item_local.infoLabels['episodio_titulo']:
item_local.title = '%sx%s %s, %s [%s]' % (str(item_local.contentSeason), item_local.contentEpisodeNumber, item_local.infoLabels['episodio_titulo'], item_local.contentSerieName, year)
item_local.infoLabels['episodio_titulo'] = '%s [%s]' % (item_local.infoLabels['episodio_titulo'], year)
if "al" in item_local.title: #Si son episodios múltiples, ponemos nombre de serie
item_local.title = '%s %s' % (item_local.title, item_local.contentSerieName)
item_local.infoLabels['episodio_titulo'] = '%s %s' % (scrapertools.find_single_match(item_local.title, r'(al \d+)'), item_local.contentSerieName)
else:
item_local.title = '%s %s' % (item_local.title, item_local.infoLabels['episodio_titulo'])
if item_local.infoLabels['year']:
item_local.infoLabels['episodio_titulo'] = '%s [%s]' % (item_local.infoLabels['episodio_titulo'], item_local.infoLabels['year'])
if rating:
item_local.infoLabels['episodio_titulo'] = '%s [%s]' % (item_local.infoLabels['episodio_titulo'], rating)
else:
item_local.title = '%sx%s %s [%s]' % (str(item_local.contentSeason), item_local.contentEpisodeNumber, item_local.contentSerieName, year)
#Ahora maquillamos un poco los titulos dependiendo de si se han seleccionado títulos inteleigentes o no
if not config.get_setting("unify"): #Si Titulos Inteligentes NO seleccionados: añadir calidad, lenguaje
item_local.title = '%s [%s][%s]' % (item_local.title, item_local.quality, item_local.language)
item_local.title = '%s %s' % (item_local.title, item_local.contentSerieName)
item_local.infoLabels['episodio_titulo'] = '%s [%s] [%s]' % (item_local.contentSerieName, item_local.infoLabels['year'], rating)
item_local.infoLabels['title'] = item_local.infoLabels['episodio_titulo']
item_local.title = '%s [COLOR yellow][%s][/COLOR] [%s] [COLOR limegreen][%s][/COLOR] [COLOR red][%s][/COLOR]' % (item_local.title, item_local.infoLabels['year'], rating, item_local.quality, str(item_local.language))
#Quitamos campos vacíos
if item_local.infoLabels['episodio_titulo']:
item_local.infoLabels['episodio_titulo'] = item_local.infoLabels['episodio_titulo'].replace("[]", "")
item_local.title = item_local.title.replace("[]", "")
item_local.infoLabels['episodio_titulo'] = item_local.infoLabels['episodio_titulo'].replace(" []", "")
item_local.title = item_local.title.replace(" []", "")
item_local.title = re.sub(r'\s\[COLOR \w+\]\[\]\[\/COLOR\]', '', item_local.title)
item_local.title = re.sub(r'\s\[COLOR \w+\]-\[\/COLOR\]', '', item_local.title)
if num_episodios < item_local.contentEpisodeNumber:
num_episodios = item_local.contentEpisodeNumber
if num_episodios and not item_local.infoLabels['temporada_num_episodios']:
item_local.infoLabels['temporada_num_episodios'] = num_episodios
#logger.debug("title=[" + item_local.title + "], url=[" + item_local.url + "], item=[" + str(item_local) + "]")
if config.get_videolibrary_support() and len(itemlist) > 0:
itemlist.append(item.clone(title="[COLOR yelow]Añadir esta serie a la videoteca[/COLOR]", action="add_serie_to_library", extra="episodios"))
title = ''
if item_local.infoLabels['temporada_num_episodios']:
title = ' [Temp. de %s ep.]' % item_local.infoLabels['temporada_num_episodios']
itemlist.append(item.clone(title="[COLOR yellow]Añadir esta serie a la videoteca[/COLOR]" + title, action="add_serie_to_library", extra="episodios"))
return itemlist
def search(item, texto):
@@ -923,7 +1002,7 @@ def newest(categoria):
itemlist = []
item = Item()
try:
if categoria == 'torrent':
if categoria == 'peliculas':
item.url = host + "/secciones.php?sec=ultimos_torrents"
item.extra = "novedades"
item.channel = "mejortorrent"

View File

@@ -323,6 +323,7 @@ def findvideos(item):
matches = re.compile(patron, re.DOTALL).findall(data)
for option, videoitem in matches:
sub = ''
lang = scrapertools.find_single_match(src,
'<a href=#(?:div|player)%s.*?>.*?(.*?)<\/a>' % option)
if 'audio ' in lang.lower():
@@ -333,12 +334,21 @@ def findvideos(item):
video_urls = scrapertools.find_multiple_matches(data, '<li><a href=(.*?)><span')
for video in video_urls:
video_data = get_source(video)
if not 'fastplay' in video:
if sub == '' and 'sub' in lang:
sub_file = scrapertools.find_single_match(video, '&sub=([^+]+)')
sub = 'http://miradetodo.io/stream/subt/%s' % sub_file
if 'openload' in video or 'your' in video:
new_url= scrapertools.find_single_match(video_data,'<li><a href=(.*?srt)><span')
data_final = get_source(new_url)
else:
data_final=video_data
url = scrapertools.find_single_match(data_final,'iframe src=(.*?) scrolling')
if url == '':
url = scrapertools.find_single_match(data_final, "'file':'(.*?)'")
quality = item.quality
server = servertools.get_server_from_url(url)
title = item.contentTitle + ' [%s] [%s]' % (server, lang)
@@ -346,8 +356,8 @@ def findvideos(item):
title = item.contentTitle + ' [%s] [%s] [%s]' % (server, quality, lang)
if url!='':
itemlist.append(item.clone(title=title, url=url, action='play', server=server, language=lang))
itemlist.append(item.clone(title=title, url=url, action='play', language=lang, subtitle=sub))
itemlist = servertools.get_servers_itemlist(itemlist)
if item.infoLabels['mediatype'] == 'movie':
if config.get_videolibrary_support() and len(itemlist) > 0 and item.extra != 'findvideos':
itemlist.append(Item(channel=item.channel,

View File

@@ -22,36 +22,431 @@
"visible": true
},
{
"id": "include_in_newest_peliculas",
"type": "bool",
"label": "Incluir en Novedades - Peliculas",
"default": true,
"id": "clonenewpct1_ver_enlaces_veronline",
"type": "list",
"label": "Mostrar enlaces Ver Online",
"default": 1,
"enabled": true,
"visible": true
"visible": true,
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20"
]
},
{
"id": "include_in_newest_series",
"type": "bool",
"label": "Incluir en Novedades - Episodios de series",
"default": true,
"id": "clonenewpct1_verificar_enlaces_veronline",
"type": "list",
"label": "Verificar enlaces Ver Online",
"default": 1,
"enabled": true,
"visible": true
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20"
]
},
{
"id": "include_in_newest_torrent",
"id": "clonenewpct1_verificar_enlaces_veronline_validos",
"type": "bool",
"label": "Incluir en Novedades - Torrent",
"label": "¿Contar sólo enlaces 'verificados' en Ver Online?",
"default": true,
"enabled": true,
"visible": true
"visible": "!eq(-1,'No') + !eq(-2,'No')"
},
{
"id": "include_in_newest_4k",
"id": "clonenewpct1_excluir1_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 9,
"max_excl": 5,
"enabled": true,
"visible": "!eq(-3,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir2_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 12,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir3_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 20,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir4_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir5_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_ver_enlaces_descargas",
"type": "list",
"label": "Mostrar enlaces Descargas",
"default": 0,
"enabled": true,
"visible": true,
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20",
"30",
"50",
"100"
]
},
{
"id": "clonenewpct1_verificar_enlaces_descargas",
"type": "list",
"label": "Verificar enlaces Descargas",
"default": 1,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20",
"30",
"50",
"100"
]
},
{
"id": "clonenewpct1_verificar_enlaces_descargas_validos",
"type": "bool",
"label": "Incluir en Novedades - 4K",
"label": "¿Contar sólo enlaces 'verificados' en Descargar?",
"default": true,
"enabled": true,
"visible": true
"visible": "!eq(-1,'No') + !eq(-2,'No')"
},
{
"id": "clonenewpct1_excluir1_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Ver Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-3,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir2_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Ver Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir3_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir4_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir5_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,88 @@
{
"id": "pelismedia",
"name": "PelisMedia",
"active": true,
"adult": false,
"language": ["lat"],
"thumbnail": "https://s14.postimg.cc/eclmujsch/12715507_1112827435402340_7302361220060367711_n.jpg",
"categories": ["movie", "tvshow"],
"settings": [
{
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en busqueda global",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_peliculas",
"type": "bool",
"label": "Incluir en Novedades - Peliculas",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_series",
"type": "bool",
"label": "Incluir en Novedades - Series",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_terror",
"type": "bool",
"label": "Incluir en Novedades - terror",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_latino",
"type": "bool",
"label": "Incluir en Novedades - Latino",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "perfil",
"type": "list",
"label": "Perfil de color",
"default": 2,
"enabled": true,
"visible": true,
"lvalues": [
"Perfil 3",
"Perfil 2",
"Perfil 1",
"Ninguno"
]
},
{
"id": "episodios_x_pag",
"type": "list",
"label": "Episodios por página",
"default": 2,
"enabled": true,
"visible": true,
"lvalues": [
"10",
"15",
"20",
"25",
"30"
]
},
{
"id": "temporada_o_todos",
"type": "bool",
"label": "Mostrar temporadas",
"default": true,
"enabled": true,
"visible": true
}
]
}

View File

@@ -0,0 +1,289 @@
# -*- coding: utf-8 -*-
from core import httptools
from core import scrapertools
from core import servertools
from core import tmdb
from core.item import Item
from platformcode import config, logger
from channelselector import get_thumb
__perfil__ = int(config.get_setting('perfil', 'pelisultra'))
# Fijar perfil de color
perfil = [['0xFFFFE6CC', '0xFFFFCE9C', '0xFF994D00'],
['0xFFA5F6AF', '0xFF5FDA6D', '0xFF11811E'],
['0xFF58D3F7', '0xFF2E9AFE', '0xFF2E64FE']]
if __perfil__ < 3:
color1, color2, color3 = perfil[__perfil__]
else:
color1 = color2 = color3 = ""
host="http://www.pelismedia.com"
def mainlist(item):
logger.info()
itemlist = []
item.thumbnail = get_thumb('movies', auto=True)
itemlist.append(item.clone(title="Películas:", folder=False, text_color="0xFFD4AF37", text_bold=True))
itemlist.append(Item(channel = item.channel, title = " Novedades", action = "peliculas", url = host,
thumbnail=get_thumb('newest', auto=True)))
itemlist.append(Item(channel = item.channel, title = " Estrenos", action = "peliculas", url = host + "/genero/estrenos/",
thumbnail=get_thumb('premieres', auto=True)))
itemlist.append(Item(channel = item.channel, title = " Por género", action = "genero", url = host + "/genero/",
thumbnail=get_thumb('genres', auto=True) ))
item.thumbnail = get_thumb('tvshows', auto=True)
itemlist.append(item.clone(title="Series:", folder=False, text_color="0xFFD4AF37", text_bold=True))
itemlist.append(Item(channel = item.channel, title = " Todas las series", action = "series", url = host + "/series/",
thumbnail=get_thumb('all', auto=True)))
itemlist.append(Item(channel = item.channel, title = " Nuevos episodios", action = "nuevos_episodios", url = host + "/episodio/",
thumbnail=get_thumb('new episodes', auto=True)))
itemlist.append(Item(channel = item.channel, title = "Buscar...", action = "search", url = host, text_color="red", text_bold=True,
thumbnail=get_thumb('search', auto=True)))
itemlist.append(item.clone(title="Configurar canal...", text_color="green", action="configuracion", text_bold=True))
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 in ["peliculas", "latino"]:
item.url = host
itemlist = peliculas(item)
elif categoria == 'terror':
item.url = host + '/genero/terror/'
itemlist = peliculas(item)
elif categoria == "series":
item.url = host + "/episodio/"
itemlist = nuevos_episodios(item)
if "Pagina" in itemlist[-1].title:
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 peliculas(item):
#logger.info()
logger.info(item)
itemlist = []
data = httptools.downloadpage(item.url).data
data2 = scrapertools.find_single_match(data,'(?s)<div class="item_1.*?>(.*?)id="paginador">')
# Se saca la info
#(?s)class="ml-item.*?a href="([^"]+).*?img src="([^"]+).*?alt="([^"]+).*?class="year">(\d{4})</span>(.*?)<div
patron = '(?s)class="ml-item.*?' # base
patron += 'a href="([^"]+).*?' # url
patron += 'img src="([^"]+).*?' # imagen
patron += 'alt="([^"]+).*?' # titulo
patron += 'class="year">(\d{4})' # año
patron += '</span>(.*?)<div' # calidad
matches = scrapertools.find_multiple_matches(data2, patron)
scrapertools.printMatches(matches)
for scrapedurl, scrapedthumbnail, scrapedtitle, scrapedyear, scrapedquality in matches:
if not "/series/" in scrapedurl:
scrapedquality = scrapertools.find_single_match(scrapedquality, '<span class="calidad2">(.*?)</span>')
itemlist.append(Item(action = "findvideos", channel = item.channel, title = scrapedtitle + " (" + scrapedyear + ") [" + scrapedquality + "]", contentTitle=scrapedtitle, thumbnail = scrapedthumbnail, url = scrapedurl, quality=scrapedquality, infoLabels={'year':scrapedyear}))
else:
if item.action == "search":
itemlist.append(Item(action = "temporadas", channel = item.channel, title = scrapedtitle + " (" + scrapedyear + ")", contentSerieName=scrapedtitle, contentType="tvshow", thumbnail = scrapedthumbnail, url = scrapedurl, infoLabels={'year':scrapedyear}))
# InfoLabels:
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
# Pagina siguiente
patron_siguiente='class="pag_b"><a href="([^"]+)'
url_pagina_siguiente=scrapertools.find_single_match(data, patron_siguiente)
if url_pagina_siguiente != "":
pagina = ">>> Pagina: " + scrapertools.find_single_match(url_pagina_siguiente, '\d+')
itemlist.append(Item(channel = item.channel, action = "peliculas", title = pagina, url = url_pagina_siguiente))
return itemlist
def genero(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
# Delimita la búsqueda a la lista donde estan los géneros
data = scrapertools.find_single_match(data,'(?s)<ul id="menu-generos" class="">(.*?)</ul>')
# Extrae la url y el género
patron = '<a href="(.*?)">(.*?)</a></li>'
matches = scrapertools.find_multiple_matches(data, patron)
# Se quita "Estrenos" de la lista porque tiene su propio menu
matches.pop(0)
for scrapedurl, scrapedtitle in matches:
itemlist.append(Item(action = "peliculas", channel = item.channel, title = scrapedtitle, url = scrapedurl))
return itemlist
def series(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
# Se saca la info
patron = '(?s)class="ml-item.*?' # base
patron += 'a href="([^"]+).*?' # url
patron += 'img src="([^"]+).*?' # imagen
patron += 'alt="([^"]+).*?' # titulo
patron += 'class="year">(\d{4})' # año
matches = scrapertools.find_multiple_matches(data, patron)
#if config.get_setting('temporada_o_todos', 'pelisultra') == 0:
if config.get_setting('temporada_o_todos', 'pelisultra'):
accion="temporadas"
else:
accion="episodios"
for scrapedurl, scrapedthumbnail, scrapedtitle, scrapedyear in matches:
itemlist.append(Item(action = accion, channel = item.channel, title = scrapedtitle + " (" + scrapedyear + ")", contentSerieName=scrapedtitle, contentType="tvshow", thumbnail = scrapedthumbnail, url = scrapedurl, infoLabels={'year':scrapedyear}))
# InfoLabels:
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
# Pagina siguiente
patron_siguiente='class="pag_b"><a href="([^"]+)'
url_pagina_siguiente=scrapertools.find_single_match(data, patron_siguiente)
if url_pagina_siguiente != "":
pagina = ">>> Pagina: " + scrapertools.find_single_match(url_pagina_siguiente, '\d+')
itemlist.append(Item(channel = item.channel, action = "series", title = pagina, url = url_pagina_siguiente))
return itemlist
def temporadas(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
# Extrae las temporadas
patron = '<span class="se-t.*?>(.*?)</span>'
matches = scrapertools.find_multiple_matches(data, patron)
# Excepción para la serie Sin Límites
if item.contentTitle == 'Amar sin límites':
item.contentSerieName = "limitless"
item.infoLabels['tmdb_id']=''
for scrapedseason in matches:
itemlist.append(item.clone(action = "episodios", title = "Temporada " + scrapedseason, contentSeason=scrapedseason))
# InfoLabels:
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
return itemlist
def episodios(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
patron = '(?s)class="episodiotitle">.*?a href="(.*?)">(.*?)</a>'
matches = scrapertools.find_multiple_matches(data, patron)
for scrapedurl, scrapedtitle in matches:
# Saco el numero de capitulo de la url
numero_capitulo=scrapertools.get_season_and_episode(scrapedurl)
if numero_capitulo != "":
temporada=numero_capitulo.split("x")[0]
capitulo=numero_capitulo.split("x")[1]
else:
temporada="_"
capitulo="_"
if item.contentSeason and str(item.contentSeason) != temporada:
continue
itemlist.append(item.clone(action = "findvideos", title = numero_capitulo + " - " + scrapedtitle.strip(), url = scrapedurl, contentSeason=temporada, contentEpisodeNumber=capitulo))
# if item.contentTitle.startswith('Temporada'):
# if str(item.contentSeason) == temporada:
# itemlist.append(item.clone(action = "findvideos", title = numero_capitulo + " - " + scrapedtitle.strip(), url = scrapedurl, contentSeason=temporada, contentEpisodeNumber=capitulo))
# else:
# itemlist.append(item.clone(action = "findvideos", title = numero_capitulo + " - " + scrapedtitle.strip(), url = scrapedurl, contentSeason=temporada, contentEpisodeNumber=capitulo))
#episodios_por_pagina=20
# if config.get_setting('episodios_x_pag', 'pelisultra').isdigit():
# episodios_por_pagina=int(config.get_setting('episodios_x_pag', 'pelisultra'))
# else:
# episodios_por_pagina=20
# config.set_setting('episodios_x_pag', '20', 'pelisultra')
episodios_por_pagina= int(config.get_setting('episodios_x_pag', 'pelisultra')) * 5 + 10
if not item.page:
item.page = 0
itemlist_page = itemlist[item.page: item.page + episodios_por_pagina]
if len(itemlist) > item.page + episodios_por_pagina:
itemlist_page.append(item.clone(title = ">>> Pagina siguiente", page = item.page + episodios_por_pagina))
# InfoLabels:
tmdb.set_infoLabels_itemlist(itemlist_page, seekTmdb=True)
return itemlist_page
def nuevos_episodios(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
patron = '(?s)<td class="bb">.*?' # base
patron += '<a href="(.*?)">' # url
patron += '(.*?)</a>.*?' # nombre_serie
patron += '<img src="(.*?)>.*?' # imagen
patron += '<h2>(.*?)</h2>' # titulo
matches = scrapertools.find_multiple_matches(data, patron)
for scrapedurl, scrapedseriename, scrapedthumbnail, scrapedtitle in matches:
numero_capitulo=scrapertools.get_season_and_episode(scrapedurl)
if numero_capitulo != "":
temporada=numero_capitulo.split("x")[0]
capitulo=numero_capitulo.split("x")[1]
else:
temporada="_"
capitulo="_"
itemlist.append(Item(channel = item.channel, action = "findvideos", title = scrapedseriename +": " + numero_capitulo + " - " + scrapedtitle.strip(), url = scrapedurl, thumbnail = scrapedthumbnail, contentSerieName=scrapedseriename, contentSeason=temporada, contentEpisodeNumber=capitulo))
# InfoLabels:
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
# Pagina siguiente
patron_siguiente='class="pag_b"><a href="([^"]+)'
url_pagina_siguiente=scrapertools.find_single_match(data, patron_siguiente)
if url_pagina_siguiente != "":
pagina = ">>> Pagina: " + scrapertools.find_single_match(url_pagina_siguiente, '\d+')
itemlist.append(Item(channel = item.channel, action = "nuevos_episodios", title = pagina, url = url_pagina_siguiente))
return itemlist
def search(item, texto):
logger.info()
itemlist = []
texto = texto.replace(" ", "+")
try:
item.url = host + "/?s=%s" % texto
itemlist.extend(peliculas(item))
return itemlist
# 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 []

View File

@@ -0,0 +1,79 @@
{
"id": "poseidonhd",
"name": "PoseidonHD",
"active": true,
"adult": false,
"language": ["lat", "vose"],
"thumbnail": "https://poseidonhd.com/wp-content/uploads/2017/06/logo2.png",
"banner": "",
"categories": [
"movie",
"tvshow",
"direct"
],
"settings": [
{
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en busqueda global",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "filter_languages",
"type": "list",
"label": "Mostrar enlaces en idioma...",
"default": 0,
"enabled": true,
"visible": true,
"lvalues": [
"No filtrar",
"Latino",
"Castellano",
"VOSE"
]
},
{
"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
},
{
"id": "include_in_newest_terror",
"type": "bool",
"label": "Incluir en Novedades - terror",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "comprueba_enlaces",
"type": "bool",
"label": "Verificar si los enlaces existen",
"default": false,
"enabled": true,
"visible": true
},
{
"id": "comprueba_enlaces_num",
"type": "list",
"label": "Número de enlaces a verificar",
"default": 1,
"enabled": true,
"visible": "eq(-1,true)",
"lvalues": [ "5", "10", "15", "20" ]
}
]
}

View File

@@ -0,0 +1,366 @@
# -*- coding: utf-8 -*-
# -*- Channel PoseidonHD -*-
# -*- Created for Alfa-addon -*-
# -*- By the Alfa Develop Group -*-
import re
import urllib
from channelselector import get_thumb
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
from channels import filtertools
from channels import autoplay
from platformcode import config, logger
IDIOMAS = {'mx': 'Latino', 'dk':'Latino', 'es': 'Castellano', 'en': 'VOSE', 'gb':'VOSE'}
list_language = IDIOMAS.values()
list_quality = ['HD', 'SD', 'CAM']
list_servers = [
'directo',
'gvideo',
'openload',
'streamango',
'rapidvideo'
]
__comprueba_enlaces__ = config.get_setting('comprueba_enlaces', 'poseidonhd')
__comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', 'poseidonhd')
host = 'https://poseidonhd.com/'
def mainlist(item):
logger.info()
autoplay.init(item.channel, list_servers, list_quality)
itemlist = []
itemlist.append(Item(channel=item.channel, title='Peliculas', action='menu_movies',
thumbnail= get_thumb('movies', auto=True)))
itemlist.append(Item(channel=item.channel, title='Series', url=host+'tvshows', action='list_all', type='tvshows',
thumbnail= get_thumb('tvshows', auto=True)))
itemlist.append(
item.clone(title="Buscar", action="search", url=host + '?s=', thumbnail=get_thumb("search", auto=True),
extra='movie'))
autoplay.show_option(item.channel, itemlist)
return itemlist
def menu_movies(item):
logger.info()
itemlist=[]
itemlist.append(Item(channel=item.channel, title='Todas', url=host + 'movies', action='list_all',
thumbnail=get_thumb('all', auto=True), type='movies'))
itemlist.append(Item(channel=item.channel, title='Genero', action='section',
thumbnail=get_thumb('genres', auto=True), type='movies'))
itemlist.append(Item(channel=item.channel, title='Por Año', action='section',
thumbnail=get_thumb('year', auto=True), type='movies'))
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 get_language(lang_data):
logger.info()
language = []
lang_list = scrapertools.find_multiple_matches(lang_data, '/flags/(.*?).png\)')
for lang in lang_list:
if lang == 'en':
lang = 'vose'
if lang not in language:
language.append(lang)
return language
def section(item):
logger.info()
itemlist=[]
duplicados=[]
data = get_source(host)
if 'Genero' in item.title:
patron = '<li class=cat-item cat-item-\d+><a href=(.*?) >(.*?)/i>'
elif 'Año' in item.title:
patron = '<li><a href=(.*?release.*?)>(.*?)</a>'
elif 'Calidad' in item.title:
patron = 'menu-item-object-dtquality menu-item-\d+><a href=(.*?)>(.*?)</a>'
matches = re.compile(patron, re.DOTALL).findall(data)
for scrapedurl, scrapedtitle in matches:
title = scrapedtitle
plot=''
if 'Genero' in item.title:
quantity = scrapertools.find_single_match(scrapedtitle,'</a> <i>(.*?)<')
title = scrapertools.find_single_match(scrapedtitle,'(.*?)</')
title = title
plot = '%s elementos' % quantity.replace('.','')
else:
title = scrapedtitle
if title not in duplicados:
itemlist.append(Item(channel=item.channel, url=scrapedurl, title=title, plot=plot, action='list_all',
type=item.type))
duplicados.append(title)
return itemlist
def list_all(item):
logger.info()
itemlist = []
data = get_source(item.url)
if item.type == 'movies':
patron = '<article id=post-\d+ class=item movies><div class=poster><img src=(.*?) alt=(.*?)>.*?quality>(.*?)'
patron += '</span><\/div><a href=(.*?)>.*?<\/h3><span>(.*?)<\/span><\/div>.*?flags(.*?)metadata'
matches = re.compile(patron, re.DOTALL).findall(data)
for scrapedthumbnail, scrapedtitle, quality, scrapedurl, year, lang_data in matches:
title = '%s [%s] [%s]' % (scrapedtitle, year, quality)
contentTitle = scrapedtitle
thumbnail = scrapedthumbnail
url = scrapedurl
language = get_language(lang_data)
itemlist.append(item.clone(action='findvideos',
title=title,
url=url,
thumbnail=thumbnail,
contentTitle=contentTitle,
language=language,
quality=quality,
infoLabels={'year':year}))
elif item.type == 'tvshows':
patron = '<article id=post-\d+ class=item tvshows><div class=poster><img src=(.*?) alt=(.*?)>.*?'
patron += '<a href=(.*?)>.*?<\/h3><span>(.*?)<\/span><\/div>'
matches = re.compile(patron, re.DOTALL).findall(data)
for scrapedthumbnail, scrapedtitle, scrapedurl, year in matches:
title = scrapedtitle
contentSerieName = scrapedtitle
thumbnail = scrapedthumbnail
url = scrapedurl
itemlist.append(item.clone(action='seasons',
title=title,
url=url,
thumbnail=thumbnail,
contentSerieName=contentSerieName,
infoLabels={'year':year}))
tmdb.set_infoLabels(itemlist, seekTmdb=True)
# Paginación
url_next_page = scrapertools.find_single_match(data,"<a class='arrow_pag' href=([^>]+)><i id='nextpagination'")
if url_next_page:
itemlist.append(item.clone(title="Siguiente >>", url=url_next_page, action='list_all'))
return itemlist
def seasons(item):
logger.info()
itemlist=[]
data=get_source(item.url)
patron='Temporada\d+'
matches = re.compile(patron, re.DOTALL).findall(data)
infoLabels = item.infoLabels
for season in matches:
season = season.lower().replace('temporada','')
infoLabels['season']=season
title = 'Temporada %s' % season
itemlist.append(Item(channel=item.channel, title=title, url=item.url, action='episodesxseasons',
infoLabels=infoLabels))
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
if config.get_videolibrary_support() and len(itemlist) > 0:
itemlist.append(
Item(channel=item.channel, title='[COLOR yellow]Añadir esta serie a la videoteca[/COLOR]', url=item.url,
action="add_serie_to_library", extra="all_episodes", contentSerieName=item.contentSerieName))
return itemlist
def all_episodes(item):
logger.info()
itemlist = []
templist = seasons(item)
for tempitem in templist:
itemlist += episodesxseasons(tempitem)
return itemlist
def episodesxseasons(item):
logger.info()
itemlist = []
data=get_source(item.url)
patron='class=numerando>%s - (\d+)</div><div class=episodiotitle><a href=(.*?)>(.*?)<' % item.infoLabels['season']
matches = re.compile(patron, re.DOTALL).findall(data)
infoLabels = item.infoLabels
for scrapedepisode, scrapedurl, scrapedtitle in matches:
infoLabels['episode'] = scrapedepisode
url = scrapedurl
title = '%sx%s - %s' % (infoLabels['season'], infoLabels['episode'], scrapedtitle)
itemlist.append(Item(channel=item.channel, title= title, url=url, action='findvideos', infoLabels=infoLabels))
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
return itemlist
def findvideos(item):
logger.info()
itemlist = []
data = get_source(item.url)
selector_url = scrapertools.find_multiple_matches(data, 'class=metaframe rptss src=(.*?) frameborder=0 ')
for lang in selector_url:
data = get_source('https:'+lang)
urls = scrapertools.find_multiple_matches(data, 'data-playerid=(.*?)>')
subs = ''
lang = scrapertools.find_single_match(lang, 'lang=([^+]+)')
language = IDIOMAS[lang]
if item.contentType == 'episode':
quality = 'SD'
else:
quality = item.quality
for url in urls:
final_url = httptools.downloadpage('https:'+url).data
if 'vip' in url:
file_id = scrapertools.find_single_match(url, 'file=(.*?)&')
if language=='VOSE':
sub = scrapertools.find_single_match(url, 'sub=(.*?)&')
subs = 'https:%s' % sub
post = {'link':file_id}
post = urllib.urlencode(post)
hidden_url = 'https://streamango.poseidonhd.com/repro//plugins/gkpluginsphp.php'
data_url = httptools.downloadpage(hidden_url, post=post).data
dict_vip_url = jsontools.load(data_url)
url = dict_vip_url['link']
else:
url = 'https:%s' % url
new_url = url.replace('embed','stream')
url = httptools.downloadpage(new_url, follow_redirects=False).headers.get('location')
#title = '%s [%s]' % (item.title, language)
itemlist.append(item.clone(title='[%s] [%s]', url=url, action='play', subtitle=subs,
language=language, quality=quality, infoLabels = item.infoLabels))
itemlist = servertools.get_servers_itemlist(itemlist, lambda x: x.title % (x.server.capitalize(), x.language))
# Requerido para Filtrar enlaces
if __comprueba_enlaces__:
itemlist = servertools.check_list_links(itemlist, __comprueba_enlaces_num__)
# Requerido para FilterTools
itemlist = filtertools.get_links(itemlist, item, list_language)
# Requerido para AutoPlay
autoplay.start(itemlist, item)
if item.contentType != 'episode':
if config.get_videolibrary_support() and len(itemlist) > 0 and item.extra != 'findvideos':
itemlist.append(
Item(channel=item.channel, title='[COLOR yellow]Añadir esta pelicula a la videoteca[/COLOR]', url=item.url,
action="add_pelicula_to_library", extra="findvideos", contentTitle=item.contentTitle))
return itemlist
def search(item, texto):
logger.info()
texto = texto.replace(" ", "+")
item.url = item.url + texto
if texto != '':
return search_results(item)
else:
return []
def search_results(item):
logger.info()
itemlist=[]
data=get_source(item.url)
patron = '<article>.*?<a href=(.*?)><img src=(.*?) alt=(.*?) />.*?meta.*?year>(.*?)<(.*?)<p>(.*?)</p>'
matches = re.compile(patron, re.DOTALL).findall(data)
for scrapedurl, scrapedthumb, scrapedtitle, year, lang_data, scrapedplot in matches:
title = scrapedtitle
url = scrapedurl
thumbnail = scrapedthumb
plot = scrapedplot
language = get_language(lang_data)
if language:
action = 'findvideos'
else:
action = 'seasons'
new_item=Item(channel=item.channel, title=title, url=url, thumbnail=thumbnail, plot=plot,
action=action,
language=language, infoLabels={'year':year})
if new_item.action == 'findvideos':
new_item.contentTitle = new_item.title
else:
new_item.contentSerieName = new_item.title
itemlist.append(new_item)
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
return itemlist
def newest(categoria):
logger.info()
itemlist = []
item = Item()
try:
if categoria in ['peliculas']:
item.url = host + 'movies'
elif categoria == 'infantiles':
item.url = host + 'genre/animacion/'
elif categoria == 'terror':
item.url = host + 'genre/terror/'
item.type='movies'
itemlist = list_all(item)
if itemlist[-1].title == 'Siguiente >>':
itemlist.pop()
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
return []
return itemlist

View File

@@ -1,7 +1,7 @@
{
"id": "seriesblanco",
"name": "Seriesblanco",
"active": true,
"active": false,
"adult": false,
"language": ["cast", "lat"],
"thumbnail": "seriesblanco.png",
@@ -59,4 +59,4 @@
]
}
]
}
}

View File

@@ -15,7 +15,15 @@
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en busqueda global",
"default": false,
"default": true,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_series",
"type": "bool",
"label": "Incluir en Novedades - Episodios de series",
"default": true,
"enabled": true,
"visible": true
},
@@ -33,6 +41,19 @@
"VO",
"VOS"
]
},
{
"id": "filterlinks",
"type": "list",
"label": "Mostrar enlaces de tipo...",
"default": 2,
"enabled": true,
"visible": true,
"lvalues": [
"Solo Descarga",
"Solo Online",
"No filtrar"
]
}
]
}

View File

@@ -33,12 +33,20 @@ def mainlist(item):
itemlist.append(Item(channel=item.channel, title="Buscar...", action="search",
url=urlparse.urljoin(HOST, "all.php")))
#itemlist = filtertools.show_option(itemlist, item.channel, list_idiomas, CALIDADES)
itemlist = filtertools.show_option(itemlist, item.channel, list_idiomas, CALIDADES)
autoplay.show_option(item.channel, itemlist)
return itemlist
def newest(categoria):
logger.info("categoria: %s" % categoria)
itemlist = []
if categoria == 'series':
itemlist = novedades(Item(url = HOST))
return itemlist
def novedades(item):
logger.info()
@@ -220,7 +228,7 @@ def episodios(item):
infoLabels=infoLabels))
#itemlist = filtertools.get_links(itemlist, item, list_idiomas, CALIDADES)
itemlist = filtertools.get_links(itemlist, item, list_idiomas, CALIDADES)
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
# Opción "Añadir esta serie a la videoteca de XBMC"
@@ -241,14 +249,24 @@ def findvideos(item):
online = re.findall('<table class=.+? cellpadding=.+? cellspacing=.+?>(.+?)</table>', data,
re.MULTILINE | re.DOTALL)
itemlist = parse_videos(item, "Ver", online[0])
itemlist.extend(parse_videos(item, "Descargar", online[1]))
itemlist = []
try:
filtro_enlaces = config.get_setting("filterlinks", item.channel)
except:
filtro_enlaces = 2
if filtro_enlaces != 0:
itemlist.extend(parse_videos(item, "Ver", online[0]))
if filtro_enlaces != 1:
itemlist.extend(parse_videos(item, "Descargar", online[1]))
itemlist = filtertools.get_links(itemlist, item, list_idiomas, CALIDADES)
# Requerido para FilterTools
itemlist = filtertools.get_links(itemlist, item, list_idiomas)
itemlist = filtertools.get_links(itemlist, item, list_idiomas, CALIDADES)
# Requerido para AutoPlay

View File

@@ -11,6 +11,22 @@
"anime"
],
"settings": [
{
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en busqueda global",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_series",
"type": "bool",
"label": "Incluir en Novedades - Episodios de series",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "filter_languages",
"type": "list",
@@ -28,20 +44,17 @@
]
},
{
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en busqueda global",
"default": true,
"id": "filterlinks",
"type": "list",
"label": "Mostrar enlaces de tipo...",
"default": 2,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_series",
"type": "bool",
"label": "Incluir en Novedades - Episodios de series",
"default": true,
"enabled": true,
"visible": true
"visible": true,
"lvalues": [
"Solo Descarga",
"Solo Online",
"No filtrar"
]
}
]
}

View File

@@ -132,17 +132,7 @@ def newest(categoria):
if categoria != 'series':
return []
try:
return novedades(Item())
# 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 novedades(Item())
def episodios(item):
logger.info("url: %s" % item.url)
@@ -177,7 +167,10 @@ def search(item, texto):
logger.info("texto: %s" % texto)
data = httptools.downloadpage(urlparse.urljoin(HOST, "/buscar.php?term=%s" % texto)).data
data_dict = jsontools.load(data)
tvshows = data_dict["myData"]
try:
tvshows = data_dict["myData"]
except:
return []
return [item.clone(action="episodios",
title=show["titulo"],
@@ -203,23 +196,34 @@ def findvideos(item):
links = re.findall(expr, data, re.MULTILINE | re.DOTALL)
itemlist = [item.clone(
action="play",
title="{linkType} en {server} [{lang}] [{quality}] ({uploader}: {date})".format(
linkType="Ver" if linkType != "descargar" else "Descargar",
lang=IDIOMAS.get(lang, lang),
date=date,
server=server.rstrip(),
quality=quality,
uploader=uploader),
server=server.rstrip(),
url=urlparse.urljoin(HOST, url),
language=IDIOMAS.get(lang,lang),
quality=quality
) for lang, date, server, url, linkType, quality, uploader in links]
itemlist = []
try:
filtro_enlaces = config.get_setting("filterlinks", item.channel)
except:
filtro_enlaces = 2
typeListStr = ["Descargar", "Ver"]
for lang, date, server, url, linkType, quality, uploader in links:
linkTypeNum = 0 if linkType == "descargar" else 1
if filtro_enlaces != 2 and filtro_enlaces != linkTypeNum:
continue
itemlist.append(item.clone(
action="play",
title="{linkType} en {server} [{lang}] [{quality}] ({uploader}: {date})".format(
linkType=typeListStr[linkTypeNum],
lang=IDIOMAS.get(lang, lang),
date=date,
server=server.rstrip(),
quality=quality,
uploader=uploader),
server=server.rstrip(),
url=urlparse.urljoin(HOST, url),
language=IDIOMAS.get(lang,lang),
quality=quality
)
)
# Requerido para FilterTools

View File

@@ -0,0 +1,65 @@
{
"id": "solocastellano",
"name": "SoloCastellano",
"active": true,
"adult": false,
"language": ["cast"],
"thumbnail": "https://s31.postimg.cc/uotcf3owb/solocastellano.png",
"banner": "",
"categories": [
"movie"
],
"settings": [
{
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en busqueda global",
"default": false,
"enabled": false,
"visible": false
},
{
"id": "filter_languages",
"type": "list",
"label": "Mostrar enlaces en idioma...",
"default": 0,
"enabled": true,
"visible": true,
"lvalues": [
"No filtrar"
]
},
{
"id": "include_in_newest_castellano",
"type": "bool",
"label": "Incluir en Novedades - Castellano",
"default": true,
"enabled": true,
"visible": true
},
{
"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
},
{
"id": "include_in_newest_terror",
"type": "bool",
"label": "Incluir en Novedades - Terror",
"default": true,
"enabled": true,
"visible": true
}
]
}

View File

@@ -0,0 +1,429 @@
# -*- coding: utf-8 -*-
import re
from channels import autoplay
from channels import filtertools
from core import httptools
from core import scrapertools
from core import servertools
from core import tmdb
from core.item import Item
from platformcode import config, logger
from channelselector import get_thumb
host = 'http://solocastellano.com/'
headers = [['User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0'],
['Referer', host]]
IDIOMAS = {'Castellano': 'Castellano'}
list_language = IDIOMAS.values()
list_quality = []
list_servers = ['yourupload', 'openload', 'sendvid']
vars = {
'ef5ca18f089cf01316bbc967fa10f72950790c39ef5ca18f089cf01316bbc967fa10f72950790c39': 'http://tawnestdplsnetps.pw/',
'b48699bb49d4550f27879deeb948d4f7d9c5949a8': 'embed',
'JzewJkLlrvcFnLelj2ikbA': 'php?url=',
'p889c6853a117aca83ef9d6523335dc065213ae86': 'player',
'e20fb341325556c0fc0145ce10d08a970538987': 'http://yourupload.com/embed/'
}
tgenero = {"acción": "https://s3.postimg.cc/y6o9puflv/accion.png",
"animación": "https://s13.postimg.cc/5on877l87/animacion.png",
"aventura": "https://s10.postimg.cc/6su40czih/aventura.png",
"belico": "https://s23.postimg.cc/71itp9hcr/belica.png",
"ciencia ficción": "https://s9.postimg.cc/diu70s7j3/cienciaficcion.png",
"comedia": "https://s7.postimg.cc/ne9g9zgwb/comedia.png",
"comedia romántica": "https://s21.postimg.cc/xfsj7ua0n/romantica.png",
"cortometrajes": "https://s15.postimg.cc/kluxxwg23/cortometraje.png",
"crimen": "https://s4.postimg.cc/6z27zhirx/crimen.png",
"cristianas": "https://s7.postimg.cc/llo852fwr/religiosa.png",
"deportivas": "https://s13.postimg.cc/xuxf5h06v/deporte.png",
"drama": "https://s16.postimg.cc/94sia332d/drama.png",
"familiar": "https://s7.postimg.cc/6s7vdhqrf/familiar.png",
"fantasía": "https://s13.postimg.cc/65ylohgvb/fantasia.png",
"guerra": "https://s4.postimg.cc/n1h2jp2jh/guerra.png",
"historia": "https://s15.postimg.cc/fmc050h1n/historia.png",
"intriga": "https://s27.postimg.cc/v9og43u2b/intriga.png",
"misterios": "https://s1.postimg.cc/w7fdgf2vj/misterio.png",
"musical": "https://s29.postimg.cc/bbxmdh9c7/musical.png",
"romance": "https://s15.postimg.cc/fb5j8cl63/romance.png",
"suspenso": "https://s13.postimg.cc/wmw6vl1cn/suspenso.png",
"terror": "https://s7.postimg.cc/yi0gij3gb/terror.png",
"thriller": "https://s22.postimg.cc/5y9g0jsu9/thriller.png"}
def mainlist(item):
logger.info()
autoplay.init(item.channel, list_servers, list_quality)
itemlist = []
itemlist.append(item.clone(title="Todas",
action="lista",
thumbnail=get_thumb('all', auto=True),
fanart='https://s18.postimg.cc/fwvaeo6qh/todas.png',
url=host + 'lista-de-peliculas/',
extra='peliculas'
))
itemlist.append(item.clone(title="Ultimas",
action="lista",
thumbnail=get_thumb('last', auto=True),
fanart='https://s22.postimg.cc/cb7nmhwv5/ultimas.png',
url=host,
extra='peliculas'
))
itemlist.append(item.clone(title="Generos",
action="generos",
thumbnail=get_thumb('genres', auto=True),
fanart='https://s3.postimg.cc/5s9jg2wtf/generos.png',
url=host,
extra='peliculas'
))
itemlist.append(item.clone(title="Buscar",
action="search",
url=host + 'search?q=',
thumbnail=get_thumb('search', auto=True),
fanart='https://s30.postimg.cc/pei7txpa9/buscar.png'))
autoplay.show_option(item.channel, itemlist)
return itemlist
def lista(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
data = re.sub(r'"|\n|\r|\t|&nbsp;|<br>|\s{2,}', "", data)
contentSerieName = ''
patron = '<div class=movie><div class=imagen><img src=(.*?) alt=(.*?) width=.*? height=.*?\/><a href=(.*?)><span '
patron += 'class=player>.*?class=year>(.*?)<\/span>'
matches = re.compile(patron, re.DOTALL).findall(data)
if item.extra == 'peliculas':
accion = 'findvideos'
else:
accion = 'temporadas'
for scrapedthumbnail, scrapedtitle, scrapedurl, scrapedyear in matches:
scrapedurl = scrapedurl.translate(None, '"')
scrapedurl = scrapedurl.translate(None, "'")
url = host + scrapedurl
thumbnail = scrapedthumbnail
title = scrapedtitle
year = scrapedyear
if item.extra == 'series':
contentSerieName = scrapedtitle
itemlist.append(Item(channel=item.channel,
action=accion,
title=title,
url=url,
thumbnail=thumbnail,
contentTitle=scrapedtitle,
extra=item.extra,
contentSerieName=contentSerieName,
infoLabels={'year': year}
))
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
# #Paginacion
if itemlist != []:
actual_page_url = item.url
next_page = scrapertools.find_single_match(data, '<div class=siguiente><a href=(.*?)>')
url = host + next_page
if next_page != '':
itemlist.append(Item(channel=item.channel,
action="lista",
title='Siguiente >>>',
url=url,
thumbnail='https://s16.postimg.cc/9okdu7hhx/siguiente.png',
extra=item.extra
))
return itemlist
def generos(item):
logger.info()
itemlist = []
norep = []
data = httptools.downloadpage(item.url).data
patron = '<li class="cat-item cat-item-.*?"><a href="([^"]+)".*?>([^<]+)<\/a>'
matches = re.compile(patron, re.DOTALL).findall(data)
for scrapedurl, scrapedtitle in matches:
url = host + scrapedurl
title = scrapedtitle.lower()
if title in tgenero:
thumbnail = tgenero[title.lower()]
else:
thumbnail = ''
itemactual = Item(channel=item.channel,
action='lista',
title=title, url=url,
thumbnail=thumbnail,
extra=item.extra
)
if title not in norep:
itemlist.append(itemactual)
norep.append(itemactual.title)
return itemlist
def temporadas(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
patron = '<li class="has-sub"><a href="([^"]+)"><span><b class="icon-bars"><\/b> ([^<]+)<\/span><\/a>'
matches = re.compile(patron, re.DOTALL).findall(data)
temp = 1
infoLabels = item.infoLabels
for scrapedurl, scrapedtitle in matches:
url = scrapedurl
title = scrapedtitle.strip('')
contentSeasonNumber = temp
infoLabels['season'] = contentSeasonNumber
thumbnail = item.thumbnail
plot = scrapertools.find_single_match(data, '<p>([^<]+)<\/p>')
itemlist.append(Item(channel=item.channel,
action="episodiosxtemp",
title=title,
fulltitle=item.title,
url=url,
thumbnail=thumbnail,
contentSerieName=item.contentSerieName,
contentSeasonNumber=contentSeasonNumber,
plot=plot,
infoLabels=infoLabels
))
temp = temp + 1
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
if config.get_videolibrary_support() and len(itemlist) > 0:
itemlist.append(Item(channel=item.channel,
title='[COLOR yellow]Añadir esta serie a la videoteca[/COLOR]',
url=item.url,
action="add_serie_to_library",
extra="episodios",
contentSerieName=item.contentSerieName,
extra1=item.extra1,
temp=str(temp)
))
return itemlist
def episodios(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
temp = 'temporada-' + str(item.contentSeasonNumber)
patron = '<li>.\s*<a href="(.*?)">.\s*<span.*?datex">([^<]+)<'
matches = re.compile(patron, re.DOTALL).findall(data)
for scrapedurl, scrapedepisode in matches:
url = host + scrapedurl
title = item.contentSerieName + ' ' + scrapedepisode
thumbnail = item.thumbnail
fanart = ''
itemlist.append(Item(channel=item.channel,
action="findvideos",
title=title,
fulltitle=item.fulltitle,
url=url,
thumbnail=item.thumbnail,
plot=item.plot,
extra=item.extra,
contentSerieName=item.contentSerieName
))
return itemlist
def episodiosxtemp(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
temp = 'temporada-' + str(item.contentSeasonNumber)
patron = '<li>.\s*<a href="(.*?-' + temp + '.*?)">.\s*<span.*?datex">([^<]+)<'
matches = re.compile(patron, re.DOTALL).findall(data)
infoLabels = item.infoLabels
for scrapedurl, scrapedepisode in matches:
url = host + scrapedurl
title = item.contentSerieName + ' ' + scrapedepisode
scrapedepisode = re.sub(r'.*?x', '', scrapedepisode)
infoLabels['episode'] = scrapedepisode
thumbnail = item.thumbnail
fanart = ''
itemlist.append(Item(channel=item.channel,
action="findvideos",
title=title,
fulltitle=item.fulltitle,
url=url,
thumbnail=item.thumbnail,
plot=item.plot,
extra=item.extra,
contentSerieName=item.contentSerieName,
infoLabels=infoLabels
))
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
return itemlist
def dec(encurl):
logger.info()
url = ''
encurl = encurl.translate(None, "',(,),;")
encurl = encurl.split('+')
for cod in encurl:
if cod in vars:
url = url + vars[cod]
else:
url = url + cod
return url
def findvideos(item):
logger.info()
itemlist = []
langs = dict()
data = httptools.downloadpage(item.url).data
patron = '<a onclick="return (play\d+).*?;"> (.*?) <\/a>'
matches = re.compile(patron, re.DOTALL).findall(data)
for key, value in matches:
langs[key] = value.strip()
patron = 'function (play\d).*?servidores.*?attr.*?src.*?\+([^;]+);'
matches = re.compile(patron, re.DOTALL).findall(data)
title = item.title
enlace = scrapertools.find_single_match(data,
'var e20fb341325556c0fc0145ce10d08a970538987 =.*?"\/your\.".*?"([^"]+)"')
for scrapedlang, encurl in matches:
if 'e20fb34' in encurl:
url = dec(encurl)
url = url + enlace
else:
url = dec(encurl)
title = ''
server = ''
servers = {'/opl': 'openload', '/your': 'yourupload', '/sen': 'senvid', '/face': 'netutv', '/vk': 'vk',
'/jk':'streamcherry'}
server_id = re.sub(r'.*?embed|\.php.*', '', url)
if server_id and server_id in servers:
server = servers[server_id]
if (scrapedlang in langs) and langs[scrapedlang] in list_language:
language = IDIOMAS[langs[scrapedlang]]
else:
language = 'Latino'
#
# if langs[scrapedlang] == 'Latino':
# idioma = '[COLOR limegreen]LATINO[/COLOR]'
# elif langs[scrapedlang] == 'Sub Español':
# idioma = '[COLOR red]SUB[/COLOR]'
if item.extra == 'peliculas':
title = item.contentTitle + ' (' + server + ') ' + language
plot = scrapertools.find_single_match(data, '<p>([^<]+)<\/p>')
else:
title = item.contentSerieName + ' (' + server + ') ' + language
plot = item.plot
thumbnail = servertools.guess_server_thumbnail(title)
if 'player' not in url and 'php' in url:
itemlist.append(item.clone(title=title,
url=url,
action="play",
plot=plot,
thumbnail=thumbnail,
server=server,
quality='',
language=language
))
# Requerido para FilterTools
itemlist = filtertools.get_links(itemlist, item, list_language)
# Requerido para AutoPlay
autoplay.start(itemlist, item)
if config.get_videolibrary_support() and len(itemlist) > 0 and item.extra != 'findvideos':
itemlist.append(Item(channel=item.channel,
title='[COLOR yellow]Añadir esta pelicula a la videoteca[/COLOR]',
url=item.url,
action="add_pelicula_to_library",
extra="findvideos",
contentTitle=item.contentTitle
))
return itemlist
def play(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
if 'your' in item.url:
item.url = 'http://www.yourupload.com/embed/' + scrapertools.find_single_match(data, 'src=".*?code=(.*?)"')
itemlist.append(item)
else:
itemlist = servertools.find_video_items(data=data)
return itemlist
def search(item, texto):
logger.info()
texto = texto.replace(" ", "+")
item.url = item.url + texto
if texto != '':
return lista(item)
def newest(categoria):
logger.info()
itemlist = []
item = Item()
# categoria='peliculas'
try:
if categoria in ['peliculas','latino']:
item.url = host
elif categoria == 'infantiles':
item.url = host + 'search?q=animación'
elif categoria == 'terror':
item.url = host + 'search?q=terror'
item.extra = 'peliculas'
itemlist = lista(item)
if itemlist[-1].title == 'Siguiente >>>':
itemlist.pop()
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
return []
return itemlist

View File

@@ -19,41 +19,436 @@
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en busqueda global",
"default": false,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_peliculas",
"type": "bool",
"label": "Incluir en Novedades - Peliculas",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_series",
"type": "bool",
"label": "Incluir en Novedades - Episodios de series",
"default": true,
"id": "clonenewpct1_ver_enlaces_veronline",
"type": "list",
"label": "Mostrar enlaces Ver Online",
"default": 1,
"enabled": true,
"visible": true
"visible": true,
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20"
]
},
{
"id": "include_in_newest_torrent",
"type": "bool",
"label": "Incluir en Novedades - Torrent",
"default": true,
"id": "clonenewpct1_verificar_enlaces_veronline",
"type": "list",
"label": "Verificar enlaces Ver Online",
"default": 1,
"enabled": true,
"visible": true
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20"
]
},
{
"id": "include_in_newest_4k",
"id": "clonenewpct1_verificar_enlaces_veronline_validos",
"type": "bool",
"label": "Incluir en Novedades - 4K",
"label": "¿Contar sólo enlaces 'verificados' en Ver Online?",
"default": true,
"enabled": true,
"visible": true
"visible": "!eq(-1,'No') + !eq(-2,'No')"
},
{
"id": "clonenewpct1_excluir1_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 9,
"max_excl": 5,
"enabled": true,
"visible": "!eq(-3,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir2_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 12,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir3_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 20,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir4_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir5_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_ver_enlaces_descargas",
"type": "list",
"label": "Mostrar enlaces Descargas",
"default": 0,
"enabled": true,
"visible": true,
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20",
"30",
"50",
"100"
]
},
{
"id": "clonenewpct1_verificar_enlaces_descargas",
"type": "list",
"label": "Verificar enlaces Descargas",
"default": 1,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20",
"30",
"50",
"100"
]
},
{
"id": "clonenewpct1_verificar_enlaces_descargas_validos",
"type": "bool",
"label": "¿Contar sólo enlaces 'verificados' en Descargar?",
"default": true,
"enabled": true,
"visible": "!eq(-1,'No') + !eq(-2,'No')"
},
{
"id": "clonenewpct1_excluir1_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Ver Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-3,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir2_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Ver Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir3_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir4_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir5_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,7 @@
"name": "Torrentrapid",
"active": true,
"adult": false,
"language": ["cast", "lat"],
"language": ["*"],
"thumbnail": "torrentrapid.png",
"banner": "torrentrapid.png",
"categories": [
@@ -11,6 +11,7 @@
"tvshow",
"anime",
"torrent",
"latino",
"documentary"
],
"settings": [
@@ -18,17 +19,444 @@
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en busqueda global",
"default": false,
"default": true,
"enabled": true,
"visible": true
},
{
"id": "clonenewpct1_ver_enlaces_veronline",
"type": "list",
"label": "Mostrar enlaces Ver Online",
"default": 1,
"enabled": true,
"visible": true,
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20"
]
},
{
"id": "clonenewpct1_verificar_enlaces_veronline",
"type": "list",
"label": "Verificar enlaces Ver Online",
"default": 1,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20"
]
},
{
"id": "clonenewpct1_verificar_enlaces_veronline_validos",
"type": "bool",
"label": "¿Contar sólo enlaces 'verificados' en Ver Online?",
"default": true,
"enabled": true,
"visible": "!eq(-1,'No') + !eq(-2,'No')"
},
{
"id": "clonenewpct1_excluir1_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 9,
"max_excl": 5,
"enabled": true,
"visible": "!eq(-3,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir2_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 12,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir3_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 20,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir4_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir5_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_ver_enlaces_descargas",
"type": "list",
"label": "Mostrar enlaces Descargas",
"default": 0,
"enabled": true,
"visible": true,
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20",
"30",
"50",
"100"
]
},
{
"id": "clonenewpct1_verificar_enlaces_descargas",
"type": "list",
"label": "Verificar enlaces Descargas",
"default": 1,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20",
"30",
"50",
"100"
]
},
{
"id": "clonenewpct1_verificar_enlaces_descargas_validos",
"type": "bool",
"label": "¿Contar sólo enlaces 'verificados' en Descargar?",
"default": true,
"enabled": true,
"visible": "!eq(-1,'No') + !eq(-2,'No')"
},
{
"id": "clonenewpct1_excluir1_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Ver Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-3,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir2_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Ver Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir3_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir4_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir5_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "include_in_newest_peliculas",
"type": "bool",
"label": "Incluir en Novedades - Peliculas",
"default": true,
"enabled": true,
"visible": true
"visible": false
},
{
"id": "include_in_newest_series",
@@ -36,15 +464,31 @@
"label": "Incluir en Novedades - Episodios de series",
"default": true,
"enabled": true,
"visible": true
"visible": false
},
{
"id": "include_in_newest_torrent",
"id": "include_in_newest_anime",
"type": "bool",
"label": "Incluir en Novedades - Torrent",
"label": "Incluir en Novedades - Anime",
"default": true,
"enabled": true,
"visible": true
"visible": false
},
{
"id": "include_in_newest_documentales",
"type": "bool",
"label": "Incluir en Novedades - Documentales",
"default": true,
"enabled": true,
"visible": false
},
{
"id": "include_in_newest_latino",
"type": "bool",
"label": "Incluir en Novedades - Documentales",
"default": true,
"enabled": true,
"visible": false
},
{
"id": "include_in_newest_4k",
@@ -52,7 +496,7 @@
"label": "Incluir en Novedades - 4K",
"default": true,
"enabled": true,
"visible": true
"visible": false
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -18,41 +18,436 @@
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en busqueda global",
"default": false,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_peliculas",
"type": "bool",
"label": "Incluir en Novedades - Peliculas",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_series",
"type": "bool",
"label": "Incluir en Novedades - Episodios de series",
"default": true,
"id": "clonenewpct1_ver_enlaces_veronline",
"type": "list",
"label": "Mostrar enlaces Ver Online",
"default": 1,
"enabled": true,
"visible": true
"visible": true,
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20"
]
},
{
"id": "include_in_newest_torrent",
"type": "bool",
"label": "Incluir en Novedades - Torrent",
"default": true,
"id": "clonenewpct1_verificar_enlaces_veronline",
"type": "list",
"label": "Verificar enlaces Ver Online",
"default": 1,
"enabled": true,
"visible": true
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20"
]
},
{
"id": "include_in_newest_4k",
"id": "clonenewpct1_verificar_enlaces_veronline_validos",
"type": "bool",
"label": "Incluir en Novedades - 4K",
"label": "¿Contar sólo enlaces 'verificados' en Ver Online?",
"default": true,
"enabled": true,
"visible": true
"visible": "!eq(-1,'No') + !eq(-2,'No')"
},
{
"id": "clonenewpct1_excluir1_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 9,
"max_excl": 5,
"enabled": true,
"visible": "!eq(-3,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir2_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 12,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir3_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 20,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir4_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir5_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_ver_enlaces_descargas",
"type": "list",
"label": "Mostrar enlaces Descargas",
"default": 0,
"enabled": true,
"visible": true,
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20",
"30",
"50",
"100"
]
},
{
"id": "clonenewpct1_verificar_enlaces_descargas",
"type": "list",
"label": "Verificar enlaces Descargas",
"default": 1,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20",
"30",
"50",
"100"
]
},
{
"id": "clonenewpct1_verificar_enlaces_descargas_validos",
"type": "bool",
"label": "¿Contar sólo enlaces 'verificados' en Descargar?",
"default": true,
"enabled": true,
"visible": "!eq(-1,'No') + !eq(-2,'No')"
},
{
"id": "clonenewpct1_excluir1_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Ver Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-3,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir2_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Ver Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir3_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir4_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir5_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -18,41 +18,436 @@
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en busqueda global",
"default": false,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_peliculas",
"type": "bool",
"label": "Incluir en Novedades - Peliculas",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "include_in_newest_series",
"type": "bool",
"label": "Incluir en Novedades - Episodios de series",
"default": true,
"id": "clonenewpct1_ver_enlaces_veronline",
"type": "list",
"label": "Mostrar enlaces Ver Online",
"default": 1,
"enabled": true,
"visible": true
"visible": true,
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20"
]
},
{
"id": "include_in_newest_torrent",
"type": "bool",
"label": "Incluir en Novedades - Torrent",
"default": true,
"id": "clonenewpct1_verificar_enlaces_veronline",
"type": "list",
"label": "Verificar enlaces Ver Online",
"default": 1,
"enabled": true,
"visible": true
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20"
]
},
{
"id": "include_in_newest_4k",
"id": "clonenewpct1_verificar_enlaces_veronline_validos",
"type": "bool",
"label": "Incluir en Novedades - 4K",
"label": "¿Contar sólo enlaces 'verificados' en Ver Online?",
"default": true,
"enabled": true,
"visible": true
"visible": "!eq(-1,'No') + !eq(-2,'No')"
},
{
"id": "clonenewpct1_excluir1_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 9,
"max_excl": 5,
"enabled": true,
"visible": "!eq(-3,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir2_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 12,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir3_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 20,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir4_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir5_enlaces_veronline",
"type": "list",
"label": "Excluir Servidores para Ver Online",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_ver_enlaces_descargas",
"type": "list",
"label": "Mostrar enlaces Descargas",
"default": 0,
"enabled": true,
"visible": true,
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20",
"30",
"50",
"100"
]
},
{
"id": "clonenewpct1_verificar_enlaces_descargas",
"type": "list",
"label": "Verificar enlaces Descargas",
"default": 1,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Todos",
"1",
"5",
"10",
"20",
"30",
"50",
"100"
]
},
{
"id": "clonenewpct1_verificar_enlaces_descargas_validos",
"type": "bool",
"label": "¿Contar sólo enlaces 'verificados' en Descargar?",
"default": true,
"enabled": true,
"visible": "!eq(-1,'No') + !eq(-2,'No')"
},
{
"id": "clonenewpct1_excluir1_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Ver Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-3,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir2_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Ver Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir3_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir4_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
},
{
"id": "clonenewpct1_excluir5_enlaces_descargas",
"type": "list",
"label": "Excluir Servidores para Descargas",
"default": 0,
"enabled": true,
"visible": "!eq(-1,'No')",
"lvalues": [
"No",
"Bankupload",
"Clipwatching",
"Flashx",
"Katfile",
"Mega",
"Mexashare",
"Movshare",
"Mowvideo",
"Openload",
"Powvideo",
"Rapidgator",
"Streamango",
"Streamcloud",
"Streame",
"Streaminto",
"Streamplay",
"Thevideo",
"Turbobit",
"Uploadedto",
"Uptobox",
"Userscloud",
"Vidabc",
"Vidspot"
]
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -37,21 +37,15 @@ class UnshortenIt(object):
_anonymz_regex = r'anonymz\.com'
_shrink_service_regex = r'shrink-service\.it'
_rapidcrypt_regex = r'rapidcrypt\.net'
_maxretries = 5
_this_dir, _this_filename = os.path.split(__file__)
_timeout = 10
def unshorten(self, uri, type=None):
domain = urlsplit(uri).netloc
if not domain:
return uri, "No domain found in URI!"
had_google_outbound, uri = self._clear_google_outbound_proxy(uri)
if re.search(self._adfly_regex, domain,
re.IGNORECASE) or type == 'adfly':
return self._unshorten_adfly(uri)
@@ -74,21 +68,15 @@ class UnshortenIt(object):
return self._unshorten_anonymz(uri)
if re.search(self._rapidcrypt_regex, domain, re.IGNORECASE):
return self._unshorten_rapidcrypt(uri)
return uri, 200
def unwrap_30x(self, uri, timeout=10):
domain = urlsplit(uri).netloc
self._timeout = timeout
loop_counter = 0
try:
if loop_counter > 5:
raise ValueError("Infinitely looping redirect from URL: '%s'" %
(uri,))
# headers stop t.co from working so omit headers if this is a t.co link
if domain == 't.co':
r = httptools.downloadpage(uri, timeout=self._timeout)
@@ -108,7 +96,6 @@ class UnshortenIt(object):
only_headers=True)
if not r.success:
return uri, -1
retries = 0
if 'location' in r.headers and retries < self._maxretries:
r = httptools.downloadpage(
@@ -120,10 +107,8 @@ class UnshortenIt(object):
retries = retries + 1
else:
return r.url, r.code
except Exception as e:
return uri, str(e)
def _clear_google_outbound_proxy(self, url):
'''
So google proxies all their outbound links through a redirect so they can detect outbound links.
@@ -132,16 +117,13 @@ class UnshortenIt(object):
This is useful for doing things like parsing google search results, or if you're scraping google
docs, where google inserts hit-counters on all outbound links.
'''
# This is kind of hacky, because we need to check both the netloc AND
# part of the path. We could use urllib.parse.urlsplit, but it's
# easier and just as effective to use string checks.
if url.startswith("http://www.google.com/url?") or \
url.startswith("https://www.google.com/url?"):
qs = urlparse(url).query
query = parse_qs(qs)
if "q" in query: # Google doc outbound links (maybe blogspot, too)
return True, query["q"].pop()
elif "url" in query: # Outbound links from google searches
@@ -150,7 +132,6 @@ class UnshortenIt(object):
raise ValueError(
"Google outbound proxy URL without a target url ('%s')?" %
url)
return False, url
def _unshorten_adfly(self, uri):
@@ -163,14 +144,11 @@ class UnshortenIt(object):
if len(ysmm) > 0:
ysmm = re.sub(r'var ysmm \= \'|\'\;', '', ysmm[0])
left = ''
right = ''
for c in [ysmm[i:i + 2] for i in range(0, len(ysmm), 2)]:
left += c[0]
right = c[1] + right
# Additional digit arithmetic
encoded_uri = list(left + right)
numbers = ((i, n) for i, n in enumerate(encoded_uri) if str.isdigit(n))
@@ -178,12 +156,9 @@ class UnshortenIt(object):
xor = int(first[1]) ^ int(second[1])
if xor < 10:
encoded_uri[first[0]] = str(xor)
decoded_uri = b64decode("".join(encoded_uri).encode())[16:-16].decode()
if re.search(r'go\.php\?u\=', decoded_uri):
decoded_uri = b64decode(re.sub(r'(.*?)u=', '', decoded_uri)).decode()
return decoded_uri, r.code
else:
return uri, 'No ysmm variable found'
@@ -195,23 +170,15 @@ class UnshortenIt(object):
'''
(Attempt) to decode linkbucks content. HEAVILY based on the OSS jDownloader codebase.
This has necessidated a license change.
'''
r = httptools.downloadpage(uri, timeout=self._timeout)
firstGet = time.time()
baseloc = r.url
if "/notfound/" in r.url or \
"(>Link Not Found<|>The link may have been deleted by the owner|To access the content, you must complete a quick survey\.)" in r.data:
return uri, 'Error: Link not found or requires a survey!'
link = None
content = r.data
regexes = [
r"<div id=\"lb_header\">.*?/a>.*?<a.*?href=\"(.*?)\".*?class=\"lb",
r"AdBriteInit\(\"(.*?)\"\)",
@@ -220,66 +187,49 @@ class UnshortenIt(object):
r"src=\"http://static\.linkbucks\.com/tmpl/mint/img/lb\.gif\" /></a>.*?<a href=\"(.*?)\"",
r"id=\"content\" src=\"([^\"]*)",
]
for regex in regexes:
if self.inValidate(link):
link = find_in_text(regex, content)
if self.inValidate(link):
match = find_in_text(r"noresize=\"[0-9+]\" src=\"(http.*?)\"", content)
if match:
link = find_in_text(r"\"frame2\" frameborder.*?src=\"(.*?)\"", content)
if self.inValidate(link):
scripts = re.findall("(<script type=\"text/javascript\">[^<]+</script>)", content)
if not scripts:
return uri, "No script bodies found?"
js = False
for script in scripts:
# cleanup
script = re.sub(r"[\r\n\s]+\/\/\s*[^\r\n]+", "", script)
if re.search(r"\s*var\s*f\s*=\s*window\['init'\s*\+\s*'Lb'\s*\+\s*'js'\s*\+\s*''\];[\r\n\s]+", script):
js = script
if not js:
return uri, "Could not find correct script?"
token = find_in_text(r"Token\s*:\s*'([a-f0-9]{40})'", js)
if not token:
token = find_in_text(r"\?t=([a-f0-9]{40})", js)
assert token
authKeyMatchStr = r"A(?:'\s*\+\s*')?u(?:'\s*\+\s*')?t(?:'\s*\+\s*')?h(?:'\s*\+\s*')?K(?:'\s*\+\s*')?e(?:'\s*\+\s*')?y"
l1 = find_in_text(r"\s*params\['" + authKeyMatchStr + r"'\]\s*=\s*(\d+?);", js)
l2 = find_in_text(
r"\s*params\['" + authKeyMatchStr + r"'\]\s*=\s?params\['" + authKeyMatchStr + r"'\]\s*\+\s*(\d+?);",
js)
if any([not l1, not l2, not token]):
return uri, "Missing required tokens?"
authkey = int(l1) + int(l2)
p1_url = urljoin(baseloc, "/director/?t={tok}".format(tok=token))
r2 = httptools.downloadpage(p1_url, timeout=self._timeout)
p1_url = urljoin(baseloc, "/scripts/jquery.js?r={tok}&{key}".format(tok=token, key=l1))
r2_1 = httptools.downloadpage(p1_url, timeout=self._timeout)
time_left = 5.033 - (time.time() - firstGet)
xbmc.sleep(max(time_left, 0) * 1000)
p3_url = urljoin(baseloc, "/intermission/loadTargetUrl?t={tok}&aK={key}&a_b=false".format(tok=token,
key=str(authkey)))
r3 = httptools.downloadpage(p3_url, timeout=self._timeout)
resp_json = json.loads(r3.data)
if "Url" in resp_json:
return resp_json['Url'], r3.code
return "Wat", "wat"
def inValidate(self, s):
@@ -287,30 +237,23 @@ class UnshortenIt(object):
# (s == null || s != null && (s.matches("[\r\n\t ]+") || s.equals("") || s.equalsIgnoreCase("about:blank")))
if not s:
return True
if re.search("[\r\n\t ]+", s) or s.lower() == "about:blank":
return True
else:
return False
def _unshorten_adfocus(self, uri):
orig_uri = uri
try:
r = httptools.downloadpage(uri, timeout=self._timeout)
html = r.data
adlink = re.findall("click_url =.*;", html)
if len(adlink) > 0:
uri = re.sub('^click_url = "|"\;$', '', adlink[0])
if re.search(r'http(s|)\://adfoc\.us/serve/skip/\?id\=', uri):
http_header = dict()
http_header["Host"] = "adfoc.us"
http_header["Referer"] = orig_uri
r = httptools.downloadpage(uri, headers=http_header, timeout=self._timeout)
uri = r.url
return uri, r.code
else:
@@ -340,20 +283,16 @@ class UnshortenIt(object):
try:
r = httptools.downloadpage(uri, timeout=self._timeout)
html = r.data
session_id = re.findall(r'sessionId\:(.*?)\"\,', html)
if len(session_id) > 0:
session_id = re.sub(r'\s\"', '', session_id[0])
http_header = dict()
http_header["Content-Type"] = "application/x-www-form-urlencoded"
http_header["Host"] = "sh.st"
http_header["Referer"] = uri
http_header["Origin"] = "http://sh.st"
http_header["X-Requested-With"] = "XMLHttpRequest"
xbmc.sleep(5 * 1000)
payload = {'adSessionId': session_id, 'callback': 'c'}
r = httptools.downloadpage(
'http://sh.st/shortest-url/end-adsession?' +
@@ -361,7 +300,6 @@ class UnshortenIt(object):
headers=http_header,
timeout=self._timeout)
response = r.data[6:-2].decode('utf-8')
if r.code == 200:
resp_uri = json.loads(response)['destinationUrl']
if resp_uri is not None:
@@ -401,12 +339,9 @@ class UnshortenIt(object):
try:
r = httptools.downloadpage(uri, timeout=self._timeout, cookies=False)
html = r.data
uri = re.findall(r"<input type='hidden' name='\d+' id='\d+' value='([^']+)'>", html)[0]
from core import scrapertools
uri = scrapertools.decodeHtmlentities(uri)
uri = uri.replace("&sol;", "/") \
.replace("&colon;", ":") \
.replace("&period;", ".") \
@@ -414,7 +349,6 @@ class UnshortenIt(object):
.replace("&num;", "#") \
.replace("&quest;", "?") \
.replace("&lowbar;", "_")
return uri, r.code
except Exception as e:
@@ -424,9 +358,7 @@ class UnshortenIt(object):
try:
r = httptools.downloadpage(uri, timeout=self._timeout, cookies=False)
html = r.data
uri = re.findall(r'<a class="button" href="([^"]+)">Click to continue</a>', html)[0]
return uri, r.code
except Exception as e:

View File

@@ -130,7 +130,10 @@ def render_items(itemlist, parent_item):
# Recorremos el itemlist
for item in itemlist:
channel_parameters = channeltools.get_channel_parameters(item.channel)
try:
channel_parameters = channeltools.get_channel_parameters(item.channel)
except:
pass
#logger.debug(item)
# Si el item no contiene categoria, le ponemos la del item padre
if item.category == "":
@@ -172,9 +175,11 @@ def render_items(itemlist, parent_item):
# Añade headers a las imagenes si estan en un servidor con cloudflare
from core import httptools
item.thumbnail = httptools.get_url_headers(item.thumbnail)
if item.action == 'play':
item.thumbnail = unify.thumbnail_type(item)
else:
item.thumbnail = httptools.get_url_headers(item.thumbnail)
item.fanart = httptools.get_url_headers(item.fanart)
item.thumbnail = unify.thumbnail_type(item)
# IconImage para folder y video
if item.folder:
icon_image = "DefaultFolder.png"
@@ -192,12 +197,12 @@ def render_items(itemlist, parent_item):
fanart = os.path.join(config.get_runtime_path(), "fanart.jpg")
# Creamos el listitem
listitem = xbmcgui.ListItem(item.title)
#listitem = xbmcgui.ListItem(item.title)
# values icon, thumb or poster are skin dependent.. so we set all to avoid problems
# if not exists thumb it's used icon value
if config.get_platform(True)['num_version'] >= 16.0:
listitem.setArt({'icon': icon_image, 'thumb': item.contentThumbnail, 'poster': item.thumbnail,
listitem.setArt({'icon': icon_image, 'thumb': item.thumbnail, 'poster': item.thumbnail,
'fanart': fanart})
else:
listitem.setIconImage(icon_image)

View File

@@ -169,7 +169,7 @@ def add_languages(title, languages):
def set_color(title, category):
#logger.info()
color_scheme = {'otro': 'white'}
color_scheme = {'otro': 'white', 'dual': 'white'}
#logger.debug('category antes de remove: %s' % category)
category = remove_format(category).lower()
@@ -209,6 +209,7 @@ def set_lang(language):
'sub: español', 'vs', 'zs', 'vs', 'english-spanish subs', 'ingles sub espanol']
vos=['vos', 'sub ingles', 'engsub', 'vosi','ingles subtitulado', 'sub: ingles']
vo=['ingles', 'en','vo', 'ovos', 'eng','v.o', 'english']
dual=['dual']
language = scrapertools.decodeHtmlentities(language)
old_lang = language
@@ -227,6 +228,8 @@ def set_lang(language):
language = 'vos'
elif language in vo:
language = 'vo'
elif language in dual:
language = 'dual'
else:
language = 'otro'
@@ -322,7 +325,15 @@ def title_format(item):
elif item.contentTitle:
# Si el titulo no tiene contentSerieName entonces se formatea como pelicula
item.title = '%s' % set_color(item.contentTitle, 'movie')
saga = False
if 'saga' in item.title.lower():
item.title = '%s [Saga]' % set_color(item.contentTitle, 'movie')
elif 'miniserie' in item.title.lower():
item.title = '%s [Miniserie]' % set_color(item.contentTitle, 'movie')
elif 'extend' in item.title.lower():
item.title = '%s [V.Extend.]' % set_color(item.contentTitle, 'movie')
else:
item.title = '%s' % set_color(item.contentTitle, 'movie')
if item.contentType=='movie':
if item.context:
if isinstance(item.context, list):
@@ -389,7 +400,7 @@ def title_format(item):
item.title = '%s %s' % (item.title, set_color(rating, color_rating))
# Damos formato a la calidad si existiera y lo agregamos al titulo
if item.quality:
if item.quality and isinstance(item.quality, str):
quality = item.quality.strip()
item.title = '%s %s' % (item.title, set_color(quality, 'quality'))
else:
@@ -459,30 +470,25 @@ def title_format(item):
def thumbnail_type(item):
#logger.info()
# Se comprueba que tipo de thumbnail se utilizara en findvideos,
# Poster o Logo del servidor
thumb_type = config.get_setting('video_thumbnail_type')
#logger.debug('thumb_type: %s' % thumb_type)
info = item.infoLabels
#logger.debug('item.thumbnail: %s'%item.thumbnail)
item.contentThumbnail = item.thumbnail
if info:
if info['thumbnail'] !='':
item.contentThumbnail = info['thumbnail']
if info['thumbnail'] !='':
item.contentThumbnail = info['thumbnail']
else:
item.contentThumbnail = item.thumbnail
if item.action == 'play':
if thumb_type == 0:
if info and info['thumbnail'] != '':
item.thumbnail = info['thumbnail']
elif thumb_type == 1:
from core.servertools import get_server_parameters
#logger.debug('item.server: %s'%item.server)
server_parameters = get_server_parameters(item.server.lower())
item.thumbnail = server_parameters.get("thumbnail", "")
#logger.debug('thumbnail: %s' % item.thumb)
if item.action == 'play':
if thumb_type == 0:
if info['thumbnail'] != '':
item.thumbnail = info['thumbnail']
elif thumb_type == 1:
from core.servertools import get_server_parameters
#logger.debug('item.server: %s'%item.server)
server_parameters = get_server_parameters(item.server.lower())
item.thumbnail = server_parameters.get("thumbnail", "")
return item.thumbnail

View File

@@ -1,34 +1,36 @@
# -*- coding: utf-8 -*-
import base64
from core import scrapertools
from core import httptools, scrapertools
from platformcode import logger
def test_video_exists(page_url):
logger.info("(page_url='%s')" % page_url)
data = httptools.downloadpage(page_url).data
if "File was deleted" in data:
return False, "[speedvideo] El archivo no existe o ha sido borrado"
return True, ""
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
def get_video_url(page_url,
premium=False,
user="",
password="",
video_password=""):
logger.info("url=" + page_url)
video_urls = []
data = scrapertools.cachePage(page_url)
data = httptools.downloadpage(page_url).data
codif = scrapertools.find_single_match(data, 'var [a-z]+ = ([0-9]+);')
link = scrapertools.find_single_match(data, 'linkfile ="([^"]+)"')
numero = int(codif)
media_urls = scrapertools.find_multiple_matches(data, r"file:[^']'([^']+)',\s*label:[^\"]\"([^\"]+)\"")
# Decrypt link base64 // python version of speedvideo's base64_decode() [javascript]
for media_url, label in media_urls:
media_url = httptools.downloadpage(media_url, only_headers=True, follow_redirects=False).headers.get("location", "")
link1 = link[:numero]
link2 = link[numero + 10:]
link = link1 + link2
media_url = base64.b64decode(link)
video_urls.append(["." + media_url.rsplit('.', 1)[1] + ' [speedvideo]', media_url])
if media_url:
video_urls.append([label + " " + media_url.rsplit('.', 1)[1] + ' [speedvideo]', media_url])
return video_urls

View File

@@ -12,6 +12,10 @@
{
"pattern": "embed[./]yourupload.com(?:/|.php\\?url=)([A-z0-9]+)",
"url": "http://www.yourupload.com/embed/\\1"
},
{
"pattern": "(yourupload.com/download\\?file=[A-z0-9]+)",
"url": "https://www.\\1&sendFile=true"
}
]
},

View File

@@ -17,21 +17,27 @@ def test_video_exists(page_url):
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
logger.info("(page_url='%s')" % page_url)
video_urls = []
data = httptools.downloadpage(page_url).data
url1 = httptools.downloadpage(page_url, follow_redirects=False, only_headers=True).headers.get("location", "")
referer = {'Referer': page_url}
url = scrapertools.find_single_match(data, '<meta property="og:video" content="([^"]+)"')
if not url:
url = scrapertools.find_single_match(data, "file:\s*'([^']+)'")
if "download" in page_url:
url = httptools.downloadpage("https:" + url1, headers=referer, follow_redirects=False, only_headers=True).headers.get("location", "")
else:
url = scrapertools.find_single_match(data, "file:\s*'([^']+)'")
if url:
url = "https://www.yourupload.com%s" % url
referer = {'Referer': page_url}
location = httptools.downloadpage(url, headers=referer, follow_redirects=False, only_headers=True)
media_url = location.headers["location"].replace("?start=0", "").replace("https", "http")
media_url += "|Referer=%s" % url
video_urls.append([scrapertools.get_filename_from_url(media_url)[-4:] + " [yourupload]", media_url])
if "vidcache" not in url:
url = "https://www.yourupload.com%s" % url
location = httptools.downloadpage(url, headers=referer, follow_redirects=False, only_headers=True)
media_url = location.headers["location"].replace("?start=0", "").replace("https", "http")
ext = media_url[-4:]
media_url += "|Referer=%s" % url
else:
ext = url[-4:]
media_url = url +"|Referer=%s" % page_url
video_urls.append([ext + " [yourupload]", media_url])
for video_url in video_urls:
logger.info("%s - %s" % (video_url[0], video_url[1]))
return video_urls