Merge branch 'master' into fixes

This commit is contained in:
Alfa-beto
2018-10-03 11:04:19 -03:00
committed by GitHub
27 changed files with 272 additions and 312 deletions
+8 -12
View File
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.alfa" name="Alfa" version="2.7.5" provider-name="Alfa Addon">
<addon id="plugin.video.alfa" name="Alfa" version="2.7.6" provider-name="Alfa Addon">
<requires>
<import addon="xbmc.python" version="2.1.0"/>
<import addon="script.module.libtorrent" optional="true"/>
@@ -19,19 +19,15 @@
</assets>
<news>[B]Estos son los cambios para esta versión:[/B]
[COLOR green][B]Canales agregados y arreglos[/B][/COLOR]
¤ divxtotal ¤ elitetorrent
¤ estrenosgo ¤ grantorrent
¤ mejortorrent1 ¤ newpct1
¤ pelismagnet ¤ todopeliculas
¤ allpeliculas ¤ puyasubs
¤ yape ¤ dilo
¤ goovie ¤ pelisipad
¤ seriesblanco ¤ pepecine
¤ maxipelis24 ¤ pelisplanet
¤ yts
¤ newpct1 ¤ zonatorrent
¤ mejortorrent ¤ mejortorrent1
¤ clasicofilm ¤ danimados
¤ pelisplus ¤ seriesblancoxyz
¤ pelisplanet ¤ canalporno
¤ pelisgratis ¤ hdfull
¤ arreglos internos
¤ Agradecimientos a @wrlopez y @chivmalev por colaborar en ésta versión
¤ Agradecimientos a @chivmalev por colaborar en ésta versión
</news>
<description lang="es">Navega con Kodi por páginas web para ver sus videos de manera fácil.</description>
+6 -5
View File
@@ -63,14 +63,15 @@ def categorias(item):
data = httptools.downloadpage(item.url).data
bloque = scrapertools.find_single_match(data, '<ul class="ordenar-por ordenar-por-categoria">'
'(.*?)<div class="publis-bottom">')
'(.*?)<\/ul>')
patron = '<div class="muestra-categorias">.*?<a class="thumb" href="([^"]+)".*?<img class="categorias" src="([^"]+)".*?<div class="nombre">([^"]+)</div>'
#patron = '<div class="muestra-categorias">.*?<a class="thumb" href="([^"]+)".*?<img class="categorias" src="([^"]+)".*?<div class="nombre">([^"]+)</div>'
patron = "<li><a href='([^']+)'\s?title='([^']+)'>.*?<\/a><\/li>"
matches = scrapertools.find_multiple_matches(bloque, patron)
for url, thumbnail, title in matches:
for url, title in matches:
url = host + url
thumbnail = "http:" + thumbnail
itemlist.append(item.clone(action="findvideos", title=title, url=url, thumbnail=thumbnail))
#thumbnail = "http:" + thumbnail
itemlist.append(item.clone(action="findvideos", title=title, url=url))
return itemlist
+25 -58
View File
@@ -2,13 +2,11 @@
import re
from core import filetools
from core import jsontools
from core import httptools
from core import scrapertools
from core import servertools
from core import tmdb
from core import videolibrarytools
from core.item import Item
from platformcode import config, platformtools, logger
from channelselector import get_thumb
@@ -32,19 +30,16 @@ else:
def mainlist(item):
logger.info()
itemlist = []
itemlist.append(item.clone(title="Películas", text_color=color2, action="", text_bold=True))
itemlist.append(item.clone(action="peliculas", title=" Novedades",
url="http://www.clasicofilm.com/feeds/posts/summary?start-index=1&max-results=20&alt=json-in-script&callback=finddatepost",
url = host + "feeds/posts/summary?start-index=1&max-results=20&alt=json-in-script&callback=finddatepost",
thumbnail=get_thumb('newest', auto=True), text_color=color1))
itemlist.append(item.clone(action="generos", title=" Por géneros", url=host,
thumbnail=get_thumb('genres', auto=True), text_color=color1))
itemlist.append(item.clone(title="", action=""))
itemlist.append(item.clone(action="search", title="Buscar...", text_color=color3,
thumbnail=get_thumb('search', auto=True)))
itemlist.append(item.clone(action="configuracion", title="Configurar canal...", text_color="gold", folder=False))
return itemlist
@@ -56,7 +51,6 @@ def configuracion(item):
def search(item, texto):
logger.info()
data = httptools.downloadpage(host).data
texto = texto.replace(" ", "%20")
item.url = host + "search?q=%s" % texto
try:
@@ -75,20 +69,17 @@ def newest(categoria):
item = Item()
try:
if categoria == 'peliculas':
item.url = "http://www.clasicofilm.com/feeds/posts/summary?start-index=1&max-results=20&alt=json-in-script&callback=finddatepost"
item.url = host + "feeds/posts/summary?start-index=1&max-results=20&alt=json-in-script&callback=finddatepost"
item.action = "peliculas"
itemlist = peliculas(item)
if itemlist[-1].action == "peliculas":
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
@@ -96,13 +87,10 @@ def peliculas(item):
logger.info()
itemlist = []
item.text_color = color2
# Descarga la página
data = httptools.downloadpage(item.url).data
data = scrapertools.find_single_match(data, 'finddatepost\((\{.*?\]\}\})\);')
data = jsontools.load(data)["feed"]
for entry in data["entry"]:
for link in entry["link"]:
if link["rel"] == "alternate":
@@ -124,17 +112,12 @@ def peliculas(item):
url=url, thumbnail=thumbnail, infoLabels=infolabels,
contentTitle=fulltitle, contentType="movie")
itemlist.append(new_item)
try:
tmdb.set_infoLabels(itemlist, __modo_grafico__)
except:
pass
tmdb.set_infoLabels(itemlist, __modo_grafico__)
actualpage = int(scrapertools.find_single_match(item.url, 'start-index=(\d+)'))
totalresults = int(data["openSearch$totalResults"]["$t"])
if actualpage + 20 < totalresults:
url_next = item.url.replace("start-index=" + str(actualpage), "start-index=" + str(actualpage + 20))
itemlist.append(Item(channel=item.channel, action=item.action, title=">> Página Siguiente", url=url_next))
return itemlist
@@ -163,7 +146,6 @@ def busqueda(item):
def generos(item):
logger.info()
itemlist = []
# Descarga la página
data = httptools.downloadpage(item.url).data
patron = '<b>([^<]+)</b><br\s*/>\s*<script src="([^"]+)"'
@@ -174,50 +156,35 @@ def generos(item):
.replace("recentpostslist", "finddatepost")
itemlist.append(Item(channel=item.channel, action="peliculas", title=scrapedtitle, url=scrapedurl,
thumbnail=item.thumbnail, text_color=color3))
itemlist.sort(key=lambda x: x.title)
return itemlist
def findvideos(item):
def decodifica_id(txt):
res = ''
for i in range(0, len(txt), 3):
res += '\\u0' + txt[i:i+3]
return res.decode('unicode-escape') #Ej: {"v":"9KD2iEmiYLsF"}
def findvideos(item):
logger.info()
itemlist = []
if item.infoLabels["tmdb_id"]:
tmdb.set_infoLabels_item(item, __modo_grafico__)
data = httptools.downloadpage(item.url).data
iframe = scrapertools.find_single_match(data, '<iframe src="([^"]+)"')
data = data.replace("googleusercontent","malo") # para que no busque enlaces erroneos de gvideo
if "goo.gl/" in iframe:
data += httptools.downloadpage(iframe, follow_redirects=False, only_headers=True).headers.get("location", "")
itemlist = servertools.find_video_items(item, data)
library_path = config.get_videolibrary_path()
if "data:text/javascript;base64" in data:
div_id = scrapertools.find_single_match(data, '<div id="([0-9a-fA-F]+)"')
# ~ logger.info(div_id)
vid_id = scrapertools.find_single_match(decodifica_id(div_id), ':"([^"]+)"')
# ~ logger.info(vid_id)
itemlist.append(item.clone(url='http://netu.tv/watch_video.php?v='+vid_id, server='netutv', action='play'))
else:
iframe = scrapertools.find_single_match(data, '<iframe width="720".*?src="([^"]+)"')
data = data.replace("googleusercontent","malo") # para que no busque enlaces erroneos de gvideo
if "goo.gl/" in iframe:
data += httptools.downloadpage(iframe, follow_redirects=False, only_headers=True).headers.get("location", "")
itemlist = servertools.find_video_items(item, data)
if config.get_videolibrary_support():
title = "Añadir película a la videoteca"
if item.infoLabels["imdb_id"] and not library_path.lower().startswith("smb://"):
try:
movie_path = filetools.join(config.get_videolibrary_path(), 'CINE')
files = filetools.walk(movie_path)
for dirpath, dirname, filename in files:
for f in filename:
if item.infoLabels["imdb_id"] in f and f.endswith(".nfo"):
head_nfo, it = videolibrarytools.read_nfo(filetools.join(dirpath, dirname, f))
canales = it.library_urls.keys()
canales.sort()
if "clasicofilm" in canales:
canales.pop(canales.index("clasicofilm"))
canales.insert(0, "[COLOR red]clasicofilm[/COLOR]")
title = "Película ya en tu videoteca. [%s] ¿Añadir?" % ",".join(canales)
break
except:
import traceback
logger.error(traceback.format_exc())
itemlist.append(item.clone(action="add_pelicula_to_library", title=title))
token_auth = config.get_setting("token_trakt", "tvmoviedb")
if token_auth and item.infoLabels["tmdb_id"]:
itemlist.append(item.clone(channel="tvmoviedb", title="[Trakt] Gestionar con tu cuenta", action="menu_trakt",
extra="movie"))
itemlist.append(item.clone(action="add_pelicula_to_library", title="Añadir película a la videoteca"))
return itemlist
+17 -15
View File
@@ -133,14 +133,15 @@ def episodios(item):
itemlist = []
infoLabels = {}
data = httptools.downloadpage(item.url).data
data = re.sub(r"\n|\r|\t|\s{2}|&nbsp;", "", data)
data_lista = scrapertools.find_single_match(data,
'<ul class="episodios">(.+?)<\/ul><\/div><\/div><\/div>')
show = item.title
patron_caps = '<img alt=".+?" src="([^"]+)"><\/a><\/div><div class=".+?">([^"]+)<\/div>.+?'
patron_caps += '<a .+? href="([^"]+)">([^"]+)<\/a>'
patron = '(?s)<ul class="episodios">(.+?)<\/ul>'
data_lista = scrapertools.find_single_match(data,patron)
contentSerieName = item.title
patron_caps = 'href="([^"]+)".*?'
patron_caps += 'src="([^"]+)".*?'
patron_caps += 'numerando">([^<]+).*?'
patron_caps += 'link_go">.*?>([^<]+)'
matches = scrapertools.find_multiple_matches(data_lista, patron_caps)
for scrapedthumbnail, scrapedtempepi, scrapedurl, scrapedtitle in matches:
for scrapedurl, scrapedthumbnail, scrapedtempepi, scrapedtitle in matches:
tempepi=scrapedtempepi.split(" - ")
if tempepi[0]=='Pel':
tempepi[0]=0
@@ -150,8 +151,8 @@ def episodios(item):
itemlist.append(item.clone(thumbnail=scrapedthumbnail,
action="findvideos", title=title, url=scrapedurl))
if config.get_videolibrary_support() and len(itemlist) > 0:
itemlist.append(Item(channel=item.channel, title="[COLOR yellow]Añadir " + show + " a la videoteca[/COLOR]", url=item.url,
action="add_serie_to_library", extra="episodios", show=show))
itemlist.append(Item(channel=item.channel, title="[COLOR yellow]Añadir " + contentSerieName + " a la videoteca[/COLOR]", url=item.url,
action="add_serie_to_library", extra="episodios", contentSerieName=contentSerieName))
return itemlist
@@ -159,16 +160,17 @@ def findvideos(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
data = re.sub(r"\n|\r|\t|\s{2}|&nbsp;", "", data)
data1 = scrapertools.find_single_match(data,
'<div id="playex" .+?>(.+?)<\/nav>?\s<\/div><\/div>')
patron = '<div id="playex" .+?>(.+?)<\/nav>'
data1 = scrapertools.find_single_match(data, patron)
patron = "changeLink\('([^']+)'\)"
matches = re.compile(patron, re.DOTALL).findall(data1)
matches = scrapertools.find_multiple_matches(data1, patron)
for url64 in matches:
url1 =base64.b64decode(url64)
if 'danimados' in url1:
new_data = httptools.downloadpage('https:'+url1.replace('stream', 'stream_iframe')).data
logger.info("Intel33 %s" %new_data)
url = 'https:'+url1.replace('stream/', 'stream_iframe/')
id = scrapertools.find_single_match(url, 'iframe/(.*)')
url = url.replace(id, base64.b64encode(id))
new_data = httptools.downloadpage(url).data
url = scrapertools.find_single_match(new_data, "sources: \[\{file:'([^']+)")
if "zkstream" in url:
url1 = httptools.downloadpage(url, follow_redirects=False, only_headers=True).headers.get("location", "")
+30 -19
View File
@@ -65,6 +65,7 @@ def menupeliculas(item):
itemlist.append(Item(channel=item.channel, action="items_usuario",
title="[COLOR orange][B]Pendientes[/B][/COLOR]",
url=host + "/a/my?target=movies&action=pending&start=-28&limit=28", folder=True))
itemlist.append(Item(channel=item.channel, action="fichas", title="ABC", url=host + "/peliculas/abc", folder=True))
itemlist.append(
Item(channel=item.channel, action="fichas", title="Últimas películas", url=host + "/peliculas", folder=True))
@@ -94,6 +95,7 @@ def menuseries(item):
itemlist.append(Item(channel=item.channel, action="items_usuario",
title="[COLOR orange][B]Para Ver[/B][/COLOR]",
url=host + "/a/my?target=shows&action=watch&start=-28&limit=28", folder=True))
itemlist.append(Item(channel=item.channel, action="series_abc", title="A-Z", folder=True))
itemlist.append(Item(channel=item.channel, action="novedades_episodios", title="Últimos Emitidos",
url=host + "/a/episodes?action=latest&start=-24&limit=24&elang=ALL", folder=True))
@@ -109,6 +111,7 @@ def menuseries(item):
Item(channel=item.channel, action="generos_series", title="Series por Género", url=host, folder=True))
itemlist.append(Item(channel=item.channel, action="listado_series", title="Listado de todas las series",
url=host + "/series/list", folder=True))
if account:
itemlist.append(Item(channel=item.channel, action="items_usuario",
title="[COLOR orange][B]Favoritas[/B][/COLOR]",
@@ -235,6 +238,7 @@ def fichas(item):
infoLabels=dict()
## Carga estados
status = jsontools.load(httptools.downloadpage(host + '/a/status/all').data)
if item.title == "Buscar...":
data = agrupa_datos(httptools.downloadpage(item.url, post=item.extra).data)
s_p = scrapertools.get_match(data, '<h3 class="section-title">(.*?)<div id="footer-wrapper">').split(
@@ -248,6 +252,7 @@ def fichas(item):
data = s_p[0] + s_p[1]
else:
data = agrupa_datos(httptools.downloadpage(item.url).data)
data = re.sub(
r'<div class="span-6[^<]+<div class="item"[^<]+' + \
'<a href="([^"]+)"[^<]+' + \
@@ -496,9 +501,11 @@ def findvideos(item):
itemlist = []
it1 = []
it2 = []
## Carga estados
status = jsontools.load(httptools.downloadpage(host + '/a/status/all').data)
url_targets = item.url
## Vídeos
id = ""
type = ""
@@ -521,41 +528,43 @@ def findvideos(item):
thumbnail=item.thumbnail, show=item.show))
it1.append(Item(channel=item.channel, action="set_status", title=title, fulltitle=title, url=url_targets,
thumbnail=item.thumbnail, show=item.show, language=item.language, folder=True))
data_js = httptools.downloadpage("%s/templates/hdfull/js/jquery.hdfull.view.min.js" % host).data
key = scrapertools.find_single_match(data_js, 'JSON.parse\(atob.*?substrings\((.*?)\)')
data_js = httptools.downloadpage("%s/js/providers.js" % host).data
try:
data_js = jhexdecode(data_js)
from lib import alfaresolver
provs = alfaresolver.hdfull_providers(data_js)
if provs == '': return []
except:
from lib.aadecode import decode as aadecode
data_js = data_js.split(";゚ω゚")
decode_aa = ""
for match in data_js:
decode_aa += aadecode(match)
data_js = re.sub(r':(function.*?\})', r':"\g<1>"', decode_aa)
data_js = re.sub(r':(var[^,]+),', r':"\g<1>",', data_js)
return []
data = agrupa_datos(httptools.downloadpage(item.url).data)
data_obf = scrapertools.find_single_match(data, "var ad\s*=\s*'([^']+)'")
data_decrypt = jsontools.load(obfs(base64.b64decode(data_obf), 126 - int(key)))
infolabels = {}
year = scrapertools.find_single_match(data, '<span>A&ntilde;o:\s*</span>.*?(\d{4})')
infolabels["year"] = year
matches = []
for match in data_decrypt:
prov = eval(scrapertools.find_single_match(data_js, 'p\[%s\]\s*=\s*(\{.*?\}[\']\})' % match["provider"]))
server_url = scrapertools.find_single_match(prov['l'], 'return\s*"(.*?)"')
url = '%s%s' % (server_url, match['code'])
url = re.sub(r'\'|"|\s|\+', '', url)
url = re.sub(r'var_\d+\[\d+\]', '', url)
embed = prov["e"]
matches.append([match["lang"], match["quality"], url, embed])
if match['provider'] in provs:
try:
embed = provs[match['provider']][0]
url = eval(provs[match['provider']][1].replace('_code_', "match['code']"))
matches.append([match['lang'], match['quality'], url, embed])
except:
pass
for idioma, calidad, url, embed in matches:
mostrar_server = True
option = "Ver"
option1 = 1
if re.search(r'return ([\'"]{2,}|\})', embed):
if embed == 'd':
option = "Descargar"
option1 = 2
else:
option = "Ver"
option1 = 1
calidad = unicode(calidad, "utf8").upper().encode("utf8")
title = option + ": %s (" + calidad + ")" + " (" + idioma + ")"
thumbnail = item.thumbnail
@@ -569,6 +578,7 @@ def findvideos(item):
Item(channel=item.channel, action="play", title=title, url=url, thumbnail=thumbnail,
plot=plot, fanart=fanart, show=item.show, folder=True, infoLabels=infolabels, language=idioma,
contentTitle=item.contentTitle, contentType=item.contentType, tipo=option, tipo1=option1, idioma=idioma))
it2 = servertools.get_servers_itemlist(it2, lambda i: i.title % i.server.capitalize())
it2.sort(key=lambda it: (it.tipo1, it.idioma, it.server))
for item in it2:
@@ -576,6 +586,7 @@ def findvideos(item):
item.url += "###" + id + ";" + type
itemlist.extend(it1)
itemlist.extend(it2)
## 2 = película
if type == "2" and item.category != "Cine":
if config.get_videolibrary_support():
+42 -4
View File
@@ -1,23 +1,24 @@
{
"id": "mejortorrent",
"name": "Mejor Torrent",
"name": "MejorTorrent",
"active": true,
"adult": false,
"language": ["*"],
"language": ["cast", "lat"],
"thumbnail": "mejortorrent.png",
"banner": "mejortorrent.png",
"categories": [
"torrent",
"movie",
"tvshow",
"documentary"
"documentary",
"vos"
],
"settings": [
{
"id": "domain_name",
"type": "text",
"label": "URL actual de la Web Mejor Torrent",
"default": "http://www.mejortorrent.com/",
"default": "http://www.mejortorrent.org/",
"enabled": true,
"visible": true
},
@@ -37,6 +38,22 @@
"enabled": true,
"visible": true
},
{
"id": "filter_languages",
"type": "list",
"label": "Mostrar enlaces en idioma...",
"default": 0,
"enabled": true,
"visible": true,
"lvalues": [
"No filtrar",
"CAST",
"LAT",
"VO",
"VOS",
"VOSE"
]
},
{
"id": "seleccionar_ult_temporadda_activa",
"type": "bool",
@@ -60,6 +77,27 @@
"default": true,
"enabled": true,
"visible": true
},
{
"id": "timeout_downloadpage",
"type": "list",
"label": "Timeout (segs.) en descarga de páginas o verificación de servidores",
"default": 5,
"enabled": true,
"visible": true,
"lvalues": [
"None",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10"
]
}
]
}
+86 -14
View File
@@ -4,6 +4,7 @@ import re
import sys
import urllib
import urlparse
import time
from channelselector import get_thumb
from core import httptools
@@ -13,11 +14,25 @@ from core.item import Item
from platformcode import config, logger
from core import tmdb
from lib import generictools
from channels import filtertools
from channels import autoplay
host = 'http://www.mejortorrent.com/'
#host = config.get_setting('domain_name', 'mejortorrent')
__modo_grafico__ = config.get_setting('modo_grafico', 'mejortorrent')
#IDIOMAS = {'CAST': 'Castellano', 'LAT': 'Latino', 'VO': 'Version Original'}
IDIOMAS = {'Castellano': 'CAST', 'Latino': 'LAT', 'Version Original': 'VO'}
list_language = IDIOMAS.values()
list_quality = []
list_servers = ['torrent']
channel = "mejortorrent"
host = 'http://www.mejortorrent.org/'
#host = config.get_setting('domain_name', channel)
categoria = channel.capitalize()
__modo_grafico__ = config.get_setting('modo_grafico', channel)
timeout = config.get_setting('timeout_downloadpage', channel)
def mainlist(item):
logger.info()
@@ -31,9 +46,13 @@ def mainlist(item):
thumb_series_az = get_thumb("channels_tvshow_az.png")
thumb_docus = get_thumb("channels_documentary.png")
thumb_buscar = get_thumb("search.png")
thumb_separador = get_thumb("next.png")
thumb_settings = get_thumb("setting_0.png")
autoplay.init(item.channel, list_servers, list_quality)
itemlist.append(Item(channel=item.channel, title="Novedades", action="listado_busqueda", extra="novedades", tipo=False,
url= host + "/secciones.php?sec=ultimos_torrents", thumbnail=thumb_buscar))
#itemlist.append(Item(channel=item.channel, title="Novedades", action="listado_busqueda", extra="novedades", tipo=False,
# url= host + "/secciones.php?sec=ultimos_torrents", thumbnail=thumb_buscar))
itemlist.append(Item(channel=item.channel, title="Peliculas", action="listado", extra="peliculas", tipo=False,
url= host + "/torrents-de-peliculas.html", thumbnail=thumb_pelis))
itemlist.append(Item(channel=item.channel, title="Peliculas HD", action="listado", extra="peliculas", tipo=False,
@@ -57,7 +76,20 @@ def mainlist(item):
itemlist.append(Item(channel=item.channel, title="Documentales Listado Alfabetico", action="alfabeto", extra="documentales", url= host + "/torrents-de-documentales.html", thumbnail=thumb_docus))
itemlist.append(Item(channel=item.channel, title="Buscar...", action="search", thumbnail=thumb_buscar, tipo=False))
itemlist.append(Item(channel=item.channel, url=host, title="[COLOR yellow]Configuración:[/COLOR]", folder=False, thumbnail=thumb_separador))
itemlist.append(Item(channel=item.channel, action="configuracion", title="Configurar canal", thumbnail=thumb_settings))
autoplay.show_option(item.channel, itemlist) #Activamos Autoplay
return itemlist
def configuracion(item):
from platformcode import platformtools
ret = platformtools.show_channel_settings()
platformtools.itemlist_refresh()
return
def alfabeto(item):
@@ -366,6 +398,9 @@ def listado(item):
title = re.sub(r'-\s[m|M].*?serie', '', title)
title_subs += ["Miniserie"]
if item_local.language == []:
item_local.language = ['CAST'] #Por defecto
if title.endswith('.'):
title = title[:-1]
@@ -608,6 +643,9 @@ def listado_busqueda(item):
title = re.sub(r'-\s[m|M].*?serie', '', title)
title_subs += ["Miniserie"]
if item_local.language == []:
item_local.language = ['CAST'] #Por defecto
if title.endswith('.'):
title = title[:-1]
@@ -687,7 +725,13 @@ def listado_busqueda(item):
item_local.contentSeason_save = item_local.contentSeason
del item_local.infoLabels['season']
itemlist.append(item_local.clone())
#Ahora se filtra por idioma, si procede, y se pinta lo que vale
if config.get_setting('filter_languages', channel) > 0: #Si hay idioma seleccionado, se filtra
itemlist = filtertools.get_link(itemlist, item_local, list_language)
else:
itemlist.append(item_local.clone()) #Si no, pintar pantalla
#cnt_title = len(itemlist) #Contador de líneas añadidas
#logger.debug(item_local)
@@ -715,6 +759,10 @@ def listado_busqueda(item):
def findvideos(item):
logger.info()
itemlist = []
itemlist_t = [] #Itemlist total de enlaces
itemlist_f = [] #Itemlist de enlaces filtrados
if not item.language:
item.language = ['CAST'] #Castellano por defecto
#Bajamos los datos de la página
data = ''
@@ -778,6 +826,8 @@ def findvideos(item):
# 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
if not size:
size = generictools.get_torrent_size(item_local.url) #Buscamos el tamaño en el .torrent
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
@@ -785,18 +835,40 @@ def findvideos(item):
item_local.quality = '%s [%s]' % (item.quality, size) #Agregamos size al final de calidad
#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
item_local.server = "torrent" #Seridor Torrent
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
#Preparamos título y calidad, quitamos etiquetas vacías
item_local.title = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.title)
item_local.title = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.title)
item_local.title = item_local.title.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
item_local.quality = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.quality)
item_local.quality = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.quality)
item_local.quality = item_local.quality.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip()
item_local.alive = "??" #Calidad del link sin verificar
item_local.action = "play" #Visualizar vídeo
item_local.server = "torrent" #Seridor Torrent
itemlist.append(item_local.clone()) #Pintar pantalla
itemlist_t.append(item_local.clone()) #Pintar pantalla, si no se filtran idiomas
# Requerido para FilterTools
if config.get_setting('filter_languages', channel) > 0: #Si hay idioma seleccionado, se filtra
itemlist_f = filtertools.get_link(itemlist_f, item_local, list_language) #Pintar pantalla, si no está vacío
#logger.debug("title=[" + item.title + "], torrent=[ " + item_local.url + " ], url=[ " + url + " ], post=[" + item.post + "], thumbnail=[ " + item.thumbnail + " ]" + " size: " + size)
if len(itemlist_f) > 0: #Si hay entradas filtradas...
itemlist.extend(itemlist_f) #Pintamos pantalla filtrada
else:
if config.get_setting('filter_languages', channel) > 0 and len(itemlist_t) > 0: #Si no hay entradas filtradas ...
thumb_separador = get_thumb("next.png") #... pintamos todo con aviso
itemlist.append(Item(channel=item.channel, url=host, title="[COLOR red][B]NO hay elementos con el idioma seleccionado[/B][/COLOR]", thumbnail=thumb_separador))
itemlist.extend(itemlist_t) #Pintar pantalla con todo si no hay filtrado
# Requerido para AutoPlay
autoplay.start(itemlist, item) #Lanzamos Autoplay
return itemlist
@@ -1,6 +1,6 @@
{
"id": "mejortorrent1",
"name": "Mejor Torrent 1",
"name": "MejorTorrent 1",
"active": true,
"adult": false,
"language": ["cast", "lat"],
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "miltorrents",
"name": "Miltorrents",
"active": true,
"active": false,
"adult": false,
"language": ["cast"],
"thumbnail": "http://imgur.com/KZoska0.png",
@@ -7,7 +7,7 @@
"thumbnail": "http://imgur.com/ThH8Zmk.png",
"banner": "peliculasgratis.png",
"categories": [
"torrent",
"direct",
"movie",
"tvshow"
],
@@ -1,12 +0,0 @@
{
"id": "pelispekes",
"name": "PelisPekes",
"active": true,
"adult": false,
"language": ["lat"],
"thumbnail": "pelispekes.png",
"banner": "pelispekes.png",
"categories": [
"movie"
]
}
-63
View File
@@ -1,63 +0,0 @@
# -*- coding: utf-8 -*-
import re
from core import scrapertools
from core import servertools
from core.item import Item
from platformcode import logger
def mainlist(item):
logger.info()
itemlist = []
if item.url == "":
item.url = "http://www.pelispekes.com/"
data = scrapertools.cachePage(item.url)
patron = '<div class="poster-media-card"[^<]+'
patron += '<a href="([^"]+)" title="([^"]+)"[^<]+'
patron += '<div class="poster"[^<]+'
patron += '<div class="title"[^<]+'
patron += '<span[^<]+</span[^<]+'
patron += '</div[^<]+'
patron += '<span class="rating"[^<]+'
patron += '<i[^<]+</i><span[^<]+</span[^<]+'
patron += '</span[^<]+'
patron += '<div class="poster-image-container"[^<]+'
patron += '<img width="\d+" height="\d+" src="([^"]+)"'
matches = re.compile(patron, re.DOTALL).findall(data)
for scrapedurl, scrapedtitle, scrapedthumbnail in matches:
url = scrapedurl
title = scrapedtitle
thumbnail = scrapedthumbnail
plot = ""
logger.debug("title=[" + title + "], url=[" + url + "], thumbnail=[" + thumbnail + "]")
itemlist.append(
Item(channel=item.channel, action="findvideos", title=title, url=url, thumbnail=thumbnail, fanart=thumbnail,
plot=plot, contentTitle=title, contentThumbnail=thumbnail))
# Extrae la pagina siguiente
next_page_url = scrapertools.find_single_match(data,
'<a href="([^"]+)"><i class="glyphicon glyphicon-chevron-right')
if next_page_url != "":
itemlist.append(Item(channel=item.channel, action="mainlist", title=">> Página siguiente", url=next_page_url,
viewmode="movie"))
return itemlist
def findvideos(item):
logger.info("item=" + item.tostring())
data = scrapertools.cachePage(item.url)
data = data.replace("www.pelispekes.com/player/tune.php?nt=", "netu.tv/watch_video.php?v=")
item.plot = scrapertools.find_single_match(data, '<h2>Sinopsis</h2>(.*?)<div')
item.plot = scrapertools.htmlclean(item.plot).strip()
item.contentPlot = item.plot
logger.info("plot=" + item.plot)
return servertools.find_video_items(item=item, data=data)
@@ -13,6 +13,14 @@
"vos"
],
"settings": [
{
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en busqueda global",
"default": false,
"enabled": true,
"visible": true
},
{
"id": "modo_grafico",
"type": "bool",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"id": "seriesblanco",
"name": "SeriesBlanco",
"name": "SeriesBlanco.org",
"active": true,
"adult": false,
"language": ["cast", "lat"],
+1 -1
View File
@@ -1,7 +1,7 @@
{
"id": "tiotorrent",
"name": "TioTorrent",
"active": true,
"active": false,
"adult": false,
"language": ["cast","lat"],
"thumbnail": "https://s1.postimg.cc/29eths1fi7/tiotorrent.png",
+2 -1
View File
@@ -11,7 +11,8 @@
"torrent",
"movie",
"tvshow",
"vos"
"vos",
"direct"
],
"settings": [
{
File diff suppressed because one or more lines are too long
@@ -179,6 +179,9 @@ def render_items(itemlist, parent_item):
from core import httptools
if item.action == 'play':
#### Compatibilidad con Kodi 18: evita que se quede la ruedecedita dando vueltas en enlaces Directos
item.folder = False
item.thumbnail = unify.thumbnail_type(item)
else:
item.thumbnail = httptools.get_url_headers(item.thumbnail)
@@ -1002,12 +1005,6 @@ def set_player(item, xlistitem, mediaurl, view, strm):
# Reproduce
# xbmc_player = xbmc_player
#### Compatibilidad con Kodi 18: evita cuelgues/cancelaciones cuando el .torrent se lanza desde pantalla convencional
if xbmc.getCondVisibility('Window.IsMedia'):
xbmcplugin.setResolvedUrl(int(sys.argv[1]), False, xlistitem) #Preparamos el entorno para evitar error Kod1 18
xbmc.sleep(100) #Dejamos tiempo para que se ejecute
xbmc_player.play(playlist, xlistitem)
if config.get_setting('trakt_sync'):
trakt_tools.wait_for_update_trakt()
@@ -1025,10 +1022,6 @@ def set_player(item, xlistitem, mediaurl, view, strm):
xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, xlistitem)
elif config.get_setting("player_mode") == 2:
#### Compatibilidad con Kodi 18: evita cuelgues/cancelaciones cuando el .torrent se lanza desde pantalla convencional
if xbmc.getCondVisibility('Window.IsMedia'):
xbmcplugin.setResolvedUrl(int(sys.argv[1]), False, xlistitem) #Preparamos el entorno para evitar error Kod1 18
xbmc.sleep(100) #Dejamos tiempo para que se ejecute
xbmc.executebuiltin("PlayMedia(" + mediaurl + ")")
# TODO MIRAR DE QUITAR VIEW
@@ -1089,7 +1082,7 @@ def play_torrent(item, xlistitem, mediaurl):
#### Compatibilidad con Kodi 18: evita cuelgues/cancelaciones cuando el .torrent se lanza desde pantalla convencional
if xbmc.getCondVisibility('Window.IsMedia'):
xbmcplugin.setResolvedUrl(int(sys.argv[1]), False, xlistitem) #Preparamos el entorno para evitar error Kod1 18
xbmc.sleep(500) #Dejamos tiempo para que se ejecute
xbmc.sleep(500) #Dejamos tiempo para que se ejecute
mediaurl = urllib.quote_plus(item.url)
if ("quasar" in torrent_options[seleccion][1] or "elementum" in torrent_options[seleccion][1]) and item.infoLabels['tmdb_id']: #Llamada con más parámetros para completar el título
@@ -3245,6 +3245,10 @@ msgctxt "#70135"
msgid "Custom Colours"
msgstr "Colores Personalizados"
msgctxt "#70136"
msgid "Tv Show"
msgstr "Serie"
msgctxt "#70137"
msgid "Movies"
msgstr "Películas"
@@ -4000,7 +4004,7 @@ msgid "Error in the user and/or password. Check your credentials"
msgstr "Error en el usuario y/o contraseña. Comprueba tus credenciales"
msgctxt "#70331"
msgid "Error during login. Check your credentials
msgid "Error during login. Check your credentials"
msgstr "Error durante el login. Comprueba tus credenciales"
msgctxt "#70332"
@@ -4052,7 +4056,7 @@ msgid "[Trakt] Remove %s from your watchlist"
msgstr "[Trakt] Eliminar %s de tu watchlist"
msgctxt "#70344"
msgid "Add to %s your watchlist""
msgid "Add to %s your watchlist"
msgstr "[Trakt] Añadir %s a tu watchlist"
msgctxt "#70345"
@@ -4060,7 +4064,7 @@ msgid "[Trakt] Remove %s from your collection"
msgstr "[Trakt] Eliminar %s de tu colección"
msgctxt "#70346"
msgid "[Trakt] Add %s to your collection
msgid "[Trakt] Add %s to your collection"
msgstr "[Trakt] Añadir %s a tu colección"
msgctxt "#70347"
@@ -4684,8 +4688,8 @@ msgid "Genre: "
msgstr "Género: "
msgctxt "#70500"
msgid "Notification([COLOR red][B]Update Kodi to its latest version[/B][/COLOR], [COLOR skyblue]for best info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")"
msgstr "Notification([COLOR red][B]Actualiza Kodi a su última versión[/B][/COLOR], [COLOR skyblue]para mejor info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")"
msgid "Notification([COLOR red][B]Update Kodi to its latest version[/B][/COLOR], [COLOR skyblue]for best info[/COLOR],8000, \"http://i.imgur.com/mHgwcn3.png\")"
msgstr "Notification([COLOR red][B]Actualiza Kodi a su última versión[/B][/COLOR], [COLOR skyblue]para mejor info[/COLOR],8000, \"http://i.imgur.com/mHgwcn3.png\")"
msgctxt "#70501"
msgid "Search did not match (%s)"
@@ -4928,7 +4932,7 @@ msgid "Movies by Genre"
msgstr "Por generos"
msgctxt "#70561"
msgid "Search Similar
msgid "Search Similar"
msgstr "Buscar Similares"
@@ -3245,6 +3245,10 @@ msgctxt "#70135"
msgid "Custom Colours"
msgstr "Colores Personalizados"
msgctxt "#70136"
msgid "Tv Show"
msgstr "Serie"
msgctxt "#70137"
msgid "Movies"
msgstr "Películas"
@@ -4000,7 +4004,7 @@ msgid "Error in the user and/or password. Check your credentials"
msgstr "Error en el usuario y/o contraseña. Comprueba tus credenciales"
msgctxt "#70331"
msgid "Error during login. Check your credentials
msgid "Error during login. Check your credentials"
msgstr "Error durante el login. Comprueba tus credenciales"
msgctxt "#70332"
@@ -4052,7 +4056,7 @@ msgid "[Trakt] Remove %s from your watchlist"
msgstr "[Trakt] Eliminar %s de tu watchlist"
msgctxt "#70344"
msgid "Add to %s your watchlist""
msgid "Add to %s your watchlist"
msgstr "[Trakt] Añadir %s a tu watchlist"
msgctxt "#70345"
@@ -4060,7 +4064,7 @@ msgid "[Trakt] Remove %s from your collection"
msgstr "[Trakt] Eliminar %s de tu colección"
msgctxt "#70346"
msgid "[Trakt] Add %s to your collection
msgid "[Trakt] Add %s to your collection"
msgstr "[Trakt] Añadir %s a tu colección"
msgctxt "#70347"
@@ -4684,8 +4688,8 @@ msgid "Genre: "
msgstr "Género: "
msgctxt "#70500"
msgid "Notification([COLOR red][B]Update Kodi to its latest version[/B][/COLOR], [COLOR skyblue]for best info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")"
msgstr "Notification([COLOR red][B]Actualiza Kodi a su última versión[/B][/COLOR], [COLOR skyblue]para mejor info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")"
msgid "Notification([COLOR red][B]Update Kodi to its latest version[/B][/COLOR], [COLOR skyblue]for best info[/COLOR],8000, \"http://i.imgur.com/mHgwcn3.png\")"
msgstr "Notification([COLOR red][B]Actualiza Kodi a su última versión[/B][/COLOR], [COLOR skyblue]para mejor info[/COLOR],8000, \"http://i.imgur.com/mHgwcn3.png\")"
msgctxt "#70501"
msgid "Search did not match (%s)"
@@ -4928,7 +4932,7 @@ msgid "Movies by Genre"
msgstr "Por generos"
msgctxt "#70561"
msgid "Search Similar
msgid "Search Similar"
msgstr "Buscar Similares"
@@ -3245,6 +3245,10 @@ msgctxt "#70135"
msgid "Custom Colours"
msgstr "Colores Personalizados"
msgctxt "#70136"
msgid "Tv Show"
msgstr "Serie"
msgctxt "#70137"
msgid "Movies"
msgstr "Películas"
@@ -4000,7 +4004,7 @@ msgid "Error in the user and/or password. Check your credentials"
msgstr "Error en el usuario y/o contraseña. Comprueba tus credenciales"
msgctxt "#70331"
msgid "Error during login. Check your credentials
msgid "Error during login. Check your credentials"
msgstr "Error durante el login. Comprueba tus credenciales"
msgctxt "#70332"
@@ -4052,7 +4056,7 @@ msgid "[Trakt] Remove %s from your watchlist"
msgstr "[Trakt] Eliminar %s de tu watchlist"
msgctxt "#70344"
msgid "Add to %s your watchlist""
msgid "Add to %s your watchlist"
msgstr "[Trakt] Añadir %s a tu watchlist"
msgctxt "#70345"
@@ -4060,7 +4064,7 @@ msgid "[Trakt] Remove %s from your collection"
msgstr "[Trakt] Eliminar %s de tu colección"
msgctxt "#70346"
msgid "[Trakt] Add %s to your collection
msgid "[Trakt] Add %s to your collection"
msgstr "[Trakt] Añadir %s a tu colección"
msgctxt "#70347"
@@ -4684,8 +4688,8 @@ msgid "Genre: "
msgstr "Género: "
msgctxt "#70500"
msgid "Notification([COLOR red][B]Update Kodi to its latest version[/B][/COLOR], [COLOR skyblue]for best info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")"
msgstr "Notification([COLOR red][B]Actualiza Kodi a su última versión[/B][/COLOR], [COLOR skyblue]para mejor info[/COLOR],8000, "http://i.imgur.com/mHgwcn3.png")"
msgid "Notification([COLOR red][B]Update Kodi to its latest version[/B][/COLOR], [COLOR skyblue]for best info[/COLOR],8000, \"http://i.imgur.com/mHgwcn3.png\")"
msgstr "Notification([COLOR red][B]Actualiza Kodi a su última versión[/B][/COLOR], [COLOR skyblue]para mejor info[/COLOR],8000, \"http://i.imgur.com/mHgwcn3.png\")"
msgctxt "#70501"
msgid "Search did not match (%s)"
@@ -4928,7 +4932,7 @@ msgid "Movies by Genre"
msgstr "Por generos"
msgctxt "#70561"
msgid "Search Similar
msgid "Search Similar"
msgstr "Buscar Similares"
+2 -2
View File
@@ -22,7 +22,7 @@ def get_video_url(page_url, user="", password="", video_password=""):
video_urls = []
videos = scrapertools.find_multiple_matches(unpacked, 'file:"([^"]+).*?label:"([^"]+)')
for video, label in videos:
video_urls.append([label + " [clipwatching]", video])
logger.info("Url: %s" % videos)
if ".jpg" not in video:
video_urls.append([label + " [clipwatching]", video])
video_urls.sort(key=lambda it: int(it[0].split("p ", 1)[0]))
return video_urls
+2
View File
@@ -8,6 +8,8 @@ from platformcode import logger
def test_video_exists(page_url):
logger.info("(page_url='%s')" % page_url)
response = httptools.downloadpage(page_url)
if "Contenido rechazado" in response.data:
return False, "[Dailymotion] El archivo no existe o ha sido borrado"
if response.code == 404:
return False, "[Dailymotion] El archivo no existe o ha sido borrado"
return True, ""
+2
View File
@@ -17,6 +17,8 @@ def test_video_exists(page_url):
data = httptools.downloadpage(page_url, headers={'referer': referer}).data
if data == "File was deleted" or data == '':
return False, "[powvideo] El video ha sido borrado"
if 'function(p,a,c,k,e,' not in data:
return False, "[powvideo] El video no está disponible"
return True, ""
@@ -1,42 +0,0 @@
{
"active": true,
"find_videos": {
"ignore_urls": [],
"patterns": [
{
"pattern": "streamix.cloud/(?:embed-|)([A-z0-9]+)",
"url": "http://streamix.cloud/embed-\\1.html"
}
]
},
"free": true,
"id": "streamixcloud",
"name": "streamixcloud",
"settings": [
{
"default": false,
"enabled": true,
"id": "black_list",
"label": "@60654",
"type": "bool",
"visible": true
},
{
"default": 0,
"enabled": true,
"id": "favorites_servers_list",
"label": "@60655",
"lvalues": [
"No",
"1",
"2",
"3",
"4",
"5"
],
"type": "list",
"visible": false
}
],
"thumbnail": "http://i.imgur.com/NuD85Py.png?1"
}
@@ -1,30 +0,0 @@
# -*- coding: utf-8 -*-
from core import httptools
from core import scrapertools
from lib import jsunpack
from platformcode import logger
def test_video_exists(page_url):
logger.info("(page_url='%s')" % page_url)
data = httptools.downloadpage(page_url).data
if "Not Found" in data or "File was deleted" in data:
return False, "[streamixcloud] El archivo no existe o ha sido borrado"
if "Video is processing" in data:
return False, "[streamixcloud] El video se está procesando, inténtelo mas tarde"
return True, ""
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
logger.info("(page_url='%s')" % page_url)
data = httptools.downloadpage(page_url).data
video_urls = []
patron = "<script type='text/javascript'>(eval\(function\(p,a,c,k,e,d.*?)</script"
packed = scrapertools.find_single_match(data, patron)
data = jsunpack.unpack(packed)
media_url = scrapertools.find_multiple_matches(data, '\{file:"([^"]+)",')
ext = scrapertools.get_filename_from_url(media_url[0])[-4:]
for url in media_url:
video_urls.append(["%s [streamixcloud]" % ext, url])
return video_urls
+2
View File
@@ -11,6 +11,8 @@ def test_video_exists(page_url):
data = httptools.downloadpage(page_url).data
if "Video not found..." in data:
return False, config.get_localized_string(70292) % "Thevid"
if "Video removed for inactivity..." in data:
return False, "[Thevid] El video ha sido removido por inactividad"
return True, ""