# -*- coding: utf-8 -*- import re from core import httptools from core import scrapertools from core import servertools from core.item import Item from core.scrapertools import decodeHtmlentities as dhe from platformcode import logger from platformcode import config from core import tmdb from channelselector import get_thumb from channels import filtertools from channels import autoplay __comprueba_enlaces__ = config.get_setting('comprueba_enlaces', 'peliculasdk') __comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', 'peliculasdk') __adult_mode__ = config.get_setting("adult_mode") host = "http://www.peliculasdk.com" IDIOMAS = {'es': 'Español', 'la': 'Latino', 'su': 'Subtitulado', 'in': 'Inglés'} list_language = IDIOMAS.values() list_quality = ['HD-1080', 'HD-720', 'HD-320', 'BR-R', 'BR-S', 'DVD-R', 'DVD-S', 'TS-HQ', 'TS', 'CAM'] # -R:Rip, -S:Screener list_servers = ['directo', 'streamango', 'powvideo', 'datoporn', 'gamovideo', 'streamplay', 'okru', 'rapidvideo', 'openload'] def mainlist(item): logger.info() autoplay.init(item.channel, list_servers, list_quality) itemlist = [] itemlist.append(Item(channel=item.channel, title='Estrenos', action='peliculas', url= host + "/ver/estrenos/", thumbnail=get_thumb('newest', auto=True), type='movies')) itemlist.append(Item(channel=item.channel, title='Por géneros', action='section', thumbnail=get_thumb('genres', auto=True), type='movies')) itemlist.append(Item(channel=item.channel, title='Por calidades', action='section', thumbnail=get_thumb('quality', auto=True), type='movies')) itemlist.append(Item(channel=item.channel, title='Por idiomas', action='section', thumbnail=get_thumb('language', auto=True), type='movies')) if __adult_mode__ != 0: itemlist.append(Item(channel=item.channel, title='Adultos +18', action='peliculas', url= host + "/genero/adultos/", thumbnail=get_thumb('adults', auto=True), type='movies')) itemlist.append(Item(channel=item.channel, title='Buscar...', action='search', thumbnail=get_thumb('search', auto=True), type='movies')) autoplay.show_option(item.channel, itemlist) return itemlist def section(item): logger.info() itemlist=[] duplicados=[] data = httptools.downloadpage(host).data if 'Por géneros' in item.title: patron = '
  • ([^<]*)<\/a><\/li>' #
  • Acción
  • elif 'Por calidades' in item.title: patron = "
  • ([^<]*)<\/a><\/li>" #
  • HD 1080
  • elif 'Por idiomas' in item.title: patron = "
  • ([^<]*)<\/a><\/li>" #
  • Español
  • matches = re.compile(patron, re.DOTALL).findall(data) for scrapedurl, scrapedtitle in matches: if scrapedtitle not in duplicados: itemlist.append(Item(channel=item.channel, url=host + scrapedurl, title=scrapedtitle, action='peliculas', type=item.type)) duplicados.append(scrapedtitle) return itemlist def search(item, texto): logger.info() texto = texto.replace(" ", "+") item.url = host + "/index.php?s=%s&x=0&y=0" % (texto) try: return buscador(item) # Se captura la excepciÛn, para no interrumpir al buscador global si un canal falla except: import sys for line in sys.exc_info(): logger.error("%s" % line) return [] def buscador(item): logger.info() itemlist = [] data = httptools.downloadpage(item.url).data data = re.sub(r"\n|\r|\t|\s{2}| |&#.*?;", "", data) patron = 'style="position:relative"> ' patron += '' patron += '([^
    ' patron += '
    ([^<]+)
    .*?' patron += 'Audio: (.+?).*?' patron += 'Calidad: (.+?).*?' matches = scrapertools.find_multiple_matches(data, patron) for scrapedurl, scrapedthumbnail, scrapedtitle, scrapedtitleorig, scrapedlenguaje, scrapedcalidad in matches: year = scrapertools.find_single_match(scrapedtitle, '\((\d+)\)') scrapedtitle = re.sub(r"\(\d+\)", "", scrapedtitle).strip() audios = scrapertools.find_multiple_matches(scrapedlenguaje, '([^<]*)') calidad = scrapertools.find_single_match(scrapedcalidad, '([^<]*)') titulo = '%s [%s][%s]' % (scrapedtitle, ','.join([a[:3] for a in audios]), calidad) # Parece que las pelis de adultos se mezclan en la búsqueda y lo único que las diferencia es que no tienen Calidad y Audios if (calidad and audios) or __adult_mode__ != 0: itemlist.append(Item(channel=item.channel, action="findvideos", url=scrapedurl, title=titulo, contentTitle=scrapedtitle, thumbnail=scrapedthumbnail, language=audios, quality=calidad, infoLabels={'year':year} )) tmdb.set_infoLabels(itemlist) # Paginación url_next_page = scrapertools.find_single_match(data,'Siguiente »') if url_next_page: itemlist.append(item.clone(title="Siguiente >>", url=url_next_page)) return itemlist def peliculas(item): logger.info() itemlist = [] data = httptools.downloadpage(item.url).data data = re.sub(r"\n|\r|\t|\s{2}| |&#.*?;", "", data) patron = 'style="position:relative"> ' patron += '' patron += '([^
    ' patron += '
    ([^<]+)
    .*?' patron += 'Audio: (.+?).*?' patron += 'Calidad: (.+?).*?' patron += 'Género: (.+?)' matches = scrapertools.find_multiple_matches(data, patron) for scrapedurl, scrapedthumbnail, scrapedtitle, scrapedtitleorig, scrapedlenguaje, scrapedcalidad, scrapedgenero in matches: year = scrapertools.find_single_match(scrapedtitle, '\((\d+)\)') scrapedtitle = re.sub(r"\(\d+\)", "", scrapedtitle).strip() audios = scrapertools.find_multiple_matches(scrapedlenguaje, '([^<]*)') calidad = scrapertools.find_single_match(scrapedcalidad, '([^<]*)') generos = scrapertools.find_multiple_matches(scrapedgenero, '([^<]*)') titulo = '%s [%s][%s]' % (scrapedtitle, ','.join([a[:3] for a in audios]), calidad) if 'Adultos' not in generos or __adult_mode__ != 0: itemlist.append(Item(channel=item.channel, action="findvideos", url=scrapedurl, title=titulo, contentTitle=scrapedtitle, thumbnail=scrapedthumbnail, language=audios, quality=calidad, infoLabels={'year':year} )) tmdb.set_infoLabels(itemlist) # Paginación url_next_page = scrapertools.find_single_match(data,'Siguiente »') if url_next_page: itemlist.append(item.clone(title="Siguiente >>", url=url_next_page)) return itemlist def findvideos(item): logger.info() itemlist = [] data = httptools.downloadpage(item.url).data patron = '
  • \d<\/span><\/span>([^<]+)<\/span>' check = re.compile(patron, re.DOTALL).findall(data) if not check: patron = '
  • ' check = re.compile(patron, re.DOTALL).findall(data) for i, valor in enumerate(check): check[i] = [valor, '', ''] patron = '
    (.*?)
    ' matches = re.compile(patron, re.DOTALL).findall(data) servers_data_list = [] for i, match in enumerate(matches): if match[0] == check[i][0]: if '(.*?)<\/script>') if src: func, parm = scrapertools.find_single_match(src, '(.*?)\("([^"]*)"\)') servers_data_list.append([check[i][1], check[i][2], func, parm ]) # idioma, calidad, func, parm data = httptools.downloadpage(host + '/Js/videod.js').data patron = 'function (\w+)\(id\){(.*?)}' matches = re.compile(patron, re.DOTALL).findall(data) for idioma, calidad, func, parm in servers_data_list: if func == 'iframe': title = "Ver en: %s [" + idioma + "][" + calidad + "]" itemlist.append( item.clone(title=title, url=parm, action="play", thumbnail=item.category, language=idioma, quality=calidad)) else: for funcion, contenido in matches: if funcion == func: if ' 0: infoLabels = {'tmdb_id': item.infoLabels['tmdb_id'], 'title': item.fulltitle} itemlist.append(Item(channel=item.channel, title="Añadir esta película a la videoteca", action="add_pelicula_to_library", url=item.url, infoLabels=infoLabels, text_color="0xFFff6666", thumbnail='http://imgur.com/0gyYvuC.png')) itemlist = filtertools.get_links(itemlist, item, list_language) autoplay.start(itemlist, item) return itemlist def newest(categoria): logger.info() itemlist = [] item = Item() try: if categoria == 'castellano': item.url = host + "idioma/Espanol/" item.action = "peliculas" itemlist = peliculas(item) if itemlist[-1].action == "peliculas": itemlist.pop() # Se captura la excepción, para no interrumpir al canal novedades si un canal falla except: import sys for line in sys.exc_info(): logger.error("{0}".format(line)) return [] return itemlist