# -*- coding: utf-8 -*- import re import sys import urllib import urlparse import datetime import ast from channelselector import get_thumb from core import httptools from core import scrapertools from core import servertools from core import channeltools from core.item import Item from platformcode import config, logger from core import tmdb from lib import generictools channel_py = 'newpct1' #Código para permitir usar un único canal para todas las webs clones de NewPct1 #Cargamos en .json del canal para ver las listas de valores en settings clone_list = channeltools.get_channel_json(channel_py) for settings in clone_list['settings']: #Se recorren todos los settings if settings['id'] == "clonenewpct1_channels_list": #Encontramos en setting clone_list = settings['default'] #Carga lista de clones break clone_list = ast.literal_eval(clone_list) #la convierte en array host_index = 0 host_index = config.get_setting('clonenewpct1_channel_default', channel_py) #Clone por defecto i = 0 for active_clone, channel_clone, host_clone, contentType_clone, info_clone in clone_list: if i == host_index: channel_clone_name = channel_clone #Nombre del Canal elegido host = host_clone #URL del Canal elegido if active_clone == "1": #Comprueba que el clone esté activo break channel_clone_name = "*** DOWN ***" #es un fallo masivo ??? for active_clone, channel_clone, host_clone, contentType_clone, info_clone in clone_list: if active_clone == "1": #Comprueba que el clone esté activo channel_clone_name = channel_clone #Nombre del Canal elegido host = host_clone #URL del Canal elegido break i += 1 item = Item() if item.channel != channel_py: item.channel = channel_py #Carga de opciones del canal __modo_grafico__ = config.get_setting('modo_grafico', channel_py) #TMDB? modo_ultima_temp = config.get_setting('seleccionar_ult_temporadda_activa', channel_py) #Actualización sólo últ. Temporada? timeout = config.get_setting('clonenewpct1_timeout_downloadpage', channel_py) #Timeout downloadpage if timeout == 0: timeout = None fecha_rango = config.get_setting('clonenewpct1_rango_fechas_novedades', channel_py) #Rango fechas para Novedades if fecha_rango == 0: fecha_rango = 'Hoy' elif fecha_rango == 1: fecha_rango = 'Ayer' elif fecha_rango == 2: fecha_rango = 'Semana' elif fecha_rango == 3: fecha_rango = 'Mes' elif fecha_rango == 4: fecha_rango = 'Siempre' episodio_serie = config.get_setting('clonenewpct1_serie_episodio_novedades', channel_py) #Episodio o serie para Novedades #Temporal, sólo para actualizar newpct1_data.json con otro valor por defecto channel_banned = config.get_setting('clonenewpct1_excluir1_enlaces_veronline', channel_py) #1er Canal baneado if channel_banned == 9: config.set_setting('clonenewpct1_excluir1_enlaces_veronline', 22, channel_py) #se pone el nuevo valor por defecto def mainlist(item): logger.info() itemlist = [] if not item.channel_host: item.channel_host = host if item.category.lower() == channel_py: item.category = channel_clone_name.capitalize() 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_series_az = get_thumb("channels_tvshow_az.png") thumb_docus = get_thumb("channels_documentary.png") thumb_buscar = get_thumb("search.png") thumb_settings = get_thumb("setting_0.png") if channel_clone_name == "*** DOWN ***": #Ningún clones activo !!! itemlist.append(item.clone(action='', title="[COLOR yellow]Ningún canal NewPct1 activo[/COLOR]")) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos y salimos itemlist.append(Item(channel=item.channel, action="submenu_novedades", title="Novedades", url=item.channel_host + "ultimas-descargas/", extra="novedades", thumbnail=thumb_pelis, category=item.category, channel_host=item.channel_host)) itemlist.append(Item(channel=item.channel, action="submenu", title="Películas", url=item.channel_host, extra="peliculas", thumbnail=thumb_pelis, category=item.category, channel_host=item.channel_host)) itemlist.append(Item(channel=item.channel, action="submenu", title="Series", url=item.channel_host, extra="series", thumbnail=thumb_series, category=item.category, channel_host=item.channel_host)) itemlist.append(Item(channel=item.channel, action="submenu", title="Documentales", url=item.channel_host, extra="varios", thumbnail=thumb_docus, category=item.category, channel_host=item.channel_host)) itemlist.append( Item(channel=item.channel, action="search", title="Buscar", url=item.channel_host + "buscar", thumbnail=thumb_buscar, category=item.category, channel_host=item.channel_host)) itemlist.append( Item(channel=item.channel, action="", title="[COLOR yellow]Configuración de Servidores:[/COLOR]", url="", thumbnail=thumb_settings, category=item.category, channel_host=item.channel_host)) itemlist.append( Item(channel=item.channel, action="settingCanal", title="Servidores para Ver Online y Descargas", url="", thumbnail=thumb_settings, category=item.category, channel_host=item.channel_host)) item.category = '%s / %s' % (channel_py.title(), item.category.title()) #Newpct1 / nombre de clone en pantalla de Mainlist return itemlist def settingCanal(item): from platformcode import platformtools platformtools.show_channel_settings() platformtools.itemlist_refresh() return def submenu(item): logger.info() itemlist = [] data = '' try: data = re.sub(r"\n|\r|\t|\s{2}|()", "", httptools.downloadpage(item.url, timeout=timeout).data) except: pass patron = '
  • <\/i>.*Inicio<\/a><\/li>(.+)<\/ul>\s?<\/nav>' #Verificamos si se ha cargado una página, y si además tiene la estructura correcta if not data or not scrapertools.find_single_match(data, patron): item = generictools.web_intervenida(item, data) #Verificamos que no haya sido clausurada if item.intervencion: #Sí ha sido clausurada judicialmente for clone_inter, autoridad in item.intervencion: thumb_intervenido = get_thumb(autoridad) itemlist.append(item.clone(action='', title="[COLOR yellow]" + clone_inter.capitalize() + ': [/COLOR]' + intervenido_judicial + '. Reportar el problema en el foro', thumbnail=thumb_intervenido)) return itemlist #Salimos logger.error("ERROR 01: SUBMENU: La Web no responde o ha cambiado de URL: " + item.url + data) #Si no hay datos consistentes, llamamos al método de fail_over para que encuentre un canal que esté activo y pueda gestionar el submenú item, data = generictools.fail_over_newpct1(item, patron) if not data: #Si no ha logrado encontrar nada, salimos itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR]: Ningún canal NewPct1 activo')) itemlist.append(item.clone(action='', title=item.category + ': ERROR 01: SUBMENU: 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 item.channel_alt: #Si ha habido fail-over, lo comento itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category + '[/COLOR] [ALT ] en uso')) itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.channel_alt.capitalize() + '[/COLOR] inaccesible')) if item.url_alt: del item.url_alt del item.channel_alt data = unicode(data, "iso-8859-1", errors="replace").encode("utf-8") data = data.replace("'", '"').replace('/series"', '/series/"') #Compatibilidad con mispelisy.series.com if "pelisyseries.com" in item.channel_host and item.extra == "varios": #compatibilidad con mispelisy.series.com data = '
  • Documentales
  • ' else: data = scrapertools.get_match(data, patron) #Seleccionamos el trozo que nos interesa if not data: logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos patron = '
  • ([^>]+)<\/a><\/li>' matches = re.compile(patron, re.DOTALL).findall(data) if not matches: logger.error("ERROR 02: SUBMENU: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: SUBMENU: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos for scrapedurl, scrapedtitle in matches: title = scrapedtitle.strip() #Preguntamos por las entradas que no corresponden al "extra" if item.extra in scrapedtitle.lower() or (item.extra == "peliculas" and ("cine" in scrapedurl or "anime" in scrapedurl)) or (item.extra == "varios" and ("documentales" in scrapedurl or "varios" in scrapedurl)): itemlist.append(item.clone(action="listado", title=title, url=scrapedurl)) itemlist.append(item.clone(action="alfabeto", title=title + " [A-Z]", url=scrapedurl)) if item.extra == "peliculas": itemlist.append(item.clone(action="listado", title="Películas 4K", url=item.channel_host + "peliculas-hd/4kultrahd/")) itemlist.append(item.clone(action="alfabeto", title="Películas 4K" + " [A-Z]", url=item.channel_host + "peliculas-hd/4kultrahd/")) return itemlist def submenu_novedades(item): logger.info() itemlist = [] itemlist_alt = [] data = '' timeout_search=timeout * 2 #Más tiempo para Novedades, que es una búsqueda thumb_settings = get_thumb("setting_0.png") #Establecer los valores del .json por si se entra directamente desde un favorito item.channel_host = host item.url = host + "ultimas-descargas/" item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() item.extra = "novedades" if channel_clone_name == "*** DOWN ***": #Ningún clones activo !!! itemlist.append(item.clone(action='', title="[COLOR yellow]Ningún canal NewPct1 activo[/COLOR]")) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos y salimos try: data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, timeout=timeout_search).data) except: pass patron = '
    .*?