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

This commit is contained in:
Unknown
2017-10-02 09:43:03 -03:00
32 changed files with 728 additions and 3748 deletions
+8 -6
View File
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.alfa" name="Alfa" version="2.1.0" provider-name="Alfa Addon"> <addon id="plugin.video.alfa" name="Alfa" version="2.1.2" provider-name="Alfa Addon">
<requires> <requires>
<import addon="xbmc.python" version="2.1.0"/> <import addon="xbmc.python" version="2.1.0"/>
<import addon="script.module.libtorrent" optional="true"/> <import addon="script.module.libtorrent" optional="true"/>
@@ -19,11 +19,13 @@
</assets> </assets>
<news>[B]Estos son los cambios para esta versión:[/B] <news>[B]Estos son los cambios para esta versión:[/B]
[COLOR green][B]Canales agregados y arreglos[/B][/COLOR] [COLOR green][B]Canales agregados y arreglos[/B][/COLOR]
» canalpelis » hdfull » cinecalidad » estadepelis
» xdvideos » playmax » datoporn » seriesyonkis
» cinetux » gnula » allcalidad » allpeliculas
» flashx » rapidvideo » cartoonlatino » pasateatorrent
¤ arreglos internos » vidz7 » zonatorrent
» gvideo » okru
» openload ¤ arreglos internos
</news> </news>
<description lang="es">Navega con Kodi por páginas web para ver sus videos de manera fácil.</description> <description lang="es">Navega con Kodi por páginas web para ver sus videos de manera fácil.</description>
<summary lang="en">Browse web pages using Kodi</summary> <summary lang="en">Browse web pages using Kodi</summary>
+4 -3
View File
@@ -91,7 +91,8 @@ def peliculas(item):
thumbnail = thumbnail, thumbnail = thumbnail,
url = url, url = url,
contentTitle = titulo, contentTitle = titulo,
contentType="movie" contentType="movie",
language = idioma
) )
if year: if year:
new_item.infoLabels['year'] = int(year) new_item.infoLabels['year'] = int(year)
@@ -137,8 +138,8 @@ def findvideos(item):
if config.get_videolibrary_support(): if config.get_videolibrary_support():
itemlist.append(Item(channel=item.channel, title="Añadir a la videoteca", text_color="green", itemlist.append(Item(channel=item.channel, title="Añadir a la videoteca", text_color="green",
filtro=True, action="add_pelicula_to_library", url=item.url, thumbnail = item.thumbnail, filtro=True, action="add_pelicula_to_library", url=item.url, thumbnail = item.thumbnail,
infoLabels={'title': item.fulltitle}, fulltitle=item.fulltitle, infoLabels={'title': item.fulltitle}, fulltitle=item.fulltitle
extra="library")) ))
return itemlist return itemlist
+97 -414
View File
@@ -1,10 +1,12 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import string import urlparse
from core import httptools from core import httptools
from core import jsontools
from core import scrapertools from core import scrapertools
from core import servertools from core import servertools
from core import tmdb
from core.item import Item from core.item import Item
from platformcode import config, logger from platformcode import config, logger
@@ -22,6 +24,7 @@ SERVERS = {"26": "powvideo", "45": "okru", "75": "openload", "12": "netutv", "65
"67": "spruto", "71": "stormo", "73": "idowatch", "48": "okru", "55": "openload", "67": "spruto", "71": "stormo", "73": "idowatch", "48": "okru", "55": "openload",
"20": "nowvideo", "84": "fastplay", "96": "raptu", "94": "tusfiles"} "20": "nowvideo", "84": "fastplay", "96": "raptu", "94": "tusfiles"}
host = "http://allpeliculas.com/"
def mainlist(item): def mainlist(item):
logger.info() logger.info()
@@ -29,32 +32,111 @@ def mainlist(item):
item.text_color = color1 item.text_color = color1
itemlist.append(item.clone(title="Películas", action="lista", fanart="http://i.imgur.com/c3HS8kj.png", itemlist.append(item.clone(title="Películas", action="lista", fanart="http://i.imgur.com/c3HS8kj.png",
url="http://allpeliculas.co/Movies/fullView/1/0/&ajax=1")) url= host + "movies/newmovies?page=1", extra1 = 0))
itemlist.append(item.clone(title="Series", action="lista", fanart="http://i.imgur.com/9loVksV.png", extra="tv", itemlist.append(item.clone(title="Por genero", action="generos", fanart="http://i.imgur.com/c3HS8kj.png",
url="http://allpeliculas.co/Movies/fullView/1/86/?ajax=1&withoutFilter=1", )) url= host + "movies/getGanres"))
itemlist.append(item.clone(title="Géneros", action="subindice", fanart="http://i.imgur.com/ymazCWq.jpg"))
itemlist.append(item.clone(title="Índices", action="indices", fanart="http://i.imgur.com/c3HS8kj.png"))
itemlist.append(item.clone(title="", action="")) itemlist.append(item.clone(title="", action=""))
itemlist.append(item.clone(title="Buscar...", action="search")) itemlist.append(item.clone(title="Buscar...", action="search"))
itemlist.append(item.clone(action="configuracion", title="Configurar canal...", text_color="gold", folder=False))
return itemlist return itemlist
def configuracion(item): def generos(item):
from platformcode import platformtools logger.info()
ret = platformtools.show_channel_settings() itemlist = []
platformtools.itemlist_refresh() data = httptools.downloadpage(item.url).data
return ret dict_data = jsontools.load(data)
for it in dict_data:
itemlist.append(Item(
channel = item.channel,
action = "lista",
title = it['label'],
url = host + "movies/newmovies?page=1",
extra1 = it['id']
))
return itemlist
def findvideos(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
patron = 'data-link="([^"]+).*?'
patron += '>([^<]+)'
matches = scrapertools.find_multiple_matches(data, patron)
for url, calidad in matches:
itemlist.append(Item(
channel = item.channel,
action = "play",
title = calidad,
url = url,
))
itemlist = servertools.get_servers_itemlist(itemlist)
itemlist.append(Item(channel=item.channel))
if config.get_videolibrary_support():
itemlist.append(Item(channel=item.channel, title="Añadir a la videoteca", text_color="green",
filtro=True, action="add_pelicula_to_library", url=item.url, thumbnail = item.thumbnail,
infoLabels={'title': item.fulltitle}, fulltitle=item.fulltitle
))
try:
tmdb.set_infoLabels(itemlist, __modo_grafico__)
except:
pass
return itemlist
def lista(item):
logger.info()
itemlist = []
dict_param = dict()
item.infoLabels = {}
item.text_color = color2
params = '{}'
if item.extra1 != 0:
dict_param["genero"] = [item.extra1]
params = jsontools.dump(dict_param)
data = httptools.downloadpage(item.url, post=params).data
dict_data = jsontools.load(data)
for it in dict_data["items"]:
title = it["title"]
plot = it["slogan"]
rating = it["imdb"]
year = it["year"]
url = host + "pelicula/" + it["slug"]
thumb = urlparse.urljoin(host, it["image"])
item.infoLabels['year'] = year
itemlist.append(item.clone(action="findvideos", title=title, fulltitle=title, url=url, thumbnail=thumb,
plot=plot, context=["buscar_trailer"], contentTitle=title, contentType="movie"))
pagina = scrapertools.find_single_match(item.url, 'page=([0-9]+)')
item.url = item.url.replace(pagina, "")
if pagina == "":
pagina = "0"
pagina = int(pagina) + 1
item.url = item.url + "%s" %pagina
if item.extra != "busqueda":
itemlist.append(Item(channel = item.channel, action="lista", title="Pagina %s" %pagina, url=item.url, extra1 = item.extra1
))
try:
# Obtenemos los datos basicos de todas las peliculas mediante multihilos
tmdb.set_infoLabels_itemlist(itemlist, __modo_grafico__)
except:
pass
return itemlist
def search(item, texto): def search(item, texto):
logger.info() logger.info()
if texto != "": if texto != "":
texto = texto.replace(" ", "+") texto = texto.replace(" ", "+")
item.url = "http://allpeliculas.co/Search/advancedSearch?searchType=movie&movieName=" + texto + "&ajax=1" item.url = host + "/movies/search/" + texto
item.extra = "busqueda"
try: try:
return busqueda(item) return lista(item)
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
@@ -68,7 +150,7 @@ def newest(categoria):
item = Item() item = Item()
try: try:
if categoria == "peliculas": if categoria == "peliculas":
item.url = "http://allpeliculas.co/Movies/fullView/1/0/&ajax=1" item.url = host + "movies/newmovies?page=1"
item.action = "lista" item.action = "lista"
itemlist = lista(item) itemlist = lista(item)
@@ -83,402 +165,3 @@ def newest(categoria):
return [] return []
return itemlist return itemlist
def busqueda(item):
logger.info()
itemlist = []
item.infoLabels = {}
item.text_color = color2
data = httptools.downloadpage(item.url).data
data = data.replace("\n", "").replace("\t", "")
data = scrapertools.decodeHtmlentities(data)
patron = '<img class="poster" src="([^"]+)".*?<div class="vote-div-count".*?>(.*?)/.*?' \
'<a class="movie-list-link" href="([^"]+)" title="([^"]+)".*?' \
'Year:</b> (.*?) </p>.*?Género:</b> (.*?)</p>'
matches = scrapertools.find_multiple_matches(data, patron)
for thumbnail, vote, url, title, year, genre in matches:
url = "http://allpeliculas.co" + url.replace("#", "") + "&ajax=1"
thumbnail = thumbnail.replace("/105/", "/400/").replace("/141/", "/600/").replace(" ", "%20")
titulo = title + " (" + year + ")"
item.infoLabels['year'] = year
item.infoLabels['genre'] = genre
item.infoLabels['rating'] = vote
if "Series" not in genre:
itemlist.append(item.clone(action="findvideos", title=titulo, fulltitle=title, url=url, thumbnail=thumbnail,
context=["buscar_trailer"], contentTitle=title, contentType="movie"))
else:
itemlist.append(item.clone(action="temporadas", title=titulo, fulltitle=title, url=url, thumbnail=thumbnail,
context=["buscar_trailer"], contentTitle=title, contentType="tvshow"))
# Paginacion
next_page = scrapertools.find_single_match(data, 'class="pagination-active".*?href="([^"]+)"')
if next_page != "":
url = next_page.replace("#", "") + "&ajax=1"
itemlist.append(item.clone(action="lista", title=">> Siguiente", url=url, text_color=color3))
return itemlist
def indices(item):
logger.info()
itemlist = []
item.text_color = color1
itemlist.append(item.clone(title="Alfabético", action="subindice"))
itemlist.append(item.clone(title="Por idioma", action="subindice"))
itemlist.append(item.clone(title="Por valoración", action="lista",
url="http://allpeliculas.co/Movies/fullView/1/0/rating:imdb|date:1900-3000|"
"alphabet:all|?ajax=1&withoutFilter=1"))
itemlist.append(item.clone(title="Por año", action="subindice"))
itemlist.append(item.clone(title="Por calidad", action="subindice"))
return itemlist
def lista(item):
logger.info()
itemlist = []
item.infoLabels = {}
item.text_color = color2
data = httptools.downloadpage(item.url).data
data = data.replace("\n", "").replace("\t", "")
data = scrapertools.decodeHtmlentities(data)
bloque = scrapertools.find_single_match(data, '<div class="movies-block-main"(.*?)<div class="movies-'
'long-pagination"')
patron = '<div class="thumb"><img src="([^"]+)".*?<a href="([^"]+)".*?' \
'(?:class="n-movie-trailer">([^<]+)<\/span>|<div class="imdb-votes">)' \
'.*?<div class="imdb"><span>(.*?)</span>.*?<span>Year.*?">(.*?)</a>.*?<span>' \
'(?:Género|Genre).*?<span>(.*?)</span>.*?<span>Language.*?<span>(.*?)</span>.*?' \
'<div class="info-full-text".*?>(.*?)<.*?<div class="views">(.*?)<.*?' \
'<div class="movie-block-title".*?>(.*?)<'
if bloque == "":
bloque = data[:]
matches = scrapertools.find_multiple_matches(bloque, patron)
for thumbnail, url, trailer, vote, year, genre, idioma, sinopsis, calidad, title in matches:
url = url.replace("#", "") + "&ajax=1"
thumbnail = thumbnail.replace("/157/", "/400/").replace("/236/", "/600/").replace(" ", "%20")
idioma = idioma.replace(" ", "").split(",")
idioma.sort()
titleidioma = "[" + "/".join(idioma) + "]"
titulo = title + " " + titleidioma + " [" + calidad + "]"
item.infoLabels['plot'] = sinopsis
item.infoLabels['year'] = year
item.infoLabels['genre'] = genre
item.infoLabels['rating'] = vote
item.infoLabels['trailer'] = trailer.replace("youtu.be/", "http://www.youtube.com/watch?v=")
if item.extra != "tv" or "Series" not in genre:
itemlist.append(item.clone(action="findvideos", title=titulo, fulltitle=title, url=url, thumbnail=thumbnail,
context=["buscar_trailer"], contentTitle=title, contentType="movie"))
else:
itemlist.append(item.clone(action="temporadas", title=titulo, fulltitle=title, url=url, thumbnail=thumbnail,
context=["buscar_trailer"], contentTitle=title, show=title,
contentType="tvshow"))
try:
from core import tmdb
# Obtenemos los datos basicos de todas las peliculas mediante multihilos
tmdb.set_infoLabels_itemlist(itemlist, __modo_grafico__)
except:
pass
# Paginacion
next_page = scrapertools.find_single_match(data, 'class="pagination-active".*?href="([^"]+)"')
if next_page != "":
url = next_page.replace("#", "") + "&ajax=1"
itemlist.append(item.clone(action="lista", title=">> Siguiente", url=url, text_color=color3))
return itemlist
def subindice(item):
logger.info()
itemlist = []
url_base = "http://allpeliculas.co/Movies/fullView/1/0/date:1900-3000|alphabet:all|?ajax=1&withoutFilter=1"
indice_genero, indice_alfa, indice_idioma, indice_year, indice_calidad = dict_indices()
if "Géneros" in item.title:
for key, value in indice_genero.items():
url = url_base.replace("/0/", "/" + key + "/")
itemlist.append(item.clone(action="lista", title=value, url=url))
itemlist.sort(key=lambda item: item.title)
elif "Alfabético" in item.title:
for i in range(len(indice_alfa)):
url = url_base.replace(":all", ":" + indice_alfa[i])
itemlist.append(item.clone(action="lista", title=indice_alfa[i], url=url))
elif "Por idioma" in item.title:
for key, value in indice_idioma.items():
url = url_base.replace("3000|", "3000|language:" + key)
itemlist.append(item.clone(action="lista", title=value, url=url))
itemlist.sort(key=lambda item: item.title)
elif "Por año" in item.title:
for i in range(len(indice_year)):
year = indice_year[i]
url = url_base.replace("1900-3000", year + "-" + year)
itemlist.append(item.clone(action="lista", title=year, url=url))
elif "Por calidad" in item.title:
for key, value in indice_calidad.items():
url = "http://allpeliculas.co/Search/advancedSearch?searchType=movie&movieName=&movieDirector=&movieGenre" \
"=&movieActor=&movieYear=&language=&movieTypeId=" + key + "&ajax=1"
itemlist.append(item.clone(action="busqueda", title=value, url=url))
itemlist.sort(key=lambda item: item.title)
return itemlist
def findvideos(item):
logger.info()
itemlist = []
item.text_color = color3
# Rellena diccionarios idioma y calidad
idiomas_videos, calidad_videos = dict_videos()
data = httptools.downloadpage(item.url).data
data = data.replace("\n", "").replace("\t", "")
data = scrapertools.decodeHtmlentities(data)
if item.extra != "library":
try:
from core import tmdb
tmdb.set_infoLabels(item, __modo_grafico__)
except:
pass
# Enlaces Online
patron = '<span class="movie-online-list" id_movies_types="([^"]+)" id_movies_servers="([^"]+)".*?id_lang=' \
'"([^"]+)".*?online-link="([^"]+)"'
matches = scrapertools.find_multiple_matches(data, patron)
for calidad, servidor_num, language, url in matches:
if servidor_num == '94' and not 'stormo.tv' in url:
url = "http://tusfiles.org/?%s" % url
if 'vimeo' in url:
url += "|" + item.url
if "filescdn" in url and url.endswith("htm"):
url += "l"
idioma = IDIOMAS.get(idiomas_videos.get(language))
titulo = "%s [" + idioma + "] [" + calidad_videos.get(calidad) + "]"
itemlist.append(item.clone(action="play", title=titulo, url=url, language = idioma, extra=idioma))
# Enlace Descarga
patron = '<span class="movie-downloadlink-list" id_movies_types="([^"]+)" id_movies_servers="([^"]+)".*?id_lang=' \
'"([^"]+)".*?online-link="([^"]+)"'
matches = scrapertools.find_multiple_matches(data, patron)
for calidad, servidor_num, language, url in matches:
idioma = IDIOMAS.get(idiomas_videos.get(language))
titulo = "[%s] [" + idioma + "] [" + calidad_videos.get(calidad) + "]"
itemlist.append(item.clone(action="play", title=titulo, url=url, language = idioma, extra=idioma))
itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % i.server.capitalize())
itemlist.sort(key=lambda item: (item.extra, item.server))
if itemlist:
if not "trailer" in item.infoLabels:
trailer_url = scrapertools.find_single_match(data, 'class="n-movie-trailer">([^<]+)</span>')
item.infoLabels['trailer'] = trailer_url.replace("youtu.be/", "http://www.youtube.com/watch?v=")
itemlist.append(item.clone(channel="trailertools", action="buscartrailer", title="Buscar Tráiler",
text_color="magenta", context=""))
if item.extra != "library":
if config.get_videolibrary_support():
itemlist.append(Item(channel=item.channel, title="Añadir película a la videoteca",
action="add_pelicula_to_library", url=item.url, text_color="green",
infoLabels={'title': item.fulltitle}, fulltitle=item.fulltitle,
extra="library"))
return itemlist
def temporadas(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
try:
from core import tmdb
tmdb.set_infoLabels_item(item, __modo_grafico__)
except:
pass
matches = scrapertools.find_multiple_matches(data, '<a class="movie-season" data-id="([^"]+)"')
matches = list(set(matches))
for season in matches:
item.infoLabels['season'] = season
itemlist.append(item.clone(action="episodios", title="Temporada " + season, context=["buscar_trailer"],
contentType="season"))
itemlist.sort(key=lambda item: item.title)
try:
from core import tmdb
tmdb.set_infoLabels_itemlist(itemlist, __modo_grafico__)
except:
pass
if not "trailer" in item.infoLabels:
trailer_url = scrapertools.find_single_match(data, 'class="n-movie-trailer">([^<]+)</span>')
item.infoLabels['trailer'] = trailer_url.replace("youtu.be/", "http://www.youtube.com/watch?v=")
itemlist.append(item.clone(channel="trailertools", action="buscartrailer", title="Buscar Tráiler",
text_color="magenta", context=""))
return itemlist
def episodios(item):
logger.info()
itemlist = []
# Rellena diccionarios idioma y calidad
idiomas_videos, calidad_videos = dict_videos()
data = httptools.downloadpage(item.url).data
data = data.replace("\n", "").replace("\t", "")
data = scrapertools.decodeHtmlentities(data)
patron = '<li><a class="movie-episode"[^>]+season="' + str(item.infoLabels['season']) + '"[^>]+>([^<]+)</a></li>'
matches = scrapertools.find_multiple_matches(data, patron)
capitulos = []
for title in matches:
if not title in capitulos:
episode = int(title.split(" ")[1])
capitulos.append(title)
itemlist.append(
item.clone(action="findvideostv", title=title, contentEpisodeNumber=episode, contentType="episode"))
itemlist.sort(key=lambda item: item.contentEpisodeNumber)
try:
from core import tmdb
tmdb.set_infoLabels_itemlist(itemlist, __modo_grafico__)
except:
pass
for item in itemlist:
if item.infoLabels["episodio_titulo"]:
item.title = "%dx%02d: %s" % (
item.contentSeason, item.contentEpisodeNumber, item.infoLabels["episodio_titulo"])
else:
item.title = "%dx%02d: %s" % (item.contentSeason, item.contentEpisodeNumber, item.title)
return itemlist
def findvideostv(item):
logger.info()
itemlist = []
# Rellena diccionarios idioma y calidad
idiomas_videos, calidad_videos = dict_videos()
data = httptools.downloadpage(item.url).data
data = data.replace("\n", "").replace("\t", "")
data = scrapertools.decodeHtmlentities(data)
patron = '<span class="movie-online-list" id_movies_types="([^"]+)" id_movies_servers="([^"]+)".*?episode="%s' \
'" season="%s" id_lang="([^"]+)".*?online-link="([^"]+)"' \
% (str(item.infoLabels['episode']), str(item.infoLabels['season']))
matches = scrapertools.find_multiple_matches(data, patron)
for quality, servidor_num, language, url in matches:
if servidor_num == '94' and not 'stormo.tv' in url:
url = "http://tusfiles.org/?%s" % url
if 'vimeo' in url:
url += "|" + item.url
if "filescdn" in url and url.endswith("htm"):
url += "l"
idioma = IDIOMAS.get(idiomas_videos.get(language))
titulo = "%s [" + idioma + "] (" + calidad_videos.get(quality) + ")"
itemlist.append(item.clone(action="play", title=titulo, url=url, language = idioma, contentType="episode"))
# Enlace Descarga
patron = '<span class="movie-downloadlink-list" id_movies_types="([^"]+)" id_movies_servers="([^"]+)".*?episode="%s' \
'" season="%s" id_lang="([^"]+)".*?online-link="([^"]+)"' \
% (str(item.infoLabels['episode']), str(item.infoLabels['season']))
# patron = '<span class="movie-downloadlink-list" id_movies_types="([^"]+)" id_movies_servers="([^"]+)".*?episode="'+str(item.infoLabels['episode']) +'" season="'+str(item.infoLabels['season']) + '" id_lang="([^"]+)".*?online-link="([^"]+)"'
matches = scrapertools.find_multiple_matches(data, patron)
for quality, servidor_num, episode, language, url in matches:
idioma = IDIOMAS.get(idiomas_videos.get(language))
titulo = "%s [" + idioma + "] (" + calidad_videos.get(quality) + ")"
itemlist.append(item.clone(action="play", title=titulo, url=url, language = idioma,contentType="episode", server=server))
itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % i.server.capitalize())
itemlist.sort(key=lambda item: (int(item.infoLabels['episode']), item.title))
try:
from core import tmdb
tmdb.set_infoLabels(itemlist, __modo_grafico__)
except:
pass
return itemlist
def dict_videos():
idiomas_videos = {}
calidad_videos = {}
data = httptools.downloadpage("http://allpeliculas.co/Search/advancedSearch&ajax=1").data
data = data.replace("\n", "").replace("\t", "")
bloque_idioma = scrapertools.find_single_match(data,
'<select name="language".*?<option value="" selected(.*?)</select>')
matches = scrapertools.find_multiple_matches(bloque_idioma, '<option value="([^"]+)" >(.*?)</option>')
for key1, key2 in matches:
idiomas_videos[key1] = unicode(key2, "utf8").capitalize().encode("utf8")
bloque_calidad = scrapertools.find_single_match(data, '<select name="movieTypeId".*?<option value="" selected(.*?)'
'</select>')
matches = scrapertools.find_multiple_matches(bloque_calidad, '<option value="([^"]+)" >(.*?)</option>')
for key1, key2 in matches:
calidad_videos[key1] = key2
return idiomas_videos, calidad_videos
def dict_indices():
indice_genero = {}
indice_alfa = list(string.ascii_uppercase)
indice_alfa.append("0-9")
indice_idioma = {}
indice_year = []
indice_calidad = {}
data = httptools.downloadpage("http://allpeliculas.co/Search/advancedSearch&ajax=1").data
data = data.replace("\n", "").replace("\t", "")
data = scrapertools.decodeHtmlentities(data)
bloque_genero = scrapertools.find_single_match(data, '<select name="movieGenre".*?<option value="" selected(.*?)'
'</select>')
matches = scrapertools.find_multiple_matches(bloque_genero, '<option value="([^"]+)" >(.*?)</option>')
for key1, key2 in matches:
if key2 != "Series":
if key2 == "Mystery":
key2 = "Misterio"
indice_genero[key1] = key2
bloque_year = scrapertools.find_single_match(data, '<select name="movieYear".*?<option value="" selected(.*?)'
'</select>')
matches = scrapertools.find_multiple_matches(bloque_year, '<option value="([^"]+)"')
for key1 in matches:
indice_year.append(key1)
bloque_idioma = scrapertools.find_single_match(data, '<select name="language".*?<option value="" selected(.*?)'
'</select>')
matches = scrapertools.find_multiple_matches(bloque_idioma, '<option value="([^"]+)" >(.*?)</option>')
for key1, key2 in matches:
if key2 == "INGLES":
key2 = "Versión original"
indice_idioma[key1] = unicode(key2, "utf8").capitalize().encode("utf8")
bloque_calidad = scrapertools.find_single_match(data, '<select name="movieTypeId".*?<option value="" selected(.*?)'
'</select>')
matches = scrapertools.find_multiple_matches(bloque_calidad, '<option value="([^"]+)" >(.*?)</option>')
for key1, key2 in matches:
indice_calidad[key1] = key2
return indice_genero, indice_alfa, indice_idioma, indice_year, indice_calidad
+10 -22
View File
@@ -6,8 +6,9 @@ import urllib
from core import httptools from core import httptools
from core import scrapertools from core import scrapertools
from core import servertools from core import servertools
from core import tmdb
from core.item import Item from core.item import Item
from platformcode import logger from platformcode import logger, config
tgenero = {"Comedia": "https://s7.postimg.org/ne9g9zgwb/comedia.png", tgenero = {"Comedia": "https://s7.postimg.org/ne9g9zgwb/comedia.png",
"Drama": "https://s16.postimg.org/94sia332d/drama.png", "Drama": "https://s16.postimg.org/94sia332d/drama.png",
@@ -110,7 +111,7 @@ def lista(item):
url=next_page_url, url=next_page_url,
thumbnail='https://s16.postimg.org/9okdu7hhx/siguiente.png' thumbnail='https://s16.postimg.org/9okdu7hhx/siguiente.png'
)) ))
tmdb.set_infoLabels(itemlist)
return itemlist return itemlist
@@ -157,29 +158,16 @@ def episodios(item):
itemlist = [] itemlist = []
data = get_source(item.url) data = get_source(item.url)
patron = '<li id=epi-.*? class=list-group-item ><a href=(.*?) class=badge.*?width=25 title=(.*?)> <\/span>(.*?)<\/li>' patron = '<li id=epi-.*? class=list-group-item ><a href=(.*?) class=badge.*?width=25 title=(.*?)> <\/span>(.*?) (\d+)<\/li>'
matches = re.compile(patron, re.DOTALL).findall(data) matches = re.compile(patron, re.DOTALL).findall(data)
for scrapedurl, scrapedlang, scrapedtitle in matches: for scrapedurl, scrapedlang, scrapedtitle, episode in matches:
language = scrapedlang language = scrapedlang
title = scrapedtitle title = scrapedtitle + " " + "1x" + episode
url = scrapedurl url = scrapedurl
itemlist.append(item.clone(title=title, url=url, action='findvideos', language=language)) itemlist.append(item.clone(title=title, url=url, action='findvideos', language=language))
return itemlist
if config.get_videolibrary_support():
itemlist.append(Item(channel=item.channel, title="Añadir serie a la biblioteca", url=item.url, action="add_serie_to_library", extra="episodios", fanart=item.thumbnail, thumbnail=item.thumbnail, contentTitle=item.show, show=item.show))
def findvideos(item):
logger.info()
itemlist = []
data = get_source(item.url)
itemlist.extend(servertools.find_video_items(data=data))
for videoitem in itemlist:
title = item.title
videoitem.channel = item.channel
videoitem.title = title
videoitem.action = 'play'
return itemlist return itemlist
+6
View File
@@ -136,6 +136,10 @@ def start(itemlist, item):
server_list = channel_node.get('servers', []) server_list = channel_node.get('servers', [])
quality_list = channel_node.get('quality', []) quality_list = channel_node.get('quality', [])
# Si no se definen calidades la se asigna default como calidad unica
if len(quality_list) == 0:
quality_list =['default']
# Se guardan los textos de cada servidor y calidad en listas p.e. favorite_servers = ['openload', # Se guardan los textos de cada servidor y calidad en listas p.e. favorite_servers = ['openload',
# 'streamcloud'] # 'streamcloud']
for num in range(1, 4): for num in range(1, 4):
@@ -325,6 +329,8 @@ def init(channel, list_servers, list_quality):
change = True change = True
# Se comprueba que no haya calidades ni servidores duplicados # Se comprueba que no haya calidades ni servidores duplicados
if 'default' not in list_quality:
list_quality.append('default')
list_servers = list(set(list_servers)) list_servers = list(set(list_servers))
list_quality = list(set(list_quality)) list_quality = list(set(list_quality))
+5 -5
View File
@@ -137,18 +137,18 @@ def peliculas(item):
matches = scrapertools.find_multiple_matches(data, patron) matches = scrapertools.find_multiple_matches(data, patron)
for scrapedthumbnail, scrapedtitle, rating, calidad, scrapedurl, year in matches[item.page:item.page + 20]: for scrapedthumbnail, scrapedtitle, rating, quality, scrapedurl, year in matches[item.page:item.page + 20]:
if 'Próximamente' not in calidad and '-XXX.jpg' not in scrapedthumbnail: if 'Próximamente' not in quality and '-XXX.jpg' not in scrapedthumbnail:
scrapedtitle = scrapedtitle.replace('Ver ', '').strip() scrapedtitle = scrapedtitle.replace('Ver ', '').strip()
contentTitle = scrapedtitle.partition(':')[0].partition(',')[0] contentTitle = scrapedtitle.partition(':')[0].partition(',')[0]
title = "%s [COLOR green][%s][/COLOR] [COLOR yellow][%s][/COLOR]" % ( title = "%s [COLOR green][%s][/COLOR] [COLOR yellow][%s][/COLOR]" % (
scrapedtitle, year, calidad) scrapedtitle, year, quality)
itemlist.append(item.clone(channel=__channel__, action="findvideos", text_color=color3, itemlist.append(item.clone(channel=__channel__, action="findvideos", text_color=color3,
url=scrapedurl, infoLabels={'year': year, 'rating': rating}, url=scrapedurl, infoLabels={'year': year, 'rating': rating},
contentTitle=contentTitle, thumbnail=scrapedthumbnail, contentTitle=contentTitle, thumbnail=scrapedthumbnail,
title=title, context="buscar_trailer")) title=title, context="buscar_trailer", quality = quality))
tmdb.set_infoLabels(itemlist, __modo_grafico__) tmdb.set_infoLabels(itemlist, __modo_grafico__)
tmdb.set_infoLabels(itemlist, __modo_grafico__) tmdb.set_infoLabels(itemlist, __modo_grafico__)
@@ -367,7 +367,7 @@ def findvideos(item):
server = servertools.get_server_from_url(url) server = servertools.get_server_from_url(url)
title = "%s [COLOR yellow](%s) (%s)[/COLOR]" % (item.contentTitle, server.title(), lang) title = "%s [COLOR yellow](%s) (%s)[/COLOR]" % (item.contentTitle, server.title(), lang)
itemlist.append(item.clone(action='play', url=url, title=title, extra1=title, itemlist.append(item.clone(action='play', url=url, title=title, extra1=title,
server=server, text_color=color3)) server=server, language = lang, text_color=color3))
itemlist.append(Item(channel=item.channel, itemlist.append(Item(channel=item.channel,
title='[COLOR yellow]Añadir esta pelicula a la videoteca[/COLOR]', title='[COLOR yellow]Añadir esta pelicula a la videoteca[/COLOR]',
+3 -1
View File
@@ -1,4 +1,4 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import re import re
@@ -176,6 +176,8 @@ def findvideos(item):
data_function = scrapertools.find_single_match(data, '<!\[CDATA\[function (.+?)\]\]') data_function = scrapertools.find_single_match(data, '<!\[CDATA\[function (.+?)\]\]')
data_id = scrapertools.find_single_match(data, data_id = scrapertools.find_single_match(data,
"<script>\(adsbygoogle = window\.adsbygoogle \|\| \[\]\)\.push\({}\);<\/script><\/div><br \/>(.+?)<\/ins>") "<script>\(adsbygoogle = window\.adsbygoogle \|\| \[\]\)\.push\({}\);<\/script><\/div><br \/>(.+?)<\/ins>")
if data_id == "":
data_id = scrapertools.find_single_match(data, "<p><center><br />.*?</center>")
itemla = scrapertools.find_multiple_matches(data_function, "src='(.+?)'") itemla = scrapertools.find_multiple_matches(data_function, "src='(.+?)'")
serverid = scrapertools.find_multiple_matches(data_id, '<script>([^"]+)\("([^"]+)"\)') serverid = scrapertools.find_multiple_matches(data_id, '<script>([^"]+)\("([^"]+)"\)')
for server, id in serverid: for server, id in serverid:
@@ -108,9 +108,9 @@ def peliculas(item):
infolab = {'year': year} infolab = {'year': year}
itemlist.append(item.clone(action="findvideos", title=scrapedtitle, url=scrapedurl, itemlist.append(item.clone(action="findvideos", title=scrapedtitle, url=scrapedurl,
thumbnail=scrapedthumbnail, infoLabels=infolab, thumbnail=scrapedthumbnail, infoLabels=infolab,
contentTitle=title, contentType="movie")) contentTitle=title, contentType="movie", quality=calidad))
next_page = scrapertools.find_single_match(data, '<a class="nextpostslink" href="([^"]+)"') next_page = scrapertools.find_single_match(data, '<a class="nextpostslink" rel="next" href="([^"]+)"')
if next_page: if next_page:
itemlist.append(item.clone(title=">> Página Siguiente", url=next_page)) itemlist.append(item.clone(title=">> Página Siguiente", url=next_page))
+10 -12
View File
@@ -51,24 +51,21 @@ def mainlist(item):
host="http://cinecalidad.com/", host="http://cinecalidad.com/",
thumbnail=thumbmx, thumbnail=thumbmx,
extra="peliculas", extra="peliculas",
language='latino'
)) ))
itemlist.append(item.clone(title="CineCalidad España", itemlist.append(item.clone(title="CineCalidad Castellano",
action="submenu", action="submenu",
host="http://cinecalidad.com/espana/", host="http://cinecalidad.com/espana/",
thumbnail=thumbes, thumbnail=thumbes,
extra="peliculas", extra="peliculas",
language='castellano'
)) ))
itemlist.append( itemlist.append(
item.clone(title="CineCalidad Brasil", item.clone(title="CineCalidad Portugues",
action="submenu", action="submenu",
host="http://cinemaqualidade.com/", host="http://cinemaqualidade.com/",
thumbnail=thumbbr, thumbnail=thumbbr,
extra="filmes", extra="filmes",
language='portugues'
)) ))
autoplay.show_option(item.channel, itemlist) autoplay.show_option(item.channel, itemlist)
@@ -91,7 +88,6 @@ def submenu(item):
url=host, url=host,
thumbnail='https://s8.postimg.org/6wqwy2c2t/peliculas.png', thumbnail='https://s8.postimg.org/6wqwy2c2t/peliculas.png',
fanart='https://s8.postimg.org/6wqwy2c2t/peliculas.png', fanart='https://s8.postimg.org/6wqwy2c2t/peliculas.png',
language=item.language
)) ))
itemlist.append(Item(channel=item.channel, itemlist.append(Item(channel=item.channel,
title="Destacadas", title="Destacadas",
@@ -99,7 +95,6 @@ def submenu(item):
url=host + "/genero-" + idioma + "/" + idioma2 + "/", url=host + "/genero-" + idioma + "/" + idioma2 + "/",
thumbnail='https://s30.postimg.org/humqxklsx/destacadas.png', thumbnail='https://s30.postimg.org/humqxklsx/destacadas.png',
fanart='https://s30.postimg.org/humqxklsx/destacadas.png', fanart='https://s30.postimg.org/humqxklsx/destacadas.png',
language=item.language
)) ))
itemlist.append(Item(channel=item.channel, itemlist.append(Item(channel=item.channel,
title="Generos", title="Generos",
@@ -107,7 +102,6 @@ def submenu(item):
url=host + "/genero-" + idioma, url=host + "/genero-" + idioma,
thumbnail='https://s3.postimg.org/5s9jg2wtf/generos.png', thumbnail='https://s3.postimg.org/5s9jg2wtf/generos.png',
fanart='https://s3.postimg.org/5s9jg2wtf/generos.png', fanart='https://s3.postimg.org/5s9jg2wtf/generos.png',
language=item.language
)) ))
itemlist.append(Item(channel=item.channel, itemlist.append(Item(channel=item.channel,
title="Por Año", title="Por Año",
@@ -115,7 +109,6 @@ def submenu(item):
url=host + "/" + idioma + "-por-ano", url=host + "/" + idioma + "-por-ano",
thumbnail='https://s8.postimg.org/7eoedwfg5/pora_o.png', thumbnail='https://s8.postimg.org/7eoedwfg5/pora_o.png',
fanart='https://s8.postimg.org/7eoedwfg5/pora_o.png', fanart='https://s8.postimg.org/7eoedwfg5/pora_o.png',
language=item.language
)) ))
itemlist.append(Item(channel=item.channel, itemlist.append(Item(channel=item.channel,
title="Buscar", title="Buscar",
@@ -124,7 +117,6 @@ def submenu(item):
url=host + '/apiseries/seriebyword/', url=host + '/apiseries/seriebyword/',
fanart='https://s30.postimg.org/pei7txpa9/buscar.png', fanart='https://s30.postimg.org/pei7txpa9/buscar.png',
host=item.host, host=item.host,
language=item.language
)) ))
return itemlist return itemlist
@@ -199,6 +191,12 @@ def generos(item):
def peliculas(item): def peliculas(item):
logger.info() logger.info()
itemlist = [] itemlist = []
if 'espana' in host:
item.language = 'castellano'
elif 'cinecalidad' in host:
item.language = 'latino'
else:
item.language = 'portugues'
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
patron = '<div class="home_post_cont.*? post_box">.*?<a href="(.*?)".*?' patron = '<div class="home_post_cont.*? post_box">.*?<a href="(.*?)".*?'
patron += 'src="(.*?)".*?title="(.*?) \((.*?)\).*?".*?p&gt;(.*?)&lt' patron += 'src="(.*?)".*?title="(.*?) \((.*?)\).*?".*?p&gt;(.*?)&lt'
@@ -298,7 +296,7 @@ def findvideos(item):
if server_id in server_url: if server_id in server_url:
server = server_id.lower() server = server_id.lower()
thumbnail = item.contentThumbnail thumbnail = item.thumbnail
if server_id == 'TVM': if server_id == 'TVM':
server = 'thevideo.me' server = 'thevideo.me'
url = server_url[server_id] + video_id + '.html' url = server_url[server_id] + video_id + '.html'
@@ -367,7 +365,7 @@ def play(item):
for videoitem in itemlist: for videoitem in itemlist:
videoitem.title = item.fulltitle videoitem.title = item.fulltitle
videoitem.fulltitle = item.fulltitle videoitem.fulltitle = item.fulltitle
videoitem.thumbnail = item.contentThumbnail videoitem.thumbnail = item.thumbnail
videoitem.channel = item.channel videoitem.channel = item.channel
else: else:
itemlist.append(item) itemlist.append(item)
+2 -2
View File
@@ -364,7 +364,7 @@ def peliculas(item):
itemlist.append(Item(channel=item.channel, action=action, title=title, url=url, extra="media", itemlist.append(Item(channel=item.channel, action=action, title=title, url=url, extra="media",
thumbnail=scrapedthumbnail, contentTitle=scrapedtitle, fulltitle=scrapedtitle, thumbnail=scrapedthumbnail, contentTitle=scrapedtitle, fulltitle=scrapedtitle,
text_color=color2, contentType="movie")) text_color=color2, contentType="movie", quality=calidad, language=audios))
next_page = scrapertools.find_single_match(data, 'href="([^"]+)"[^>]+>Siguiente') next_page = scrapertools.find_single_match(data, 'href="([^"]+)"[^>]+>Siguiente')
if next_page != "" and item.title != "": if next_page != "" and item.title != "":
@@ -676,7 +676,7 @@ def get_enlaces(item, url, type):
titulo = " [%s/%s]" % (language, scrapedcalidad.strip()) titulo = " [%s/%s]" % (language, scrapedcalidad.strip())
itemlist.append( itemlist.append(
item.clone(action="play", url=google_url, title=" Ver en Gvideo" + titulo, text_color=color2, item.clone(action="play", url=google_url, title=" Ver en Gvideo" + titulo, text_color=color2,
extra="", server="gvideo")) extra="", server="gvideo", language=language, quality=scrapedcalidad.strip()))
patron = '<div class="available-source".*?data-url="([^"]+)".*?class="language.*?title="([^"]+)"' \ patron = '<div class="available-source".*?data-url="([^"]+)".*?class="language.*?title="([^"]+)"' \
'.*?class="source-name.*?>\s*([^<]+)<.*?<span class="quality-text">([^<]+)<' '.*?class="source-name.*?>\s*([^<]+)<.*?<span class="quality-text">([^<]+)<'
matches = scrapertools.find_multiple_matches(data, patron) matches = scrapertools.find_multiple_matches(data, patron)
+9 -7
View File
@@ -133,8 +133,8 @@ def peliculas(item):
patron += 'href="([^"]+)"' patron += 'href="([^"]+)"'
patron += '.*?(?:<span>|<span class="year">)([^<]+)' patron += '.*?(?:<span>|<span class="year">)([^<]+)'
matches = scrapertools.find_multiple_matches(data, patron) matches = scrapertools.find_multiple_matches(data, patron)
for scrapedthumbnail, scrapedtitle, calidad, scrapedurl, scrapedyear in matches: for scrapedthumbnail, scrapedtitle, quality, scrapedurl, scrapedyear in matches:
calidad = scrapertools.find_single_match(calidad, '.*?quality">([^<]+)') quality = scrapertools.find_single_match(quality, '.*?quality">([^<]+)')
try: try:
fulltitle = scrapedtitle fulltitle = scrapedtitle
year = scrapedyear.replace("&nbsp;", "") year = scrapedyear.replace("&nbsp;", "")
@@ -143,11 +143,11 @@ def peliculas(item):
scrapedtitle = "%s (%s)" % (fulltitle, year) scrapedtitle = "%s (%s)" % (fulltitle, year)
except: except:
fulltitle = scrapedtitle fulltitle = scrapedtitle
if calidad: if quality:
scrapedtitle += " [%s]" % calidad scrapedtitle += " [%s]" % quality
new_item = item.clone(action="findvideos", title=scrapedtitle, fulltitle=fulltitle, new_item = item.clone(action="findvideos", title=scrapedtitle, fulltitle=fulltitle,
url=scrapedurl, thumbnail=scrapedthumbnail, url=scrapedurl, thumbnail=scrapedthumbnail,
contentTitle=fulltitle, contentType="movie") contentTitle=fulltitle, contentType="movie", quality=quality)
if year: if year:
new_item.infoLabels['year'] = int(year) new_item.infoLabels['year'] = int(year)
itemlist.append(new_item) itemlist.append(new_item)
@@ -330,12 +330,14 @@ def bloque_enlaces(data, filtro_idioma, dict_idiomas, type, item):
if filtro_idioma == 3 or item.filtro: if filtro_idioma == 3 or item.filtro:
lista_enlaces.append(item.clone(title=title, action="play", text_color=color2, lista_enlaces.append(item.clone(title=title, action="play", text_color=color2,
url=scrapedurl, server=scrapedserver, idioma=scrapedlanguage, url=scrapedurl, server=scrapedserver, idioma=scrapedlanguage,
extra=item.url, contentThumbnail = item.thumbnail)) extra=item.url, contentThumbnail = item.thumbnail,
language=scrapedlanguage))
else: else:
idioma = dict_idiomas[language] idioma = dict_idiomas[language]
if idioma == filtro_idioma: if idioma == filtro_idioma:
lista_enlaces.append(item.clone(title=title, text_color=color2, action="play", url=scrapedurl, lista_enlaces.append(item.clone(title=title, text_color=color2, action="play", url=scrapedurl,
extra=item.url, contentThumbnail = item.thumbnail)) extra=item.url, contentThumbnail = item.thumbnail,
language=scrapedlanguage))
else: else:
if language not in filtrados: if language not in filtrados:
filtrados.append(language) filtrados.append(language)
+1 -1
View File
@@ -40,7 +40,7 @@ def lista(item):
server="datoporn", fanart=scrapedthumbnail.replace("_t.jpg", ".jpg"))) server="datoporn", fanart=scrapedthumbnail.replace("_t.jpg", ".jpg")))
# Extrae la marca de siguiente página # Extrae la marca de siguiente página
next_page = scrapertools.find_single_match(data, '<a href="([^"]+)">Next') next_page = scrapertools.find_single_match(data, '<a href=["|\']([^["|\']+)["|\']>Next')
if next_page and itemlist: if next_page and itemlist:
itemlist.append(item.clone(action="lista", title=">> Página Siguiente", url=next_page)) itemlist.append(item.clone(action="lista", title=">> Página Siguiente", url=next_page))
+1 -1
View File
@@ -302,7 +302,7 @@ def findvideos(item):
if "partes" in title: if "partes" in title:
action = "extract_url" action = "extract_url"
new_item = Item(channel=item.channel, action=action, title=title, fulltitle=title, url=url, new_item = Item(channel=item.channel, action=action, title=title, fulltitle=title, url=url,
thumbnail=thumbnail, plot=plot, parentContent=item, server = servername) thumbnail=thumbnail, plot=plot, parentContent=item, server = servername, quality=calidad)
if comentarios.startswith("Ver en"): if comentarios.startswith("Ver en"):
itemlist_ver.append(new_item) itemlist_ver.append(new_item)
else: else:
+1 -1
View File
@@ -18,7 +18,7 @@ headers = [['User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/2
IDIOMAS = {'Latino': 'Latino', 'Sub Español': 'VOS'} IDIOMAS = {'Latino': 'Latino', 'Sub Español': 'VOS'}
list_language = IDIOMAS.values() list_language = IDIOMAS.values()
list_quality = [] list_quality = []
list_servers = ['yourupload', 'openload', 'sendvid', ''] list_servers = ['yourupload', 'openload', 'sendvid']
vars = { vars = {
'ef5ca18f089cf01316bbc967fa10f72950790c39ef5ca18f089cf01316bbc967fa10f72950790c39': 'http://www.estadepelis.com/', 'ef5ca18f089cf01316bbc967fa10f72950790c39ef5ca18f089cf01316bbc967fa10f72950790c39': 'http://www.estadepelis.com/',
+7 -6
View File
@@ -319,7 +319,7 @@ def fichas(item):
contentTitle = scrapedtitle.strip() contentTitle = scrapedtitle.strip()
if scrapedlangs != ">": if scrapedlangs != ">":
textoidiomas = extrae_idiomas(scrapedlangs) textoidiomas, language = extrae_idiomas(scrapedlangs)
#Todo Quitar el idioma #Todo Quitar el idioma
title += bbcode_kodi2html(" ( [COLOR teal][B]" + textoidiomas + "[/B][/COLOR])") title += bbcode_kodi2html(" ( [COLOR teal][B]" + textoidiomas + "[/B][/COLOR])")
@@ -351,7 +351,7 @@ def fichas(item):
itemlist.append( itemlist.append(
Item(channel=item.channel, action=action, title=title, url=url, fulltitle=title, thumbnail=thumbnail, Item(channel=item.channel, action=action, title=title, url=url, fulltitle=title, thumbnail=thumbnail,
show=show, folder=True, contentType=contentType, contentTitle=contentTitle, show=show, folder=True, contentType=contentType, contentTitle=contentTitle,
language =textoidiomas, infoLabels=infoLabels)) language =language, infoLabels=infoLabels))
## Paginación ## Paginación
next_page_url = scrapertools.find_single_match(data, '<a href="([^"]+)">.raquo;</a>') next_page_url = scrapertools.find_single_match(data, '<a href="([^"]+)">.raquo;</a>')
@@ -797,16 +797,17 @@ def agrupa_datos(data):
def extrae_idiomas(bloqueidiomas): def extrae_idiomas(bloqueidiomas):
logger.info("idiomas=" + bloqueidiomas) logger.info("idiomas=" + bloqueidiomas)
# Todo cambiar por lista language=[]
#textoidiomas=[]
textoidiomas = '' textoidiomas = ''
patronidiomas = '([a-z0-9]+).png"' patronidiomas = '([a-z0-9]+).png"'
idiomas = re.compile(patronidiomas, re.DOTALL).findall(bloqueidiomas) idiomas = re.compile(patronidiomas, re.DOTALL).findall(bloqueidiomas)
for idioma in idiomas: for idioma in idiomas:
# TODO quitar esto
textoidiomas = textoidiomas + idioma +" " textoidiomas = textoidiomas + idioma +" "
#textoidiomas.append(idioma.upper()) # TODO y dejar esto
language.append(idioma)
return textoidiomas return textoidiomas, language
def bbcode_kodi2html(text): def bbcode_kodi2html(text):
+1 -2
View File
@@ -127,9 +127,8 @@ def findvideos(item):
matches = scrapertools.find_multiple_matches(data, patron) matches = scrapertools.find_multiple_matches(data, patron)
for url, server, calidad, idioma in matches: for url, server, calidad, idioma in matches:
title = item.contentTitle
server = servertools.get_server_from_url(url) server = servertools.get_server_from_url(url)
title = '%s [%s] [%s] [%s]' % (item.contentTitle, server, calidad, idioma)
itemlist.append(item.clone(action="play", title=title, fulltitle = item.title, url=url, language = idioma, itemlist.append(item.clone(action="play", title=title, fulltitle = item.title, url=url, language = idioma,
contentTitle = item.contentTitle, quality = calidad, server = server)) contentTitle = item.contentTitle, quality = calidad, server = server))
+12 -15
View File
@@ -6,23 +6,12 @@
"language": ["cast"], "language": ["cast"],
"thumbnail": "http://imgur.com/iLeISt0.png", "thumbnail": "http://imgur.com/iLeISt0.png",
"banner": "pasateatorrent.png", "banner": "pasateatorrent.png",
"fanart": "http://imgur.com/uexmGEg.png",
"version": 1, "version": 1,
"changes": [ "changes": [
{ {
"date": "06/12/2016", "date": "25/08/2017",
"description": "Release" "description": "Revamp"
},
{
"date": "13/01/2017",
"description": "Arreglo sagas en peliculas que no se mostraban.Mejoras en series/info-capitulos"
},
{
"date": "04/04/2017",
"description": "Migración httptools.Adaptación proxy según Kodi sea igual o menor v.17.Pequeñas mejoras código"
},
{
"date": "28/06/2017",
"description": "Correciones código y algunas mejoras"
} }
], ],
"categories": [ "categories": [
@@ -38,6 +27,14 @@
"default": true, "default": true,
"enabled": true, "enabled": true,
"visible": true "visible": true
},
{
"id": "modo_grafico",
"type": "bool",
"label": "Buscar información extra (TMDB)",
"default": true,
"enabled": true,
"visible": true
} }
] ]
} }
File diff suppressed because it is too large Load Diff
+19 -19
View File
@@ -99,10 +99,10 @@ def peliculas(item):
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
data = re.sub(r"\n|\r|\t|\(.*?\)|\s{2}|&nbsp;", "", data) data = re.sub(r"\n|\r|\t|\(.*?\)|\s{2}|&nbsp;", "", data)
patron = '<div class="poster"><img src="([^"]+)" alt="([^"]+)">.*?' # img, title patron = '<div class="poster"><img src="([^"]+)" alt="([^"]+)">.*?' # img, title
patron += '<div class="rating"><span class="[^"]+"></span>([^<]+).*?' # rating patron += '<div class="rating"><span class="[^"]+"></span>([^<]+).*?' # rating
patron += '<span class="quality">([^<]+)</span><a href="([^"]+)">.*?' # calidad, url patron += '<span class="quality">([^<]+)</span><a href="([^"]+)">.*?' # calidad, url
patron += '<span>([^<]+)</span>' # year patron += '<span>([^<]+)</span>' # year
matches = scrapertools.find_multiple_matches(data, patron) matches = scrapertools.find_multiple_matches(data, patron)
@@ -271,7 +271,7 @@ def series(item):
data = re.sub(r"\n|\r|\t|&nbsp;|<br>", "", data) data = re.sub(r"\n|\r|\t|&nbsp;|<br>", "", data)
# logger.info(data) # logger.info(data)
patron = '<div class="poster"><img src="([^"]+)" alt="([^"]+)">.*?<a href="([^"]+)">' patron = '<div class="poster"><img src="([^"]+)" alt="([^"]+)">.*?<a href="([^"]+)">' # img, title, url
matches = scrapertools.find_multiple_matches(data, patron) matches = scrapertools.find_multiple_matches(data, patron)
@@ -323,8 +323,8 @@ def temporadas(item):
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
data = re.sub(r"\n|\r|\t|&nbsp;|<br>", "", data) data = re.sub(r"\n|\r|\t|&nbsp;|<br>", "", data)
# logger.info(data) # logger.info(data)
patron = '<span class="title">([^<]+)<i>.*?' # numeros de temporadas patron = '<span class="title">([^<]+)<i>.*?' # season
patron += '<img src="([^"]+)"></a></div>' # capítulos patron += '<img src="([^"]+)"></a></div>' # img
matches = scrapertools.find_multiple_matches(data, patron) matches = scrapertools.find_multiple_matches(data, patron)
if len(matches) > 1: if len(matches) > 1:
@@ -365,9 +365,9 @@ def episodios(item):
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
data = re.sub(r"\n|\r|\t|&nbsp;|<br>", "", data) data = re.sub(r"\n|\r|\t|&nbsp;|<br>", "", data)
# logger.info(data) # logger.info(data)
patron = '<div class="imagen"><a href="([^"]+)">.*?' # url cap, img patron = '<div class="imagen"><a href="([^"]+)">.*?' # url
patron += '<div class="numerando">(.*?)</div>.*?' # numerando cap patron += '<div class="numerando">(.*?)</div>.*?' # numerando cap
patron += '<a href="[^"]+">([^<]+)</a>' # title de episodios patron += '<a href="[^"]+">([^<]+)</a>' # title de episodios
matches = scrapertools.find_multiple_matches(data, patron) matches = scrapertools.find_multiple_matches(data, patron)
@@ -390,7 +390,6 @@ def episodios(item):
new_item.infoLabels['episode'] = episode.zfill(2) new_item.infoLabels['episode'] = episode.zfill(2)
itemlist.append(new_item) itemlist.append(new_item)
tmdb.set_infoLabels_itemlist(itemlist, __modo_grafico__)
# TODO no hacer esto si estamos añadiendo a la videoteca # TODO no hacer esto si estamos añadiendo a la videoteca
if not item.extra: if not item.extra:
@@ -407,6 +406,8 @@ def episodios(item):
itemlist.sort(key=lambda it: int(it.infoLabels['episode']), itemlist.sort(key=lambda it: int(it.infoLabels['episode']),
reverse=config.get_setting('orden_episodios', __channel__)) reverse=config.get_setting('orden_episodios', __channel__))
tmdb.set_infoLabels_itemlist(itemlist, __modo_grafico__)
# Opción "Añadir esta serie a la videoteca" # Opción "Añadir esta serie a la videoteca"
if config.get_videolibrary_support() and len(itemlist) > 0: if config.get_videolibrary_support() and len(itemlist) > 0:
itemlist.append(Item(channel=__channel__, title="Añadir esta serie a la videoteca", url=item.url, itemlist.append(Item(channel=__channel__, title="Añadir esta serie a la videoteca", url=item.url,
@@ -427,12 +428,13 @@ def findvideos(item):
matches = re.compile(patron, re.DOTALL).findall(data) matches = re.compile(patron, re.DOTALL).findall(data)
for option, url in matches: for option, url in matches:
lang = scrapertools.find_single_match(data, '<li><a class="options" href="#option-%s">.*?<img ' lang = scrapertools.find_single_match(data, '<li><a class="options" href="#option-%s">.*?</b>-->(\w+)' % option)
'src="http://pedropolis.com/wp-content/themes/dooplay/assets/img' lang = lang.lower()
'/flags/(\w+)' % option) idioma = {'latino': '[COLOR cornflowerblue](LAT)[/COLOR]',
idioma = {'mx': '[COLOR cornflowerblue](LAT)[/COLOR]', 'pe': '[COLOR cornflowerblue](LAT)[/COLOR]', 'drive': '[COLOR cornflowerblue](LAT)[/COLOR]',
'co': '[COLOR cornflowerblue](LAT)[/COLOR]', 'es': '[COLOR green](CAST)[/COLOR]', 'castellano': '[COLOR green](CAST)[/COLOR]',
'en': '[COLOR red](VOS)[/COLOR]', 'jp': '[COLOR green](VOS)[/COLOR]'} 'subtitulado': '[COLOR red](VOS)[/COLOR]',
'ingles': '[COLOR red](VOS)[/COLOR]'}
if lang in idioma: if lang in idioma:
lang = idioma[lang] lang = idioma[lang]
@@ -455,10 +457,8 @@ def findvideos(item):
x.server.title(), x.quality, x.language) x.server.title(), x.quality, x.language)
if config.get_videolibrary_support() and len(itemlist) > 0 and item.extra != 'serie': if config.get_videolibrary_support() and len(itemlist) > 0 and item.extra != 'serie':
itemlist.append(Item(channel=__channel__, itemlist.append(Item(channel=__channel__, url=item.url, action="add_pelicula_to_library", extra="findvideos",
title='[COLOR yellow]Añadir esta pelicula a la videoteca[/COLOR]', title='[COLOR yellow]Añadir esta pelicula a la videoteca[/COLOR]',
url=item.url, action="add_pelicula_to_library", thumbnail=get_thumb("videolibrary_movie.png"), contentTitle=item.contentTitle))
thumbnail=get_thumb("videolibrary_movie.png"),
extra="findvideos", contentTitle=item.contentTitle))
return itemlist return itemlist
+3 -2
View File
@@ -213,9 +213,10 @@ def findvideos(item):
if 'openload' in url: if 'openload' in url:
url = url + '|' + item.url url = url + '|' + item.url
extra_info = title.split(' - ')
title = "%s - %s" % ('%s', title) title = "%s - %s" % ('%s', title)
itemlist.append(Item(channel=item.channel, action="play", url=url, title=title, text_color=color3)) itemlist.append(Item(channel=item.channel, action="play", url=url, title=title, language=extra_info[0],
quality=extra_info[1],text_color=color3))
itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % i.server.capitalize()) itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % i.server.capitalize())
+1 -1
View File
@@ -470,7 +470,7 @@ def findvideos(item):
videoitem.quality = 'default' videoitem.quality = 'default'
videoitem.language = 'Latino' videoitem.language = 'Latino'
if videoitem.server != '': if videoitem.server != '':
videoitem.thumbnail = item.contentThumbnail videoitem.thumbnail = item.thumbnail
else: else:
videoitem.thumbnail = item.thumbnail videoitem.thumbnail = item.thumbnail
videoitem.server = 'directo' videoitem.server = 'directo'
File diff suppressed because one or more lines are too long
@@ -217,7 +217,7 @@ def findvideos(item):
for videoitem in itemlist: for videoitem in itemlist:
videoitem.channel = item.channel videoitem.channel = item.channel
videoitem.action = 'play' videoitem.action = 'play'
videoitem.thumbnail = servertools.guess_server_thumbnail(videoitem.server) videoitem.thumbnail = item.thumbnail
videoitem.infoLabels = item.infoLabels videoitem.infoLabels = item.infoLabels
videoitem.title = item.contentTitle + ' (' + videoitem.server + ')' videoitem.title = item.contentTitle + ' (' + videoitem.server + ')'
if 'youtube' in videoitem.url: if 'youtube' in videoitem.url:
@@ -1,38 +0,0 @@
{
"id": "verseriesonlinetv",
"name": "Veriesonlinetv",
"active": true,
"adult": false,
"language": ["lat"],
"banner": "verseriesonlinetv.png",
"thumbnail": "http://s6.postimg.org/gl0ok4t01/verserieslogo.png",
"version": 1,
"changes": [
{
"date": "17/12/2016",
"description": "Mejora código y adaptación Infoplus"
},
{
"date": "04/04/2017",
"description": "Migración a Httptools"
},
{
"date": "28/06/2017",
"description": "Corrección código y algunas mejoras"
}
],
"categories": [
"tvshow",
"vos"
],
"settings": [
{
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en busqueda global",
"default": true,
"enabled": true,
"visible": true
}
]
}
File diff suppressed because it is too large Load Diff
+5 -5
View File
@@ -3,7 +3,9 @@
import re import re
import urlparse import urlparse
from core import httptools
from core import scrapertools from core import scrapertools
from core import servertools
from core.item import Item from core.item import Item
from platformcode import logger from platformcode import logger
@@ -38,7 +40,7 @@ def search(item, texto):
def categorias(item): def categorias(item):
logger.info() logger.info()
itemlist = [] itemlist = []
data = scrapertools.cache_page(item.url) data = httptools.downloadpage(item.url).data
data = re.sub(r"\n|\r|\t|\s{2}", "", data) data = re.sub(r"\n|\r|\t|\s{2}", "", data)
patron = '<li><a href="([^"]+)">(.*?)</a>' patron = '<li><a href="([^"]+)">(.*?)</a>'
matches = re.compile(patron, re.DOTALL).findall(data) matches = re.compile(patron, re.DOTALL).findall(data)
@@ -52,7 +54,7 @@ def lista(item):
logger.info() logger.info()
# Descarga la página # Descarga la página
data = scrapertools.cache_page(item.url) data = httptools.downloadpage(item.url).data
data = re.sub(r"\n|\r|\t|\s{2}", "", data) data = re.sub(r"\n|\r|\t|\s{2}", "", data)
# Extrae las entradas de la pagina seleccionada # Extrae las entradas de la pagina seleccionada
@@ -83,10 +85,8 @@ def play(item):
logger.info() logger.info()
itemlist = [] itemlist = []
# Descarga la página # Descarga la página
data = scrapertools.cachePage(item.url) data = httptools.downloadpage(item.url).data
data = scrapertools.unescape(data) data = scrapertools.unescape(data)
logger.info(data)
from core import servertools
itemlist.extend(servertools.find_video_items(data=data)) itemlist.extend(servertools.find_video_items(data=data))
for videoitem in itemlist: for videoitem in itemlist:
videoitem.thumbnail = item.thumbnail videoitem.thumbnail = item.thumbnail
@@ -0,0 +1,32 @@
{
"id": "zonatorrent",
"name": "ZonaTorrent",
"active": true,
"adult": false,
"language": ["cast", "lat"],
"banner": "",
"thumbnail": "https://zonatorrent.org/wp-content/uploads/2017/04/zonatorrent-New-Logo.png",
"version": 1,
"categories": [
"torrent",
"movie"
],
"settings": [
{
"id": "include_in_global_search",
"type": "bool",
"label": "Incluir en busqueda global",
"default": true,
"enabled": true,
"visible": true
},
{
"id": "modo_grafico",
"type": "bool",
"label": "Buscar información extra",
"default": true,
"enabled": true,
"visible": true
}
]
}
+159
View File
@@ -0,0 +1,159 @@
# -*- coding: utf-8 -*-
import re
from channelselector import get_thumb
from core import httptools
from core import scrapertools
from core import servertools
from core import tmdb
from core.item import Item
from platformcode import logger
__channel__ = "zonatorrent"
HOST = 'https://zonatorrent.org'
try:
__modo_grafico__ = config.get_setting('modo_grafico', __channel__)
except:
__modo_grafico__ = True
def mainlist(item):
logger.info()
itemlist = list()
itemlist.append(Item(channel=item.channel, title="Últimas Películas", action="listado", url=HOST, page=False))
itemlist.append(Item(channel=item.channel, title="Alfabético", action="alfabetico"))
itemlist.append(Item(channel=item.channel, title="Géneros", action="generos", url=HOST))
itemlist.append(Item(channel=item.channel, title="Más vistas", action="listado", url=HOST + "/peliculas-mas-vistas/"))
itemlist.append(Item(channel=item.channel, title="Más votadas", action="listado", url=HOST + "/peliculas-mas-votadas/"))
itemlist.append(Item(channel=item.channel, title="Castellano", action="listado", url=HOST + "/?s=spanish",
page=True))
itemlist.append(Item(channel=item.channel, title="Latino", action="listado", url=HOST + "/?s=latino", page=True))
itemlist.append(Item(channel=item.channel, title="Subtitulado", action="listado", url=HOST + "/?s=Subtitulado",
page=True))
itemlist.append(Item(channel=item.channel, title="Con Torrent", action="listado", url=HOST + "/?s=torrent",
page=True))
itemlist.append(Item(channel=item.channel, title="Buscar", action="search", url=HOST + "/?s=",
page=False))
return itemlist
def alfabetico(item):
logger.info()
itemlist = []
for letra in "#ABCDEFGHIJKLMNOPQRSTUVWXYZ":
itemlist.append(Item(channel=item.channel, action="listado", title=letra, page=True,
url=HOST + "/letters/%s/" % letra.replace("#", "0-9")))
return itemlist
def generos(item):
logger.info()
itemlist = []
data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data)
data = scrapertools.find_single_match(data, '<a href="#">Generos</a><ulclass="sub-menu">(.*?)</ul>')
matches = scrapertools.find_multiple_matches(data, '<a href="([^"]+)">(.*?)</a>')
for url, title in matches:
itemlist.append(Item(channel=item.channel, action="listado", title=title, url=url, page=True))
return itemlist
def search(item, texto):
logger.info()
item.url = item.url + texto.replace(" ", "+")
try:
itemlist = listado(item)
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
return []
return itemlist
def listado(item):
logger.info()
itemlist = []
data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data)
pattern = '<a href="(?P<url>[^"]+)"><div[^>]+><figure[^>]+><img[^>]+src="(?P<thumb>[^"]+)"[^>]+></figure></div>' \
'<h2 class="Title">(?P<title>.*?)</h2>.*?<span class="Time[^>]+>(?P<duration>.*?)</span><span ' \
'class="Date[^>]+>(?P<year>.*?)</span><span class="Qlty">(?P<quality>.*?)</span></p><div ' \
'class="Description"><p>.*?\:\s*(?P<plot>.*?)</p>'
matches = re.compile(pattern, re.DOTALL).findall(data)
for url, thumb, title, duration, year, quality, plot in matches:
#title = title.strip().replace("Spanish Online Torrent", "").replace("Latino Online Torrent", "").replace(r'\d{4}','')
title = re.sub('Online|Spanish|Latino|Torrent|\d{4}','',title)
infoLabels = {"year": year}
aux = scrapertools.find_single_match(duration, "(\d+)h\s*(\d+)m")
duration = "%s" % ((int(aux[0]) * 3600) + (int(aux[1]) * 60))
infoLabels["duration"] = duration
itemlist.append(Item(channel=item.channel, action="findvideos", title=title, url=url, thumbnail=thumb,
contentTitle=title, plot=plot, infoLabels=infoLabels))
tmdb.set_infoLabels_itemlist(itemlist, __modo_grafico__)
if item.page:
pattern = "<span class='page-numbers current'>[^<]+</span><a class='page-numbers' href='([^']+)'"
url = scrapertools.find_single_match(data, pattern)
itemlist.append(Item(channel=item.channel, action="listado", title=">> Página siguiente", url=url, page=True,
thumbnail=get_thumb("next.png")))
return itemlist
def findvideos(item):
logger.info()
itemlist = []
data = re.sub(r"\n|\r|\t|\s{2}|(<!--.*?-->)", "", httptools.downloadpage(item.url).data)
data = re.sub(r"&quot;", '"', data)
data = re.sub(r"&lt;", '<', data)
titles = re.compile('data-TPlayerNv="Opt\d+">.*? <span>(.*?)</span></li>', re.DOTALL).findall(data)
urls = re.compile('id="Opt\d+"><iframe[^>]+src="([^"]+)"', re.DOTALL).findall(data)
if len(titles) == len(urls):
for i in range(0, len(titles)):
if i > 0:
title = "Online %s " % titles[i].strip()
else:
title = titles[0]
if "goo.gl" in urls[i]:
urls[i] = httptools.downloadpage(urls[i], follow_redirects=False, only_headers=True)\
.headers.get("location", "")
videourl = servertools.findvideos(urls[i])
if len(videourl) > 0:
itemlist.append(Item(channel=item.channel, action="play", title=title, url=videourl[0][1],
server=videourl[0][0], thumbnail=videourl[0][3], fulltitle=item.title))
pattern = '<a[^>]+href="([^"]+)"[^<]+</a></td><td><span><img[^>]+>(.*?)</span></td><td><span><img[^>]+>(.*?)' \
'</span></td><td><span>(.*?)</span>'
torrents = re.compile(pattern, re.DOTALL).findall(data)
if len(torrents) > 0:
for url, text, lang, quality in torrents:
title = "%s %s - %s" % (text, lang, quality)
itemlist.append(Item(channel=item.channel, action="play", title=title, url=url, server="torrent",
fulltitle=item.title, thumbnail=get_thumb("channels_torrent.png")))
return itemlist
+1 -3
View File
@@ -446,9 +446,7 @@ def mkdir(path):
except: except:
logger.error("ERROR al crear el directorio: %s" % path) logger.error("ERROR al crear el directorio: %s" % path)
logger.error(traceback.format_exc()) logger.error(traceback.format_exc())
# platformtools.dialog_notification("Error al crear el directorio", path) platformtools.dialog_notification("Error al crear el directorio", path)
platformtools.dialog_ok("Alfa", "[COLOR red][B]IMPORTANTE[/B][/COLOR] - Instale y Ejecute el script 'Fix version 1.7.0', que se encuentra en el repositorio de Alfa y "
"vuelva a entrar en el addon, [B]si no lo hace tendrá problemas[/B]")
return False return False
else: else:
return True return True
+1 -1
View File
@@ -14,7 +14,7 @@
"url": "http://docs.google.com/get_video_info?docid=\\1" "url": "http://docs.google.com/get_video_info?docid=\\1"
}, },
{ {
"pattern": "(?s)https://drive.google.com/file/d/([^/]+)/preview", "pattern": "(?s)https://(?:docs|drive).google.com/file/d/([^/]+)/preview",
"url": "http://docs.google.com/get_video_info?docid=\\1" "url": "http://docs.google.com/get_video_info?docid=\\1"
}, },
{ {
+2 -2
View File
@@ -22,7 +22,7 @@
"ignore_urls": [], "ignore_urls": [],
"patterns": [ "patterns": [
{ {
"pattern": "//(?:www.)?ok.../(?:videoembed|video)/(\\d+)", "pattern": "(?:www.)?ok.../(?:videoembed|video)/(\\d+)",
"url": "http://ok.ru/videoembed/\\1" "url": "http://ok.ru/videoembed/\\1"
} }
] ]
@@ -63,4 +63,4 @@
], ],
"thumbnail": "server_okru.png", "thumbnail": "server_okru.png",
"version": 1 "version": 1
} }
+2 -2
View File
@@ -18,7 +18,7 @@
"ignore_urls": [], "ignore_urls": [],
"patterns": [ "patterns": [
{ {
"pattern": "(?:openload|oload).../(?:embed|f)/([0-9a-zA-Z-_]+)", "pattern": "(?:openload|oload).*?/(?:embed|f)/([0-9a-zA-Z-_]+)",
"url": "https://openload.co/embed/\\1/" "url": "https://openload.co/embed/\\1/"
} }
] ]
@@ -57,4 +57,4 @@
], ],
"thumbnail": "server_openload.png", "thumbnail": "server_openload.png",
"version": 1 "version": 1
} }