diff --git a/mediaserver/HTTPAndWSServer.py b/mediaserver/HTTPAndWSServer.py index 04529a28..8786a8e7 100644 --- a/mediaserver/HTTPAndWSServer.py +++ b/mediaserver/HTTPAndWSServer.py @@ -1,10 +1,12 @@ # -*- coding: utf-8 -*- +import os import random import re import threading import time import traceback +from platformcode import platformtools from BaseHTTPServer import HTTPServer from HTTPWebSocketsHandler import HTTPWebSocketsHandler diff --git a/mediaserver/alfa.py b/mediaserver/alfa.py index e53fe499..f61ab910 100644 --- a/mediaserver/alfa.py +++ b/mediaserver/alfa.py @@ -8,6 +8,8 @@ import sys import threading import time from functools import wraps +# Requerido para el ejecutable en windows +import SimpleHTTPServer sys.dont_write_bytecode = True from platformcode import config diff --git a/mediaserver/genera.bat b/mediaserver/genera.bat new file mode 100644 index 00000000..648884ce --- /dev/null +++ b/mediaserver/genera.bat @@ -0,0 +1,5 @@ +REM Genera los archivos para el ejecutable en windows de Alfa Mediaserver +python setup.py py2exe -p channels,servers,lib,platformcode +xcopy lib dist\lib /y /s /i +xcopy platformcode dist\platformcode /y /s /i +xcopy resources dist\resources /y /s /i diff --git a/mediaserver/platformcode/config.py b/mediaserver/platformcode/config.py index 835384da..042271fe 100644 --- a/mediaserver/platformcode/config.py +++ b/mediaserver/platformcode/config.py @@ -14,7 +14,7 @@ settings_dic = {} adult_setting = {} -def get_addon_version(linea_inicio=0, total_lineas=2): +def get_addon_version(linea_inicio=0, total_lineas=2, with_fix=False): ''' Devuelve el número de de versión del addon, obtenido desde el archivo addon.xml ''' diff --git a/mediaserver/platformcode/controllers/__init__.py b/mediaserver/platformcode/controllers/__init__.py index bc031b42..41b7e8ae 100644 --- a/mediaserver/platformcode/controllers/__init__.py +++ b/mediaserver/platformcode/controllers/__init__.py @@ -7,12 +7,12 @@ import os from inspect import isclass from controller import Controller -from platformcode import logger +from platformcode import config, logger def load_controllers(): controllers = [] - path = os.path.split(__file__)[0] + path = os.path.join(config.get_runtime_path(),"platformcode\controllers") for fname in os.listdir(path): mod, ext = os.path.splitext(fname) fname = os.path.join(path, fname) diff --git a/mediaserver/setup.py b/mediaserver/setup.py new file mode 100644 index 00000000..34d9a062 --- /dev/null +++ b/mediaserver/setup.py @@ -0,0 +1,18 @@ +# setup.py +# Para crear el ejecutable de Alfa mediaserver en windows +# Se usa py2exe +# Linea de comandos para la creacion: python setup.py py2exe -p channels,servers,lib,platformcode +from distutils.core import setup +import glob +import py2exe + +setup(packages=['channels','servers','lib','platformcode','platformcode/controllers'], + data_files=[("channels",glob.glob("channels\\*.py")), + ("channels",glob.glob("channels\\*.json")), + ("servers",glob.glob("servers\\*.py")), + ("servers",glob.glob("servers\\*.json")), + ("",glob.glob("addon.xml")), + ], + console=["alfa.py"] + ) + diff --git a/plugin.video.alfa/channels/alltorrent.json b/plugin.video.alfa/channels/alltorrent.json deleted file mode 100755 index ae9bbebe..00000000 --- a/plugin.video.alfa/channels/alltorrent.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "id": "alltorrent", - "name": "Alltorrent", - "active": false, - "adult": false, - "language": ["cast"], - "thumbnail": "altorrent.png", - "fanart": "altorrent.jpg", - "categories": [ - "torrent", - "movie" - ], - "settings": [ - { - "id": "modo_grafico", - "type": "bool", - "label": "Buscar información extra", - "default": true, - "enabled": true, - "visible": true - }, - { - "id": "include_in_global_search", - "type": "bool", - "label": "Incluir en busqueda global", - "default": false, - "enabled": true, - "visible": true - }, - { - "id": "include_in_newest_torrent", - "type": "bool", - "label": "Incluir en Novedades - Torrent", - "default": true, - "enabled": true, - "visible": true - } - ] -} \ No newline at end of file diff --git a/plugin.video.alfa/channels/alltorrent.py b/plugin.video.alfa/channels/alltorrent.py deleted file mode 100755 index 2f9ec7cd..00000000 --- a/plugin.video.alfa/channels/alltorrent.py +++ /dev/null @@ -1,314 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -import sys -import urllib -import urlparse - -from channelselector import get_thumb -from core import httptools -from core import scrapertools -from core import servertools -from core.item import Item -from platformcode import config, logger -from core import tmdb -from lib import generictools - -host = 'http://alltorrent.net/' -__modo_grafico__ = config.get_setting('modo_grafico', 'alltorrent') - - -def mainlist(item): - logger.info() - itemlist = [] - - thumb_pelis = get_thumb("channels_movie.png") - thumb_pelis_hd = get_thumb("channels_movie_hd.png") - thumb_series = get_thumb("channels_tvshow.png") - thumb_series_hd = get_thumb("channels_tvshow_hd.png") - thumb_buscar = get_thumb("search.png") - - itemlist.append(item.clone(title="[COLOR springgreen][B]Todas Las Películas[/B][/COLOR]", action="listado", - url=host, thumbnail=thumb_pelis, extra="pelicula")) - itemlist.append(item.clone(title="[COLOR springgreen] Incluyen 1080p[/COLOR]", action="listado", - url=host + "rezolucia/1080p/", thumbnail=thumb_pelis_hd, extra="pelicula")) - itemlist.append(item.clone(title="[COLOR springgreen] Incluyen 720p[/COLOR]", action="listado", - url=host + "rezolucia/720p/", thumbnail=thumb_pelis_hd, extra="pelicula")) - itemlist.append(item.clone(title="[COLOR springgreen] Incluyen Hdrip[/COLOR]", action="listado", - url=host + "rezolucia/hdrip/", thumbnail=thumb_pelis, extra="pelicula")) - itemlist.append(item.clone(title="[COLOR springgreen] Incluyen 3D[/COLOR]", action="listado", - url=host + "rezolucia/3d/", thumbnail=thumb_pelis_hd, extra="pelicula")) - itemlist.append(item.clone(title="[COLOR floralwhite][B]Buscar[/B][/COLOR]", action="search", thumbnail=thumb_buscar, - extra="titulo")) - itemlist.append(item.clone(title="[COLOR oldlace] Por Título[/COLOR]", action="search", thumbnail=thumb_buscar, - extra="titulo")) - itemlist.append(item.clone(title="[COLOR oldlace] Por Año[/COLOR]", action="search", thumbnail=thumb_buscar, - extra="año")) - itemlist.append(item.clone(title="[COLOR oldlace] Por Rating Imdb[/COLOR]", action="search", thumbnail=thumb_buscar, - extra="rating")) - - return itemlist - - -def listado(item): - logger.info() - itemlist = [] - - # Descarga la página - data = '' - try: - data = re.sub(r"\n|\r|\t|\s{2}|()", "", httptools.downloadpage(item.url).data) - except: - pass - - if not data and item.extra != "año": #Si la web está caída salimos sin dar error - logger.error("ERROR 01: LISTADO: La Web no responde o ha cambiado de URL: " + item.url + " / DATA: " + data) - itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) - return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos - elif not data and item.extra == "año": #cuando no hay datos para un año, da error. Tratamos de evitar el error - return itemlist - - patron = '
([^"]+)<\/a>\s?<\/div>
(.*?)<\/div><\/div><\/div>' - #data = scrapertools.find_single_match(data, patron) - matches = re.compile(patron, re.DOTALL).findall(data) - if not matches and not '') + patron = '
  • .*?src="([^"]+)".*? data-original-title=" (\d+x\d+).*?' matches = re.compile(patron, re.DOTALL).findall(data) - for scrapedurl, scrapedthumbnail, scrapedtitle, scrapedinfo, lang_data in matches: - + for lang_data, scrapedurl, scrapedthumbnail, scrapedinfo, in matches: url = host+scrapedurl thumbnail = scrapedthumbnail scrapedinfo = scrapedinfo.split('x') season = scrapedinfo[0] episode = scrapedinfo[1] + scrapedtitle = scrapertools.find_single_match(url, 'capitulo/([^/]+)/').replace("-", " ") title = '%s - %sx%s' % (scrapedtitle, season, episode ) title, language = add_language(title, lang_data) itemlist.append(Item(channel=item.channel, @@ -244,7 +241,7 @@ def new_episodes(item): def add_language(title, string): logger.info() - languages = scrapertools.find_multiple_matches(string, '/banderas/(.*?).png') + languages = scrapertools.find_multiple_matches(string, '/language/(.*?).png') language = [] for lang in languages: @@ -269,34 +266,38 @@ def findvideos(item): itemlist = [] data = get_source(item.url) - - patron = "|\s{2,}', "", data) - patron = ".*?src=(.*?) style.*?value=(.*?)>" + data = get_source(item.url) + + patron = '
    .*?src="([^"]+)".*?alt="([^"]+)"' + matches = re.compile(patron, re.DOTALL).findall(data) matches = re.compile(patron, re.DOTALL).findall(data) @@ -344,10 +334,10 @@ def search_results(item): def search(item, texto): logger.info() - import urllib - if texto != '': - post = {'query':texto} - post = urllib.urlencode(post) - item.post = post + texto = texto.replace(" ", "+") + item.url = item.url + texto - return search_results(item) + if texto != '': + return list_all(item) + else: + return [] \ No newline at end of file diff --git a/plugin.video.alfa/channels/seriesverde.json b/plugin.video.alfa/channels/seriesverde.json deleted file mode 100644 index a407338a..00000000 --- a/plugin.video.alfa/channels/seriesverde.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "id": "seriesverde", - "name": "SeriesVerde", - "active": false, - "adult": false, - "language": ["cast", "lat"], - "thumbnail": "https://s33.postimg.cc/96dhv4trj/seriesverde.png", - "banner": "", - "categories": [ - "tvshow" - ], - "settings": [ - { - "id": "include_in_global_search", - "type": "bool", - "label": "Incluir en busqueda global", - "default": false, - "enabled": false, - "visible": false - }, - { - "id": "filter_languages", - "type": "list", - "label": "Mostrar enlaces en idioma...", - "default": 0, - "enabled": true, - "visible": true, - "lvalues": [ - "No filtrar", - "Cast", - "Lat", - "VOSE", - "VO" - ] - } - ] -} diff --git a/plugin.video.alfa/channels/seriesverde.py b/plugin.video.alfa/channels/seriesverde.py deleted file mode 100644 index ce8598d6..00000000 --- a/plugin.video.alfa/channels/seriesverde.py +++ /dev/null @@ -1,321 +0,0 @@ -# -*- coding: utf-8 -*- -# -*- Channel SeriesVerde -*- -# -*- Created for Alfa-addon -*- -# -*- By the Alfa Develop Group -*- - -import re - -from channels import autoplay -from channels import filtertools -from core import httptools -from core import scrapertools -from core import servertools -from core import tmdb -from core.item import Item -from platformcode import config, logger -from channelselector import get_thumb - -host = 'http://seriesverde.com/' - -IDIOMAS = {'es': 'Cast', 'la': 'Lat', 'vos': 'VOSE', 'vo': 'VO'} -list_language = IDIOMAS.values() -list_quality = ['SD', 'Micro-HD-720p', '720p', 'HDitunes', 'Micro-HD-1080p' ] -list_servers = ['powvideo','yourupload', 'openload', 'gamovideo', 'flashx', 'clipwatching', 'streamango', 'streamcloud'] - - -def mainlist(item): - logger.info() - - autoplay.init(item.channel, list_servers, list_quality) - - itemlist = [] - - itemlist.append(Item(channel=item.channel, - title="Todas", - action="list_all", - thumbnail=get_thumb('all', auto=True), - url=host + 'listado/', - )) - - itemlist.append(Item(channel=item.channel, - title="Generos", - action="section", - thumbnail=get_thumb('genres', auto=True), - url=host, - )) - - itemlist.append(Item(channel=item.channel, - title="A - Z", - action="section", - thumbnail=get_thumb('alphabet', auto=True), - url=host+'listado/', )) - - itemlist.append(Item(channel=item.channel, - title="Buscar", - action="search", - thumbnail=get_thumb('search', auto=True))) - - itemlist = filtertools.show_option(itemlist, item.channel, list_language, list_quality) - autoplay.show_option(item.channel, itemlist) - - return itemlist - - -def get_source(url): - logger.info() - data = httptools.downloadpage(url).data - data = re.sub(r'"|\n|\r|\t| |
    |\s{2,}', "", data) - return data - - -def list_all(item): - logger.info() - - itemlist = [] - data = get_source(item.url) - contentSerieName = '' - - patron = "
    .*?src='(.*?)' title='(.*?)'" - matches = re.compile(patron, re.DOTALL).findall(data) - - - for scrapedurl, scrapedthumbnail, scrapedtitle in matches: - - url = host + scrapedurl - thumbnail = scrapedthumbnail - title = scrapertools.decodeHtmlentities(scrapedtitle) - - itemlist.append(Item(channel=item.channel, - action='seasons', - title=title, - url=url, - thumbnail=thumbnail, - contentTitle=scrapedtitle, - contentSerieName=contentSerieName, - context=filtertools.context(item, list_language, list_quality), - )) - - tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) - - # #Paginacion - - if itemlist != []: - base_page = scrapertools.find_single_match(item.url,'(.*?)?') - next_page = scrapertools.find_single_match(data, '>>') - if next_page != '': - itemlist.append(Item(channel=item.channel, - action="lista", - title='Siguiente >>>', - url=base_page+next_page, - thumbnail='https://s16.postimg.cc/9okdu7hhx/siguiente.png', - )) - return itemlist - - -def section(item): - logger.info() - - itemlist = [] - data = get_source(item.url) - if item.title == 'Generos': - patron = '
  • (.*?)
  • ' - elif item.title == 'A - Z': - patron = "(.*?)" - matches = re.compile(patron, re.DOTALL).findall(data) - - for scrapedurl, scrapedtitle in matches: - - if item.title == 'Generos': - url = host + scrapedurl - else: - url = scrapedurl - title = scrapedtitle - itemlist.append(Item(channel=item.channel, - action='list_all', - title=title, - url=url - )) - return itemlist - -def seasons(item): - logger.info() - itemlist = [] - data = get_source(item.url) - - patron = '.*?Temporada (\d+) ' - matches = re.compile(patron, re.DOTALL).findall(data) - infoLabels=item.infoLabels - for scrapedseason in matches: - url = item.url - title = 'Temporada %s' % scrapedseason - contentSeasonNumber = scrapedseason - infoLabels['season'] = contentSeasonNumber - thumbnail = item.thumbnail - itemlist.append(Item(channel=item.channel, - action="episodesxseason", - title=title, - url=url, - thumbnail=thumbnail, - contentSeasonNumber=contentSeasonNumber, - infoLabels=infoLabels - )) - tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) - if config.get_videolibrary_support() and len(itemlist) > 0: - itemlist.append(Item(channel=item.channel, - title='[COLOR yellow]Añadir esta serie a la videoteca[/COLOR]', - url=item.url, - action="add_serie_to_library", - extra="episodios", - contentSerieName=item.contentSerieName, - )) - - return itemlist - - -def episodios(item): - logger.info() - itemlist = [] - templist = seasons(item) - for tempitem in templist: - itemlist += episodesxseason(tempitem) - return itemlist - - -def episodesxseason(item): - logger.info() - itemlist = [] - data = get_source(item.url) - season = item.contentSeasonNumber - season_data = scrapertools.find_single_match(data, '
    |\s{2,}', "", data) - patron = ".*?src=(.*?) style.*?value=(.*?)>" - - matches = re.compile(patron, re.DOTALL).findall(data) - - for scrapedurl, scrapedthumb, scrapedtitle in matches: - itemlist.append(Item(channel=item.channel, - title=scrapedtitle, - url=host+scrapedurl, - action="seasons", - thumbnail=scrapedthumb, - contentSerieName=scrapedtitle, - context=filtertools.context(item, list_language, list_quality) - )) - tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) - - return itemlist - - -def search(item, texto): - logger.info() - import urllib - if texto != '': - post = {'query':texto} - post = urllib.urlencode(post) - item.post = post - - return search_results(item) diff --git a/plugin.video.alfa/channels/yaske.json b/plugin.video.alfa/channels/yaske.json deleted file mode 100644 index 8b9ad9d4..00000000 --- a/plugin.video.alfa/channels/yaske.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "id": "yaske", - "name": "Yaske", - "active": false, - "adult": false, - "language": ["cast", "lat"], - "banner": "yaske.png", - "fanart": "https://github.com/master-1970/resources/raw/master/images/fanart/yaske.png", - "thumbnail": "yaske.png", - "categories": [ - "direct", - "movie" - ], - "settings": [ - { - "id": "include_in_global_search", - "type": "bool", - "label": "Incluir en busqueda global", - "default": true, - "enabled": true, - "visible": true - }, - { - "id": "include_in_newest_peliculas", - "type": "bool", - "label": "Incluir en Novedades - Peliculas", - "default": true, - "enabled": true, - "visible": true - }, - { - "id": "include_in_newest_infantiles", - "type": "bool", - "label": "Incluir en Novedades - Infantiles", - "default": false, - "enabled": true, - "visible": true - }, - { - "id": "include_in_newest_terror", - "type": "bool", - "label": "Incluir en Novedades - terror", - "default": true, - "enabled": true, - "visible": true - } - ] -} diff --git a/plugin.video.alfa/channels/yaske.py b/plugin.video.alfa/channels/yaske.py deleted file mode 100644 index b81aa810..00000000 --- a/plugin.video.alfa/channels/yaske.py +++ /dev/null @@ -1,349 +0,0 @@ -# -*- coding: utf-8 -*- - -import re -import urllib -import unicodedata - -from core import channeltools -from core import httptools -from core import scrapertools -from core import servertools -from core import tmdb -from core.item import Item -from platformcode import config, logger - -idiomas1 = {"/es.png":"CAST","/en_es.png":"VOSE","/la.png":"LAT","/en.png":"ENG"} -domain = "yaske.ro" -HOST = "http://www." + domain -HOST_MOVIES = "http://peliculas." + domain + "/now_playing/" -HOST_TVSHOWS = "http://series." + domain + "/popular/" -HOST_TVSHOWS_TPL = "http://series." + domain + "/tpl" -parameters = channeltools.get_channel_parameters('yaske') -fanart_host = parameters['fanart'] -thumbnail_host = parameters['thumbnail'] -color1, color2, color3 = ['0xFFA5F6AF', '0xFF5FDA6D', '0xFF11811E'] - - -def mainlist(item): - logger.info() - itemlist = [] - item.url = HOST - item.text_color = color2 - item.fanart = fanart_host - thumbnail = "https://raw.githubusercontent.com/master-1970/resources/master/images/genres/4/verdes/%s.png" - - itemlist.append(item.clone(title="Peliculas", text_bold=True, viewcontent='movies', - thumbnail=thumbnail % 'novedades', viewmode="movie_with_plot")) - itemlist.append(item.clone(title=" Novedades", action="peliculas", viewcontent='movies', - url=HOST_MOVIES, - thumbnail=thumbnail % 'novedades', viewmode="movie_with_plot")) - itemlist.append(item.clone(title=" Estrenos", action="peliculas", - url=HOST + "/premiere", thumbnail=thumbnail % 'estrenos')) - itemlist.append(item.clone(title=" Género", action="menu_buscar_contenido", thumbnail=thumbnail % 'generos', viewmode="thumbnails", - url=HOST - )) - itemlist.append(item.clone(title=" Buscar película", action="search", thumbnail=thumbnail % 'buscar', - type = "movie" )) - - itemlist.append(item.clone(title="Series", text_bold=True, viewcontent='movies', - thumbnail=thumbnail % 'novedades', viewmode="movie_with_plot")) - itemlist.append(item.clone(title=" Novedades", action="series", viewcontent='movies', - url=HOST_TVSHOWS, - thumbnail=thumbnail % 'novedades', viewmode="movie_with_plot")) - itemlist.append(item.clone(title=" Buscar serie", action="search", thumbnail=thumbnail % 'buscar', - type = "tvshow" )) - - return itemlist - - -def series(item): - logger.info() - itemlist = [] - url_p = scrapertools.find_single_match(item.url, '(.*?).page=') - page = scrapertools.find_single_match(item.url, 'page=([0-9]+)') - if not page: - page = 1 - url_p = item.url - else: - page = int(page) + 1 - if "search" in item.url: - url_p += "&page=%s" %page - else: - url_p += "?page=%s" %page - data = httptools.downloadpage(url_p).data - data = re.sub(r"\n|\r|\t|\s{2}| ", "", data) - patron = '(?s)class="post-item-image btn-play-item".*?' - patron += 'href="(http://series[^"]+)">.*?' - patron += '0: - itemlist.append( - Item(channel=item.channel, action="series", title=">> Página siguiente", thumbnail=thumbnail_host, - url=url_p, folder=True, text_color=color3, text_bold=True)) - return itemlist - - -def temporadas(item): - logger.info() - itemlist = [] - post = [] - data = httptools.downloadpage(item.url).data - patron = 'media-object" src="([^"]+).*?' - patron += 'media-heading">([^<]+).*?' - patron += '(.*?)
    ' - matches = scrapertools.find_multiple_matches(data, patron) - for scrapedthumbnail, scrapedtitle, scrapedcapitulos in matches: - id = scrapertools.find_single_match(item.url, "yaske.ro/([0-9]+)") - season = scrapertools.find_single_match(scrapedtitle, "[0-9]+") - title = scrapedtitle + " (%s)" %scrapedcapitulos.replace("","").replace("\n","") - post = {"data[season]" : season, "data[id]" : id, "name" : "list_episodes" , "both" : "0", "type" : "template"} - post = urllib.urlencode(post) - item.infoLabels["season"] = season - itemlist.append(item.clone(action = "capitulos", - post = post, - title = title, - url = HOST_TVSHOWS_TPL - )) - tmdb.set_infoLabels(itemlist) - if config.get_videolibrary_support(): - itemlist.append(Item(channel=item.channel, title ="")) - itemlist.append(item.clone(action = "add_serie_to_library", - channel = item.channel, - extra = "episodios", - title = '[COLOR yellow]Añadir esta serie a la videoteca[/COLOR]', - url = item.url - )) - return itemlist - -def episodios(item): - logger.info() - itemlist = [] - templist = temporadas(item) - for tempitem in templist: - itemlist += capitulos(tempitem) - return itemlist - - -def capitulos(item): - logger.info() - itemlist = [] - data = httptools.downloadpage(item.url, post=item.post).data - data = data.replace("","") - patron = 'href=."([^"]+).*?' - patron += 'media-heading.">([^<]+).*?' - patron += 'fecha de emisi.*?: ([^<]+)' - matches = scrapertools.find_multiple_matches(data, patron) - for scrapedurl, scrapedtitle, scrapeddate in matches: - scrapedtitle = scrapedtitle + " (%s)" %scrapeddate - episode = scrapertools.find_single_match(scrapedurl, "capitulo-([0-9]+)") - query = item.contentSerieName + " " + scrapertools.find_single_match(scrapedtitle, "\w+") - item.infoLabels["episode"] = episode - itemlist.append(item.clone(action = "findvideos", - title = scrapedtitle.decode("unicode-escape"), - query = query.replace(" ","+"), - url = scrapedurl.replace("\\","") - )) - tmdb.set_infoLabels(itemlist) - return itemlist - - -def search(item, texto): - logger.info() - itemlist = [] - try: - item.url = HOST + "/search/?query=" + texto.replace(' ', '+') - item.extra = "" - if item.type == "movie": - itemlist.extend(peliculas(item)) - else: - itemlist.extend(series(item)) - if itemlist[-1].title == ">> Página siguiente": - item_pag = itemlist[-1] - itemlist = sorted(itemlist[:-1], key=lambda Item: Item.contentTitle) - itemlist.append(item_pag) - else: - itemlist = sorted(itemlist, key=lambda Item: Item.contentTitle) - return itemlist - except: - import sys - for line in sys.exc_info(): - logger.error("%s" % line) - return [] - - -def newest(categoria): - logger.info() - item = Item() - try: - if categoria == 'peliculas': - item.url = HOST - elif categoria == 'infantiles': - item.url = HOST + "/genre/16/" - elif categoria == 'terror': - item.url = HOST + "/genre/27/" - else: - return [] - itemlist = peliculas(item) - if itemlist[-1].title == ">> Página siguiente": - itemlist.pop() - - # Se captura la excepción, para no interrumpir al canal novedades si un canal falla - except: - import sys - for line in sys.exc_info(): - logger.error("{0}".format(line)) - return [] - - return itemlist - - -def peliculas(item): - logger.info() - itemlist = [] - url_p = scrapertools.find_single_match(item.url, '(.*?).page=') - page = scrapertools.find_single_match(item.url, 'page=([0-9]+)') - if not page: - page = 1 - url_p = item.url - else: - page = int(page) + 1 - if "search" in item.url: - url_p += "&page=%s" %page - else: - url_p += "?page=%s" %page - data = httptools.downloadpage(url_p).data - data = re.sub(r"\n|\r|\t|\s{2}| ", "", data) - patron = '(?s)class="post-item-image btn-play-item".*?' - patron += 'href="([^"]+)">.*?' - patron += '0: - itemlist.append( - Item(channel=item.channel, action="peliculas", title=">> Página siguiente", thumbnail=thumbnail_host, - url=url_p, folder=True, text_color=color3, text_bold=True)) - return itemlist - - -def menu_buscar_contenido(item): - logger.info(item) - itemlist = [] - data = httptools.downloadpage(item.url).data - patron = 'Generos.*?' - data = scrapertools.find_single_match(data, patron) - patron = 'href="([^"]+)">([^<]+)' - matches = scrapertools.find_multiple_matches(data, patron) - for scrapedurl, scrapedtitle in matches: - url = HOST + scrapedurl - itemlist.append(Item(channel = item.channel, - action = "peliculas", - title = scrapedtitle, - url = url, - text_color = color1, - contentType = 'movie', - folder = True, - viewmode = "movie_with_plot" - )) - return itemlist - - -def findvideos(item): - logger.info() - itemlist = [] - sublist = [] - data = httptools.downloadpage(item.url).data - patron = '(?s)id="online".*?server="([^"]+)"' - mserver = scrapertools.find_single_match(data, patron) - if not item.query: - item.query = scrapertools.find_single_match(item.url, "peliculas.*?/[0-9]+/([^/]+)").replace("-","+") - url_m = "http://olimpo.link/?q=%s&server=%s" %(item.query, mserver) - patron = 'class="favicon.*?domain=(?:www\.|)([^\.]+).*?text-overflow.*?href="([^"]+).*?' - patron += '\[([^\]]+)\].*?\[([^\]]+)\]' - data = httptools.downloadpage(url_m).data - matches = scrapertools.find_multiple_matches(data, patron) - page = 2 - while len(matches)>0: - for server, url, idioma, calidad in matches: - if "drive" in server: - server = "gvideo" - sublist.append(item.clone(action="play", url=url, folder=False, text_color=color1, quality=calidad.strip(), - language=idioma.strip(), - server = server, - title="Ver en %s %s" %(server, calidad) - )) - data = httptools.downloadpage(url_m + "&page=%s" %page).data - matches = scrapertools.find_multiple_matches(data, patron) - page +=1 - sublist = sorted(sublist, key=lambda Item: Item.quality + Item.server) - for k in ["Español", "Latino", "Ingles - Sub Español", "Ingles"]: - lista_idioma = filter(lambda i: i.language == k, sublist) - if lista_idioma: - itemlist.append(item.clone(title=k, folder=False, infoLabels = "", - text_color=color2, text_bold=True, thumbnail=thumbnail_host)) - itemlist.extend(lista_idioma) - - tmdb.set_infoLabels(itemlist, True) - # Insertar items "Buscar trailer" y "Añadir a la videoteca" - if itemlist and item.extra != "library": - title = "%s [Buscar trailer]" % (item.contentTitle) - itemlist.insert(0, item.clone(channel="trailertools", action="buscartrailer", - text_color=color3, title=title, viewmode="list")) - - 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", - contentTitle=item.contentTitle, extra="library", thumbnail=thumbnail_host)) - return itemlist - -def play(item): - logger.info() - itemlist = [] - ddd = httptools.downloadpage(item.url).data - url = "http://olimpo.link" + scrapertools.find_single_match(ddd, '