diff --git a/plugin.video.alfa/addon.xml b/plugin.video.alfa/addon.xml index dde43615..82140bc8 100755 --- a/plugin.video.alfa/addon.xml +++ b/plugin.video.alfa/addon.xml @@ -1,5 +1,5 @@ - + @@ -19,17 +19,17 @@ [B]Estos son los cambios para esta versión:[/B] [COLOR green][B]Canales agregados y arreglos[/B][/COLOR] - ¤ allcalidad ¤ cinecalidad - ¤ repelis ¤ cumlouder - ¤ porntrex ¤ crunchyroll - ¤ pedropolis ¤ pepecine + ¤ repelis ¤ thevid + ¤ vevio ¤ danimados + ¤ sipeliculas ¤ cinecalidad + ¤ locopelis ¤ pelisipad ¤ divxtotal ¤ elitetorrent ¤ estrenosgo ¤ grantorrent ¤ mejortorrent1 ¤ newpct1 - ¤ danimados ¤ fanpelis - ¤ repelis + ¤ tvvip ¤ zonatorrent + ¤ maxipelis24 ¤ wikiseries ¤ arreglos internos - ¤ Agradecimientos a @angedam, @chivmalev, @alaquepasa por colaborar en ésta versión + ¤ Agradecimientos a @angedam y @chivmalev por colaborar en ésta versión Navega con Kodi por páginas web para ver sus videos de manera fácil. diff --git a/plugin.video.alfa/channels/animejl.py b/plugin.video.alfa/channels/animejl.py index b02569b7..ff65b206 100644 --- a/plugin.video.alfa/channels/animejl.py +++ b/plugin.video.alfa/channels/animejl.py @@ -161,6 +161,7 @@ def findvideos(item): itemlist.extend(servertools.find_video_items(data=data)) for videoitem in itemlist: + videoitem.channel = item.channel videoitem.title = '[%s]' % videoitem.server.capitalize() return itemlist diff --git a/plugin.video.alfa/channels/cineasiaenlinea.json b/plugin.video.alfa/channels/cineasiaenlinea.json deleted file mode 100755 index 68ea28e2..00000000 --- a/plugin.video.alfa/channels/cineasiaenlinea.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "id": "cineasiaenlinea", - "name": "CineAsiaEnLinea", - "active": true, - "adult": false, - "language": ["cast", "lat"], - "thumbnail": "http://i.imgur.com/5KOU8uy.png?3", - "banner": "cineasiaenlinea.png", - "categories": [ - "movie", - "vos" - ], - "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 búsqueda global", - "default": true, - "enabled": true, - "visible": true - }, - { - "id": "include_in_newest_peliculas", - "type": "bool", - "label": "Incluir en Novedades - Películas", - "default": true, - "enabled": true, - "visible": true - }, - { - "id": "include_in_newest_terror", - "type": "bool", - "label": "Incluir en Novedades - terror", - "default": true, - "enabled": true, - "visible": true - }, - { - "id": "perfil", - "type": "list", - "label": "Perfil de color", - "default": 3, - "enabled": true, - "visible": true, - "lvalues": [ - "Sin color", - "Perfil 3", - "Perfil 2", - "Perfil 1" - ] - } - ] -} \ No newline at end of file diff --git a/plugin.video.alfa/channels/cineasiaenlinea.py b/plugin.video.alfa/channels/cineasiaenlinea.py deleted file mode 100755 index 968b9095..00000000 --- a/plugin.video.alfa/channels/cineasiaenlinea.py +++ /dev/null @@ -1,177 +0,0 @@ -# -*- coding: utf-8 -*- - -import re - -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://www.cineasiaenlinea.com/" -__channel__='cineasiaenlinea' - -try: - __modo_grafico__ = config.get_setting('modo_grafico', __channel__) -except: - __modo_grafico__ = True - -# Configuracion del canal -__perfil__ = int(config.get_setting('perfil', 'cineasiaenlinea')) - -# Fijar perfil de color -perfil = [['0xFFFFE6CC', '0xFFFFCE9C', '0xFF994D00'], - ['0xFFA5F6AF', '0xFF5FDA6D', '0xFF11811E'], - ['0xFF58D3F7', '0xFF2E9AFE', '0xFF2E64FE']] - -if __perfil__ - 1 >= 0: - color1, color2, color3 = perfil[__perfil__ - 1] -else: - color1 = color2 = color3 = "" - - -def mainlist(item): - logger.info() - itemlist = [] - - itemlist.append(item.clone(action="peliculas", title="Novedades", url=host + "archivos/peliculas", - thumbnail=get_thumb('newest', auto=True), text_color=color1,)) - itemlist.append(item.clone(action="peliculas", title="Estrenos", url=host + "archivos/estrenos", - thumbnail=get_thumb('premieres', auto=True), text_color=color1)) - itemlist.append(item.clone(action="indices", title="Por géneros", url=host, - thumbnail=get_thumb('genres', auto=True), text_color=color1)) - itemlist.append(item.clone(action="indices", title="Por país", url=host, text_color=color1, - thumbnail=get_thumb('country', auto=True))) - itemlist.append(item.clone(action="indices", title="Por año", url=host, text_color=color1, - thumbnail=get_thumb('year', auto=True))) - - itemlist.append(item.clone(title="", action="")) - itemlist.append(item.clone(action="search", title="Buscar...", text_color=color3, - thumbnail=get_thumb('search', auto=True))) - itemlist.append(item.clone(action="configuracion", title="Configurar canal...", text_color="gold", folder=False)) - - return itemlist - - -def configuracion(item): - from platformcode import platformtools - ret = platformtools.show_channel_settings() - platformtools.itemlist_refresh() - return ret - - -def search(item, texto): - logger.info() - - item.url = "%s?s=%s" % (host, texto.replace(" ", "+")) - - try: - return peliculas(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 newest(categoria): - logger.info() - itemlist = [] - item = Item() - try: - if categoria == 'peliculas': - item.url = host + "archivos/peliculas" - elif categoria == 'terror': - item.url = host + "genero/terror" - 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 - - -def peliculas(item): - logger.info() - itemlist = [] - item.text_color = color2 - - # Descarga la página - data = httptools.downloadpage(item.url).data - - patron = '

([^<]+)<.*?src="([^"]+)".*?

([^<]+)<') - elif "año" in item.title: - bloque = scrapertools.find_single_match(data, '(?i)

Peliculas por Año

(.*?)') - matches = scrapertools.find_multiple_matches(bloque, '
([^<]+)<') - - for scrapedurl, scrapedtitle in matches: - if "año" in item.title: - scrapedurl = "%sfecha-estreno/%s" % (host, scrapedurl) - itemlist.append(Item(channel=item.channel, action="peliculas", title=scrapedtitle, url=scrapedurl, - thumbnail=item.thumbnail, text_color=color3)) - - return itemlist - - -def findvideos(item): - logger.info() - data = httptools.downloadpage(item.url).data - item.infoLabels["plot"] = scrapertools.find_single_match(data, '(?i)

SINOPSIS.*?

(.*?)

') - item.infoLabels["trailer"] = scrapertools.find_single_match(data, 'src="(http://www.youtube.com/embed/[^"]+)"') - - itemlist = servertools.find_video_items(item=item, data=data) - for it in itemlist: - it.thumbnail = item.thumbnail - it.text_color = color2 - - itemlist.append(item.clone(action="add_pelicula_to_library", title="Añadir película a la videoteca")) - if item.infoLabels["trailer"]: - folder = True - if config.is_xbmc(): - folder = False - itemlist.append(item.clone(channel="trailertools", action="buscartrailer", title="Ver Trailer", folder=folder, - contextual=not folder)) - - return itemlist diff --git a/plugin.video.alfa/channels/cinecalidad.py b/plugin.video.alfa/channels/cinecalidad.py index 476b66fb..912048a7 100644 --- a/plugin.video.alfa/channels/cinecalidad.py +++ b/plugin.video.alfa/channels/cinecalidad.py @@ -324,7 +324,7 @@ def findvideos(item): url = server_url[server_id] + video_id + '.html' elif server_id == 'BitTorrent': import urllib - base_url = '%sprotect/v.php' % host + base_url = '%s/protect/v.php' % host post = {'i':video_id, 'title':item.title} post = urllib.urlencode(post) headers = {'Referer':item.url} diff --git a/plugin.video.alfa/channels/danimados.json b/plugin.video.alfa/channels/danimados.json index 0bd6230e..44d5a628 100644 --- a/plugin.video.alfa/channels/danimados.json +++ b/plugin.video.alfa/channels/danimados.json @@ -8,5 +8,15 @@ "banner": "https://imgur.com/xG5xqBq.png", "categories": [ "tvshow" + ], + "settings": [ + { + "id": "include_in_global_search", + "type": "bool", + "label": "Incluir en busqueda global", + "default": true, + "enabled": true, + "visible": true + } ] } diff --git a/plugin.video.alfa/channels/danimados.py b/plugin.video.alfa/channels/danimados.py index 32891a44..38c6e878 100644 --- a/plugin.video.alfa/channels/danimados.py +++ b/plugin.video.alfa/channels/danimados.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import re +import base64 from channelselector import get_thumb from core import httptools @@ -22,48 +23,64 @@ list_quality = ['default'] def mainlist(item): logger.info() - thumb_series = get_thumb("channels_tvshow.png") autoplay.init(item.channel, list_servers, list_quality) - itemlist = list() - itemlist.append(Item(channel=item.channel, action="mainpage", title="Categorías", url=host, thumbnail=thumb_series)) - itemlist.append(Item(channel=item.channel, action="mainpage", title="Más Populares", url=host, - thumbnail=thumb_series)) itemlist.append(Item(channel=item.channel, action="lista", title="Peliculas Animadas", url=host+"peliculas/", thumbnail=thumb_series)) + itemlist.append(Item(channel=item.channel, action="search", title="Buscar", url=host + "?s=", + thumbnail=thumb_series)) autoplay.show_option(item.channel, itemlist) return itemlist -""" def search(item, texto): logger.info() texto = texto.replace(" ","+") - item.url = item.url+texto + item.url = host + "?s=" + texto if texto!='': - return lista(item) -""" + return sub_search(item) + + +def sub_search(item): + logger.info() + itemlist = [] + data = httptools.downloadpage(item.url).data + patron = 'class="thumbnail animation-.*?href="([^"]+).*?' + patron += 'img src="([^"]+).*?' + patron += 'alt="([^"]+).*?' + patron += 'class="year">(\d{4})' + matches = scrapertools.find_multiple_matches(data, patron) + for scrapedurl, scrapedthumbnail, scrapedtitle, scrapedyear in matches: + item.action = "findvideos" + item.contentTitle = scrapedtitle + item.contentSerieName = "" + if "serie" in scrapedurl: + item.action = "episodios" + item.contentTitle = "" + item.contentSerieName = scrapedtitle + title = scrapedtitle + if scrapedyear: + item.infoLabels['year'] = int(scrapedyear) + title += " (%s)" %item.infoLabels['year'] + itemlist.append(item.clone(thumbnail = scrapedthumbnail, + title = title, + url = scrapedurl + )) + tmdb.set_infoLabels(itemlist) + return itemlist def mainpage(item): logger.info() - itemlist = [] - data1 = httptools.downloadpage(item.url).data data1 = re.sub(r"\n|\r|\t|\s{2}| ", "", data1) - if item.title=="Más Populares": - patron_sec='
(.+?)<\/ul>' - patron='([^"]+)<\/a>' #scrapedthumbnail, #scrapedurl, #scrapedtitle - if item.title=="Categorías": - patron_sec='
    (.+?)<\/ul><\/div>' - patron='([^"]+)<\/a>'#scrapedurl, #scrapedtitle - + patron_sec='
      (.+?)<\/ul><\/div>' + patron='([^"]+)<\/a>'#scrapedurl, #scrapedtitle data = scrapertools.find_single_match(data1, patron_sec) - matches = scrapertools.find_multiple_matches(data, patron) if item.title=="Géneros" or item.title=="Categorías": for scrapedurl, scrapedtitle in matches: @@ -82,11 +99,10 @@ def mainpage(item): return itemlist return itemlist + def lista(item): logger.info() - itemlist = [] - data = httptools.downloadpage(item.url).data data = re.sub(r"\n|\r|\t|\s{2}| ", "", data) if item.title=="Peliculas Animadas": @@ -114,8 +130,8 @@ def lista(item): def episodios(item): logger.info() - itemlist = [] + infoLabels = {} data = httptools.downloadpage(item.url).data data = re.sub(r"\n|\r|\t|\s{2}| ", "", data) data_lista = scrapertools.find_single_match(data, @@ -123,51 +139,52 @@ def episodios(item): show = item.title patron_caps = '.+?<\/a><\/div>
      ([^"]+)<\/div>.+?' patron_caps += '([^"]+)<\/a>' - #scrapedthumbnail,#scrapedtempepi, #scrapedurl, #scrapedtitle matches = scrapertools.find_multiple_matches(data_lista, patron_caps) for scrapedthumbnail, scrapedtempepi, scrapedurl, scrapedtitle in matches: tempepi=scrapedtempepi.split(" - ") if tempepi[0]=='Pel': tempepi[0]=0 title="{0}x{1} - ({2})".format(tempepi[0], tempepi[1].zfill(2), scrapedtitle) - itemlist.append(Item(channel=item.channel, thumbnail=scrapedthumbnail, - action="findvideos", title=title, url=scrapedurl, show=show)) - + item.infoLabels["season"] = tempepi[0] + item.infoLabels["episode"] = tempepi[1] + itemlist.append(item.clone(thumbnail=scrapedthumbnail, + action="findvideos", title=title, url=scrapedurl)) if config.get_videolibrary_support() and len(itemlist) > 0: itemlist.append(Item(channel=item.channel, title="[COLOR yellow]Añadir " + show + " a la videoteca[/COLOR]", url=item.url, action="add_serie_to_library", extra="episodios", show=show)) - - return itemlist def findvideos(item): logger.info() - import base64 - itemlist = [] - data = httptools.downloadpage(item.url).data data = re.sub(r"\n|\r|\t|\s{2}| ", "", data) data1 = scrapertools.find_single_match(data, '
      (.+?)<\/nav>?\s<\/div><\/div>') patron = "changeLink\('([^']+)'\)" matches = re.compile(patron, re.DOTALL).findall(data1) - for url64 in matches: - url =base64.b64decode(url64) - if 'danimados' in url: - new_data = httptools.downloadpage('https:'+url.replace('stream', 'stream_iframe')).data - url = scrapertools.find_single_match(new_data, ' 0 and item.contentType=="movie" and item.contentChannel!='videolibrary': itemlist.append( item.clone(channel=item.channel, title='[COLOR yellow]Añadir esta pelicula a la videoteca[/COLOR]', url=item.url, - action="add_pelicula_to_library", contentTitle=item.show)) - + action="add_pelicula_to_library")) autoplay.start(itemlist, item) return itemlist + + +def play(item): + item.thumbnail = item.contentThumbnail + return [item] diff --git a/plugin.video.alfa/channels/divxtotal.py b/plugin.video.alfa/channels/divxtotal.py index 8e1ba213..1a0deaf5 100644 --- a/plugin.video.alfa/channels/divxtotal.py +++ b/plugin.video.alfa/channels/divxtotal.py @@ -519,17 +519,35 @@ def findvideos(item): item, itemlist = generictools.post_tmdb_findvideos(item, itemlist) #Ahora tratamos los enlaces .torrent - for scrapedurl in matches: #leemos los torrents con la diferentes calidades + for scrapedurl in matches: #leemos los torrents con la diferentes calidades #Generamos una copia de Item para trabajar sobre ella item_local = item.clone() + #Buscamos si ya tiene tamaño, si no, los buscamos en el archivo .torrent + size = scrapertools.find_single_match(item_local.quality, '\s\[(\d+,?\d*?\s\w\s?[b|B])\]') + if not size: + size = generictools.get_torrent_size(item_local.url) #Buscamos el tamaño en el .torrent + if size: + item_local.title = re.sub(r'\s\[\d+,?\d*?\s\w[b|B]\]', '', item_local.title) #Quitamos size de título, si lo traía + item_local.title = '%s [%s]' % (item_local.title, size) #Agregamos size al final del título + size = size.replace('GB', 'G B').replace('Gb', 'G b').replace('MB', 'M B').replace('Mb', 'M b') + item_local.quality = re.sub(r'\s\[\d+,?\d*?\s\w\s?[b|B]\]', '', item_local.quality) #Quitamos size de calidad, si lo traía + item_local.quality = '%s [%s]' % (item_local.quality, size) #Agregamos size al final de la calidad + #Ahora pintamos el link del Torrent item_local.url = scrapedurl if host not in item_local.url and host.replace('https', 'http') not in item_local.url : item_local.url = host + item_local.url - item_local.title = '[COLOR yellow][?][/COLOR] [COLOR yellow][Torrent][/COLOR] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (item_local.quality, str(item_local.language)) #Preparamos título de Torrent - item_local.title = re.sub(r'\s\[COLOR \w+\]\[\[?\]?\]\[\/COLOR\]', '', item_local.title) #Quitamos etiquetas vacías - item_local.title = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', item_local.title) #Quitamos colores vacíos + item_local.title = '[COLOR yellow][?][/COLOR] [COLOR yellow][Torrent][/COLOR] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (item_local.quality, str(item_local.language)) + + #Preparamos título y calidad, quitamos etiquetas vacías + item_local.title = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.title) + item_local.title = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.title) + item_local.title = item_local.title.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip() + item_local.quality = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.quality) + item_local.quality = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.quality) + item_local.quality = item_local.quality.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip() + item_local.alive = "??" #Calidad del link sin verificar item_local.action = "play" #Visualizar vídeo item_local.server = "torrent" #Seridor Torrent diff --git a/plugin.video.alfa/channels/elitetorrent.py b/plugin.video.alfa/channels/elitetorrent.py index 6842c037..1a052a4a 100644 --- a/plugin.video.alfa/channels/elitetorrent.py +++ b/plugin.video.alfa/channels/elitetorrent.py @@ -171,8 +171,11 @@ def listado(item): #Limpiamos el título de la basura innecesaria title = title.replace("Dual", "").replace("dual", "").replace("Subtitulada", "").replace("subtitulada", "").replace("Subt", "").replace("subt", "").replace("Sub", "").replace("sub", "").replace("(Proper)", "").replace("(proper)", "").replace("Proper", "").replace("proper", "").replace("#", "").replace("(Latino)", "").replace("Latino", "") - title = title.replace("- HDRip", "").replace("(HDRip)", "").replace("- Hdrip", "").replace("(microHD)", "").replace("(DVDRip)", "").replace("(HDRip)", "").replace("(BR-LINE)", "").replace("(HDTS-SCREENER)", "").replace("(BDRip)", "").replace("(BR-Screener)", "").replace("(DVDScreener)", "").replace("TS-Screener", "").replace(" TS", "").replace(" Ts", "") + title = title.replace("- HDRip", "").replace("(HDRip)", "").replace("- Hdrip", "").replace("(microHD)", "").replace("(DVDRip)", "").replace("(HDRip)", "").replace("(BR-LINE)", "").replace("(HDTS-SCREENER)", "").replace("(BDRip)", "").replace("(BR-Screener)", "").replace("(DVDScreener)", "").replace("TS-Screener", "").replace(" TS", "").replace(" Ts", "").replace("temporada", "").replace("Temporada", "").replace("capitulo", "").replace("Capitulo", "") + + title = re.sub(r'(?:\d+)?x.?\s?\d+', '', title) title = re.sub(r'\??\s?\d*?\&.*', '', title).title().strip() + item_local.from_title = title #Guardamos esta etiqueta para posible desambiguación de título if item_local.extra == "peliculas": #preparamos Item para películas @@ -190,16 +193,17 @@ def listado(item): item_local.contentType = "episode" item_local.extra = "series" epi_mult = scrapertools.find_single_match(item_local.url, r'cap.*?-\d+-al-(\d+)') - item_local.contentSeason = scrapertools.find_single_match(item_local.url, r'temp.*?-(\d+)') + item_local.contentSeason = scrapertools.find_single_match(item_local.url, r'temporada-(\d+)') item_local.contentEpisodeNumber = scrapertools.find_single_match(item_local.url, r'cap.*?-(\d+)') if not item_local.contentSeason: item_local.contentSeason = scrapertools.find_single_match(item_local.url, r'-(\d+)[x|X]\d+') if not item_local.contentEpisodeNumber: item_local.contentEpisodeNumber = scrapertools.find_single_match(item_local.url, r'-\d+[x|X](\d+)') - if item_local.contentSeason < 1: - item_local.contentSeason = 1 + if not item_local.contentSeason or item_local.contentSeason < 1: + item_local.contentSeason = 0 if item_local.contentEpisodeNumber < 1: item_local.contentEpisodeNumber = 1 + item_local.contentSerieName = title if epi_mult: title = "%sx%s al %s -" % (item_local.contentSeason, str(item_local.contentEpisodeNumber).zfill(2), str(epi_mult).zfill(2)) #Creamos un título con el rango de episodios @@ -269,11 +273,11 @@ def findvideos(item): #data = unicode(data, "utf-8", errors="replace") #Añadimos el tamaño para todos - size = scrapertools.find_single_match(item.quality, '\s\[(\d+,?\d*?\s\w[b|B]s)\]') + size = scrapertools.find_single_match(item.quality, '\s\[(\d+,?\d*?\s\w\s?[b|B]s)\]') if size: item.title = re.sub('\s\[\d+,?\d*?\s\w[b|B]s\]', '', item.title) #Quitamos size de título, si lo traía item.title = '%s [%s]' % (item.title, size) #Agregamos size al final del título - item.quality = re.sub('\s\[\d+,?\d*?\s\w[b|B]s\]', '', item.quality) #Quitamos size de calidad, si lo traía + item.quality = re.sub('\s\[\d+,?\d*?\s\w\s?[b|B]s\]', '', item.quality) #Quitamos size de calidad, si lo traía patron_t = '
      Géneros.*?
      ') + patron = '
      ([^<]+)<' + elif item.cat == 'year': + data = scrapertools.find_single_match(data, '

      Año de estreno.*?

      ') + patron = 'li>([^<]+).*?<' + elif item.cat == 'quality': + data = scrapertools.find_single_match(data, '

      Calidad.*?

      ') + patron = 'li>([^<]+)<' + + matches = re.compile(patron, re.DOTALL).findall(data) + for scrapedurl , scrapedtitle in matches: + itemlist.append(Item(channel=item.channel, action='movies', title=scrapedtitle, url=scrapedurl, type='cat', first=0)) + return itemlist + +def movies(item): + logger.info() + itemlist = [] + + data = httptools.downloadpage(item.url).data + data = re.sub(r"\n|\r|\t|\s{2}| ","", data) + + patron = '
      (.*?)
      ') + + # Busca los enlaces a los videos + listavideos = servertools.findvideos(data) + + for video in listavideos: + videotitle = scrapertools.unescape(video[0]) + url = video[1] + server = video[2] + + itemlist.append(Item(channel=item.channel, action="play", server=server, title=videotitle, url=url, + thumbnail=item.thumbnail, plot=item.plot, fulltitle=item.title, folder=False)) + + # Opción "Añadir esta película a la biblioteca de KODI" + if config.get_videolibrary_support() and len(itemlist) > 0 and item.extra != 'findvideos': + itemlist.append( + Item(channel=item.channel, + title='[COLOR yellow]Añadir esta pelicula a la videoteca[/COLOR]', + url=item.url, + action="add_pelicula_to_library", + extra="findvideos", + contentTitle=item.contentTitle, + thumbnail=item.thumbnail + )) + + return itemlist diff --git a/plugin.video.alfa/channels/mejortorrent1.py b/plugin.video.alfa/channels/mejortorrent1.py index cc9966c0..feffe91b 100644 --- a/plugin.video.alfa/channels/mejortorrent1.py +++ b/plugin.video.alfa/channels/mejortorrent1.py @@ -845,18 +845,21 @@ def findvideos(item): # Poner la calidad, si es necesario if not item_local.quality: + item_local.quality = '' if scrapertools.find_single_match(data, 'Formato:<\/b>&\w+;\s?([^<]+)
      '): item_local.quality = scrapertools.find_single_match(data, 'Formato:<\/b>&\w+;\s?([^<]+)
      ') elif "hdtv" in item_local.url.lower() or "720p" in item_local.url.lower() or "1080p" in item_local.url.lower() or "4k" in item_local.url.lower(): item_local.quality = scrapertools.find_single_match(item_local.url, '.*?_([H|7|1|4].*?)\.torrent') item_local.quality = item_local.quality.replace("_", " ") - + # Extrae el tamaño del vídeo if scrapertools.find_single_match(data, 'Tama.*?:<\/b>&\w+;\s?([^<]+B)Tama.*?:<\/b>&\w+;\s?([^<]+B)
      Size:<\/strong>?\s(\d+?\.?\d*?\s\w[b|B])<\/span>') size = size.replace(".", ",") #sustituimos . por , porque Unify lo borra if not size: - size = scrapertools.find_single_match(item.quality, '\s\[(\d+,?\d*?\s\w[b|B])\]') + size = scrapertools.find_single_match(item.quality, '\s\[(\d+,?\d*?\s\w\s?[b|B])\]') + if not size: + size = generictools.get_torrent_size(item.url) #Buscamos el tamaño en el .torrent if size: item.title = re.sub(r'\s\[\d+,?\d*?\s\w[b|B]\]', '', item.title) #Quitamos size de título, si lo traía item.title = '%s [%s]' % (item.title, size) #Agregamos size al final del título size = size.replace('GB', 'G B').replace('Gb', 'G b').replace('MB', 'M B').replace('Mb', 'M b') - item.quality = re.sub(r'\s\[\d+,?\d*?\s\w[b|B]\]', '', item.quality) #Quitamos size de calidad, si lo traía + item.quality = re.sub(r'\s\[\d+,?\d*?\s\w\s?[b|B]\]', '', item.quality) #Quitamos size de calidad, si lo traía #Llamamos al método para crear el título general del vídeo, con toda la información obtenida de TMDB item, itemlist = generictools.post_tmdb_findvideos(item, itemlist) @@ -1399,8 +1401,15 @@ def findvideos(item): else: quality = item_local.quality item_local.title = '[COLOR yellow][?][/COLOR] [COLOR yellow][Torrent][/COLOR] [COLOR limegreen][%s][/COLOR] [COLOR red]%s[/COLOR]' % (quality, str(item_local.language)) #Preparamos título de Torrent - item_local.title = re.sub(r'\s\[COLOR \w+\]\[\[?\]?\]\[\/COLOR\]', '', item_local.title).strip() #Quitamos etiquetas vacías - item_local.title = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', item_local.title).strip() #Quitamos colores vacíos + + #Preparamos título y calidad, quitamos etiquetas vacías + item_local.title = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.title) + item_local.title = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.title) + item_local.title = item_local.title.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip() + quality = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', quality) + quality = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', quality) + quality = quality.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip() + item_local.alive = "??" #Calidad del link sin verificar item_local.action = "play" #Visualizar vídeo item_local.server = "torrent" #Servidor @@ -1485,9 +1494,15 @@ def findvideos(item): item_local.action = "play" item_local.server = servidor item_local.url = enlace - item_local.title = item_local.title.replace("[]", "").strip() - item_local.title = re.sub(r'\s\[COLOR \w+\]\[\[?\]?\]\[\/COLOR\]', '', item_local.title).strip() - item_local.title = re.sub(r'\s\[COLOR \w+\]\[\/COLOR\]', '', item_local.title).strip() + + #Preparamos título y calidad, quitamos etiquetas vacías + item_local.title = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.title) + item_local.title = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.title) + item_local.title = item_local.title.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip() + item_local.quality = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.quality) + item_local.quality = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.quality) + item_local.quality = item_local.quality.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip() + itemlist.append(item_local.clone()) except: @@ -1582,9 +1597,16 @@ def findvideos(item): item_local.action = "play" item_local.server = servidor item_local.url = enlace - item_local.title = parte_title.replace("[]", "").strip() - item_local.title = re.sub(r'\s\[COLOR \w+\]\[\[?\]?\]\[\/COLOR\]', '', item_local.title).strip() - item_local.title = re.sub(r'\[COLOR \w+\]-\[\/COLOR\]', '', item_local.title).strip() + item_local.title = parte_title.strip() + + #Preparamos título y calidad, quitamos etiquetas vacías + item_local.title = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.title) + item_local.title = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.title) + item_local.title = item_local.title.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip() + item_local.quality = re.sub(r'\s?\[COLOR \w+\]\[\[?\s?\]?\]\[\/COLOR\]', '', item_local.quality) + item_local.quality = re.sub(r'\s?\[COLOR \w+\]\s?\[\/COLOR\]', '', item_local.quality) + item_local.quality = item_local.quality.replace("--", "").replace("[]", "").replace("()", "").replace("(/)", "").replace("[/]", "").strip() + itemlist.append(item_local.clone()) except: diff --git a/plugin.video.alfa/channels/peliculasgratis.py b/plugin.video.alfa/channels/peliculasgratis.py index ebc98e85..696ae554 100644 --- a/plugin.video.alfa/channels/peliculasgratis.py +++ b/plugin.video.alfa/channels/peliculasgratis.py @@ -89,6 +89,7 @@ def search(item, texto): logger.info() texto = texto.replace(" ", "+") item.url = host + "/search/%s" % texto + if item.contentType == '': item.contentType = 'movie' try: return scraper(item) # Se captura la excepción, para no interrumpir al buscador global si un canal falla diff --git a/plugin.video.alfa/channels/pelisipad.py b/plugin.video.alfa/channels/pelisipad.py old mode 100755 new mode 100644 index 3d317d76..63034e92 --- a/plugin.video.alfa/channels/pelisipad.py +++ b/plugin.video.alfa/channels/pelisipad.py @@ -519,6 +519,7 @@ def findvideos(item): if item.video_urls: import random import base64 + item.video_urls.sort(key=lambda it: (it[1], random.random()), reverse=True) i = 0 actual_quality = "" @@ -534,6 +535,7 @@ def findvideos(item): title += " [COLOR green]Mirror %s[/COLOR] - %s" % (str(i + 1), item.fulltitle) url = vid % "%s" % base64.b64decode("dHQ9MTQ4MDE5MDQ1MSZtbT1NRzZkclhFand6QmVzbmxSMHNZYXhBJmJiPUUwb1dVVVgx" "WTBCQTdhWENpeU9paUE=") + url += '|User-Agent=%s' % httptools.get_user_agent itemlist.append(item.clone(title=title, action="play", url=url, video_urls="")) i += 1 diff --git a/plugin.video.alfa/channels/pelisplusco.py b/plugin.video.alfa/channels/pelisplusco.py index 7b07366a..f02deda1 100644 --- a/plugin.video.alfa/channels/pelisplusco.py +++ b/plugin.video.alfa/channels/pelisplusco.py @@ -356,7 +356,7 @@ def get_links_by_language(item, data): patron = 'data-source=(.*?)data.*?srt=(.*?)data-iframe.*?Opci.*?<.*?hidden>[^\(]\((.*?)\)' matches = re.compile(patron, re.DOTALL).findall(data) if language in IDIOMAS: - language == IDIOMAS[language] + language = IDIOMAS[language] for url, sub, quality in matches: if 'http' not in url: @@ -403,7 +403,7 @@ def findvideos(item): i.quality) ) # Requerido para FilterTools - itemlist = filtertools.get_links(video_list, item, list_language) + video_list = filtertools.get_links(video_list, item, list_language) # Requerido para AutoPlay diff --git a/plugin.video.alfa/channels/repelis.py b/plugin.video.alfa/channels/repelis.py index ca9118b4..dff9c978 100644 --- a/plugin.video.alfa/channels/repelis.py +++ b/plugin.video.alfa/channels/repelis.py @@ -9,16 +9,16 @@ from channelselector import get_thumb from channels import autoplay from channels import filtertools from core import httptools -from core import jsontools from core import scrapertools from core import servertools from core import tmdb from core.item import Item -from platformcode import config, logger +from lib import jsunpack +from platformcode import config, logger, platformtools idio = {'es-mx': 'LAT','es-es': 'ESP','en': 'VO'} -cali = {'poor': 'SD','low': 'SD','high': 'HD'} +cali = {'poor': 'SD','low': 'SD','medium': 'HD','high': 'HD'} list_language = idio.values() list_quality = ["SD","HD"] @@ -44,9 +44,17 @@ def mainlist(item): itemlist.append(Item(channel = item.channel, title = "Por género", action = "generos", url = host, extra = "Genero", thumbnail = get_thumb("genres", auto = True) )) itemlist.append(Item(channel = item.channel, title = "")) itemlist.append(Item(channel = item.channel, title = "Buscar", action = "search", url = host + "/search?term=", thumbnail = get_thumb("search", auto = True))) + itemlist.append(item.clone(title="Configurar canal...", text_color="gold", action="configuracion", folder=False)) autoplay.show_option(item.channel, itemlist) return itemlist + +def configuracion(item): + ret = platformtools.show_channel_settings() + platformtools.itemlist_refresh() + return ret + + def destacadas(item): logger.info() itemlist = [] @@ -178,12 +186,10 @@ def findvideos(item): dict = jsontools.load(bloque) urlx = httptools.downloadpage(host + dict[0]["url"]) #Para que pueda saltar el cloudflare, se tiene que descargar la página completa for datos in dict: - url1 = httptools.downloadpage(host + datos["url"], follow_redirects=False, only_headers=True).headers.get("location", "") - titulo = "Ver en: %s (" + cali[datos["quality"]] + ") (" + idio[datos["audio"]] + ")" - text_color = "white" - if "youtube" in url1: - titulo = "Ver trailer: %s" - text_color = "yellow" + url1 = datos["url"] + hostname = scrapertools.find_single_match(datos["hostname"].replace("www.",""), "(.*?)\.") + if hostname == "my": hostname = "mailru" + titulo = "Ver en: " + hostname.capitalize() + " (" + cali[datos["quality"]] + ") (" + idio[datos["audio"]] + ")" itemlist.append( item.clone(channel = item.channel, action = "play", @@ -192,7 +198,6 @@ def findvideos(item): title = titulo, url = url1 )) - itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % i.server.capitalize()) itemlist.sort(key=lambda it: (it.language, it.server)) tmdb.set_infoLabels(itemlist, __modo_grafico__) # Requerido para FilterTools @@ -217,5 +222,11 @@ def findvideos(item): def play(item): - item.thumbnail = item.contentThumbnail - return [item] + itemlist = [] + url1 = httptools.downloadpage(host + item.url, follow_redirects=False, only_headers=True).headers.get("location", "") + if "storage" in url1: + url1 = scrapertools.find_single_match(url1, "src=(.*mp4)").replace("%3A",":").replace("%2F","/") + itemlist.append(item.clone(url=url1)) + itemlist = servertools.get_servers_itemlist(itemlist) + itemlist[0].thumbnail = item.contentThumbnail + return itemlist diff --git a/plugin.video.alfa/channels/search.py b/plugin.video.alfa/channels/search.py index 73e3498a..5daecf53 100644 --- a/plugin.video.alfa/channels/search.py +++ b/plugin.video.alfa/channels/search.py @@ -143,6 +143,85 @@ def settings(item): def setting_channel(item): + if config.get_platform(True)['num_version'] >= 17.0: # A partir de Kodi 16 se puede usar multiselect, y de 17 con preselect + return setting_channel_new(item) + else: + return setting_channel_old(item) + +def setting_channel_new(item): + import channelselector, xbmcgui + from core import channeltools + + # Cargar lista de opciones (canales activos del usuario y que permitan búsqueda global) + # ------------------------ + lista = []; ids = []; lista_lang = [] + channels_list = channelselector.filterchannels('all') + for channel in channels_list: + channel_parameters = channeltools.get_channel_parameters(channel.channel) + + # No incluir si en la configuracion del canal no existe "include_in_global_search" + if not channel_parameters['include_in_global_search']: + continue + + lbl = '%s' % channel_parameters['language'] + lbl += ' %s' % ', '.join(config.get_localized_category(categ) for categ in channel_parameters['categories']) + + it = xbmcgui.ListItem(channel.title, lbl) + it.setArt({ 'thumb': channel.thumbnail, 'fanart': channel.fanart }) + lista.append(it) + ids.append(channel.channel) + lista_lang.append(channel_parameters['language']) + + # Diálogo para pre-seleccionar + # ---------------------------- + preselecciones_std = ['Modificar selección actual', 'Modificar partiendo de Todos', 'Modificar partiendo de Ninguno', 'Modificar partiendo de Castellano', 'Modificar partiendo de Latino'] + if item.action == 'setting_channel': + # Configuración de los canales incluídos en la búsqueda + preselecciones = preselecciones_std + presel_values = [1, 2, 3, 4, 5] + else: + # Llamada desde "buscar en otros canales" (se puede saltar la selección e ir directo a la búsqueda) + preselecciones = ['Buscar con la selección actual'] + preselecciones_std + presel_values = [0, 1, 2, 3, 4, 5] + + ret = platformtools.dialog_select(config.get_localized_string(59994), preselecciones) + if ret == -1: return False # pedido cancel + if presel_values[ret] == 0: return True # continuar sin modificar + elif presel_values[ret] == 3: preselect = [] + elif presel_values[ret] == 2: preselect = range(len(ids)) + elif presel_values[ret] in [4, 5]: + busca = 'cast' if presel_values[ret] == 4 else 'lat' + preselect = [] + for i, lg in enumerate(lista_lang): + if busca in lg or '*' in lg: + preselect.append(i) + else: + preselect = [] + for i, canal in enumerate(ids): + channel_status = config.get_setting('include_in_global_search', canal) + if channel_status: + preselect.append(i) + + # Diálogo para seleccionar + # ------------------------ + ret = xbmcgui.Dialog().multiselect(config.get_localized_string(59994), lista, preselect=preselect, useDetails=True) + if ret == None: return False # pedido cancel + seleccionados = [ids[i] for i in ret] + + # Guardar cambios en canales para la búsqueda + # ------------------------------------------- + for canal in ids: + channel_status = config.get_setting('include_in_global_search', canal) + if channel_status is None: channel_status = True + + if channel_status and canal not in seleccionados: + config.set_setting('include_in_global_search', False, canal) + elif not channel_status and canal in seleccionados: + config.set_setting('include_in_global_search', True, canal) + + return True + +def setting_channel_old(item): channels_path = os.path.join(config.get_runtime_path(), "channels", '*.json') channel_language = config.get_setting("channel_language", default="all") @@ -204,6 +283,7 @@ def save_settings(item, dict_values): config.set_setting("include_in_global_search", dict_values[v], v) progreso.close() + return True def cb_custom_button(item, dict_values): @@ -354,8 +434,8 @@ def do_search(item, categories=None): categories = ["Películas"] setting_item = Item(channel=item.channel, title=config.get_localized_string(59994), folder=False, thumbnail=get_thumb("search.png")) - setting_channel(setting_item) - + if not setting_channel(setting_item): + return False if categories is None: categories = [] @@ -474,8 +554,8 @@ def do_search(item, categories=None): # es compatible tanto con versiones antiguas de python como nuevas if multithread: pendent = [a for a in threads if a.isAlive()] - t = float(100) / len(pendent) - while pendent: + if len(pendent) > 0: t = float(100) / len(pendent) + while len(pendent) > 0: index = (len(threads) - len(pendent)) + 1 percentage = int(math.ceil(index * t)) diff --git a/plugin.video.alfa/channels/seriecanal.json b/plugin.video.alfa/channels/seriecanal.json index b3166f5f..e53459ae 100644 --- a/plugin.video.alfa/channels/seriecanal.json +++ b/plugin.video.alfa/channels/seriecanal.json @@ -1,7 +1,7 @@ { "id": "seriecanal", "name": "Seriecanal", - "active": true, + "active": false, "adult": false, "language": ["cast"], "thumbnail": "http://i.imgur.com/EwMK8Yd.png", diff --git a/plugin.video.alfa/channels/seriecanal.py b/plugin.video.alfa/channels/seriecanal.py index 0ac2bfb4..843966c8 100644 --- a/plugin.video.alfa/channels/seriecanal.py +++ b/plugin.video.alfa/channels/seriecanal.py @@ -4,12 +4,14 @@ import re import urllib import urlparse +from core import httptools from core import scrapertools from core import servertools +from core import tmdb from platformcode import config, logger __modo_grafico__ = config.get_setting('modo_grafico', "seriecanal") -__perfil__ = config.get_setting('perfil', "descargasmix") +__perfil__ = config.get_setting('perfil', "seriecanal") # Fijar perfil de color perfil = [['0xFFFFE6CC', '0xFFFFCE9C', '0xFF994D00'], @@ -17,23 +19,21 @@ perfil = [['0xFFFFE6CC', '0xFFFFCE9C', '0xFF994D00'], ['0xFF58D3F7', '0xFF2E9AFE', '0xFF2E64FE']] color1, color2, color3 = perfil[__perfil__] -URL_BASE = "http://www.seriecanal.com/" +host = "https://www.seriecanal.com/" def login(): logger.info() - data = scrapertools.downloadpage(URL_BASE) + data = httptools.downloadpage(host).data if "Cerrar Sesion" in data: return True, "" - usuario = config.get_setting("user", "seriecanal") password = config.get_setting("password", "seriecanal") if usuario == "" or password == "": return False, 'Regístrate en www.seriecanal.com e introduce tus datos en "Configurar Canal"' else: post = urllib.urlencode({'username': usuario, 'password': password}) - data = scrapertools.downloadpage("http://www.seriecanal.com/index.php?page=member&do=login&tarea=acceder", - post=post) + data = httptools.downloadpage(host + "index.php?page=member&do=login&tarea=acceder", post=post).data if "Bienvenid@, se ha identificado correctamente en nuestro sistema" in data: return True, "" else: @@ -44,18 +44,15 @@ def mainlist(item): logger.info() itemlist = [] item.text_color = color1 - result, message = login() if result: - itemlist.append(item.clone(action="series", title="Últimos episodios", url=URL_BASE)) + itemlist.append(item.clone(action="series", title="Últimos episodios", url=host)) itemlist.append(item.clone(action="genero", title="Series por género")) itemlist.append(item.clone(action="alfabetico", title="Series por orden alfabético")) itemlist.append(item.clone(action="search", title="Buscar...")) else: itemlist.append(item.clone(action="", title=message, text_color="red")) - itemlist.append(item.clone(action="configuracion", title="Configurar canal...", text_color="gold", folder=False)) - return itemlist @@ -68,7 +65,7 @@ def configuracion(item): def search(item, texto): logger.info() - item.url = "http://www.seriecanal.com/index.php?page=portada&do=category&method=post&category_id=0&order=" \ + item.url = host + "index.php?page=portada&do=category&method=post&category_id=0&order=" \ "C_Create&view=thumb&pgs=1&p2=1" try: post = "keyserie=" + texto @@ -85,27 +82,24 @@ def search(item, texto): def genero(item): logger.info() itemlist = [] - data = scrapertools.downloadpage(URL_BASE) + data = httptools.downloadpage(host).data data = scrapertools.find_single_match(data, '
        (.*?)
      ') - matches = scrapertools.find_multiple_matches(data, '([^"]+)
      ') for scrapedurl, scrapedtitle in matches: scrapedtitle = scrapedtitle.capitalize() - url = urlparse.urljoin(URL_BASE, scrapedurl) + url = urlparse.urljoin(host, scrapedurl) itemlist.append(item.clone(action="series", title=scrapedtitle, url=url)) - return itemlist def alfabetico(item): logger.info() itemlist = [] - data = scrapertools.downloadpage(URL_BASE) + data = httptools.downloadpage(host).data data = scrapertools.find_single_match(data, '
        (.*?)
      ') - matches = scrapertools.find_multiple_matches(data, '([^"]+)') for scrapedurl, scrapedtitle in matches: - url = urlparse.urljoin(URL_BASE, scrapedurl) + url = urlparse.urljoin(host, scrapedurl) itemlist.append(item.clone(action="series", title=scrapedtitle, url=url)) return itemlist @@ -115,45 +109,38 @@ def series(item): itemlist = [] item.infoLabels = {} item.text_color = color2 - if item.extra != "": - data = scrapertools.downloadpage(item.url, post=item.extra) + data = httptools.downloadpage(item.url, post=item.extra).data else: - data = scrapertools.downloadpage(item.url) + data = httptools.downloadpage(item.url).data data = re.sub(r"\n|\r|\t|\s{2}| ", "", data) patron = '
      ([^"]+).*?([^"]+)

      .*?' \ '

      (.*?)

      ' - matches = scrapertools.find_multiple_matches(data, patron) - for scrapedthumbnail, scrapedurl, scrapedplot, scrapedtitle, scrapedtemp, scrapedepi in matches: title = scrapedtitle + " - " + scrapedtemp + " - " + scrapedepi - url = urlparse.urljoin(URL_BASE, scrapedurl) - temporada = scrapertools.find_single_match(scrapedtemp, "(\d+)") - new_item = item.clone() - new_item.contentType = "tvshow" + url = urlparse.urljoin(host, scrapedurl) + temporada = scrapertools.find_single_match(scrapedtemp, "\d+") + episode = scrapertools.find_single_match(scrapedepi, "\d+") + #item.contentType = "tvshow" if temporada != "": - new_item.infoLabels['season'] = temporada - new_item.contentType = "season" - - logger.debug("title=[" + title + "], url=[" + url + "], thumbnail=[" + scrapedthumbnail + "]") - itemlist.append(new_item.clone(action="findvideos", title=title, fulltitle=scrapedtitle, url=url, - thumbnail=scrapedthumbnail, plot=scrapedplot, contentTitle=scrapedtitle, - context=["buscar_trailer"], show=scrapedtitle)) - - try: - from core import tmdb - tmdb.set_infoLabels_itemlist(itemlist, __modo_grafico__) - except: - pass + item.infoLabels['season'] = temporada + #item.contentType = "season" + if episode != "": + item.infoLabels['episode'] = episode + #item.contentType = "episode" + itemlist.append(item.clone(action="findvideos", title=title, url=url, + contentSerieName=scrapedtitle, + context=["buscar_trailer"])) + tmdb.set_infoLabels(itemlist) # Extra marca siguiente página next_page = scrapertools.find_single_match(data, 'Episodio - Enlaces de Descarga(.*?)') patron = '

      ([^"]+)' @@ -178,18 +163,15 @@ def findvideos(item): else: scrapedtitle = "[Torrent] " + scrapedepi scrapedtitle = scrapertools.htmlclean(scrapedtitle) - new_item.infoLabels['episode'] = scrapertools.find_single_match(scrapedtitle, "Episodio (\d+)") logger.debug("title=[" + scrapedtitle + "], url=[" + scrapedurl + "]") itemlist.append(new_item.clone(action="play", title=scrapedtitle, url=scrapedurl, server="torrent", contentType="episode")) - # Busca en la seccion online data_online = scrapertools.find_single_match(data, "Enlaces de Visionado Online(.*?)") patron = '([^"]+)' matches = scrapertools.find_multiple_matches(data_online, patron) - for scrapedurl, scrapedthumb, scrapedtitle in matches: # Deshecha enlaces de trailers scrapedtitle = scrapertools.htmlclean(scrapedtitle) @@ -200,7 +182,6 @@ def findvideos(item): new_item.infoLabels['episode'] = scrapertools.find_single_match(scrapedtitle, "Episodio (\d+)") itemlist.append(new_item.clone(action="play", title=title, url=scrapedurl, contentType="episode")) - # Comprueba si hay otras temporadas if not "No hay disponible ninguna Temporada adicional" in data: data_temp = scrapertools.find_single_match(data, '

      (.*?)') @@ -210,7 +191,7 @@ def findvideos(item): matches = scrapertools.find_multiple_matches(data_temp, patron) for scrapedurl, scrapedtitle in matches: new_item = item.clone() - url = urlparse.urljoin(URL_BASE, scrapedurl) + url = urlparse.urljoin(host, scrapedurl) scrapedtitle = scrapedtitle.capitalize() temporada = scrapertools.find_single_match(scrapedtitle, "Temporada (\d+)") if temporada != "": @@ -218,13 +199,7 @@ def findvideos(item): new_item.infoLabels['episode'] = "" itemlist.append(new_item.clone(action="findvideos", title=scrapedtitle, url=url, text_color="red", contentType="season")) - - try: - from core import tmdb - tmdb.set_infoLabels_itemlist(itemlist, __modo_grafico__) - except: - pass - + tmdb.set_infoLabels_itemlist(itemlist, __modo_grafico__) new_item = item.clone() if config.is_xbmc(): new_item.contextual = True @@ -236,7 +211,6 @@ def findvideos(item): def play(item): logger.info() itemlist = [] - if item.extra == "torrent": itemlist.append(item.clone()) else: diff --git a/plugin.video.alfa/channels/sipeliculas.py b/plugin.video.alfa/channels/sipeliculas.py index 7b4ca689..66167233 100755 --- a/plugin.video.alfa/channels/sipeliculas.py +++ b/plugin.video.alfa/channels/sipeliculas.py @@ -1,8 +1,5 @@ # -*- coding: utf-8 -*- -import re -import urlparse - from core import httptools from core import scrapertools from core import servertools @@ -12,10 +9,8 @@ from platformcode import logger host = 'http://www.sipeliculas.com' - def mainlist(item): logger.info() - itemlist = [] itemlist.append(item.clone(title="Novedades", action="lista", url=host + "/cartelera/")) itemlist.append(item.clone(title="Actualizadas", action="lista", url=host + "/peliculas-actualizadas/")) @@ -24,7 +19,6 @@ def mainlist(item): itemlist.append(item.clone(title="Año", action="menuseccion", url=host, extra="/estrenos-gratis/")) itemlist.append(item.clone(title="Alfabetico", action="alfabetica", url=host + '/mirar/')) itemlist.append(item.clone(title="Buscar", action="search", url=host + "/ver/")) - return itemlist @@ -33,7 +27,6 @@ def alfabetica(item): itemlist = [] for letra in "1abcdefghijklmnopqrstuvwxyz": itemlist.append(item.clone(title=letra.upper(), url=item.url + letra, action="lista")) - return itemlist @@ -42,7 +35,6 @@ def menuseccion(item): itemlist = [] seccion = item.extra data = httptools.downloadpage(item.url).data - if seccion == '/online/': data = scrapertools.find_single_match(data, '

      Películas por géneros

      (.*?)
        ') @@ -50,8 +42,7 @@ def menuseccion(item): elif seccion == '/estrenos-gratis/': data = scrapertools.find_single_match(data, '
          (.*?)
        ') patron = '
      • ([^<]+)
      • ' - - matches = re.compile(patron, re.DOTALL).findall(data) + matches = scrapertools.find_multiple_matches(data, patron) for scrapedurl, extra in matches: itemlist.append(Item(channel=item.channel, action='lista', title=extra, url=scrapedurl)) return itemlist @@ -64,22 +55,19 @@ def lista(item): listado = scrapertools.find_single_match(data, '
        (.*?)

        [^<]+

          (.*?)
        ') patron1 = '
      • [^<]+[^<]+[^[^<]+([^"]+)([^"]+)
      • ' - matches = matches = re.compile(patron1, re.DOTALL).findall(listado1) + matches = matches = scrapertools.find_multiple_matches(listado1, patron1) for vidId, vidUrl, vidServer, language, quality in matches: server = servertools.get_server_name(vidServer) if 'Sub' in language: @@ -109,39 +96,32 @@ def findvideos(item): itemlist.append(Item(channel=item.channel, action='play', url=vidUrl, extra=vidId, title='Ver en ' + vidServer + ' | ' + language + ' | ' + quality, thumbnail=item.thumbnail, server=server, language=language, quality=quality )) - listado2 = scrapertools.find_single_match(data, '
          (.*?)
        ') patron2 = '
      • [^[^<]+
      • ' - matches = matches = re.compile(patron2, re.DOTALL).findall(listado2) + matches = matches = scrapertools.find_multiple_matches(listado2, patron2) for vidId, vidUrl, vidServer in matches: server = servertools.get_server_name(vidServer) itemlist.append(Item(channel=item.channel, action='play', url=vidUrl, extra=vidId, title='Ver en ' + vidServer, thumbnail=item.thumbnail, server=server)) - for videoitem in itemlist: videoitem.fulltitle = item.title videoitem.folder = False - return itemlist def play(item): logger.info() itemlist = [] - - video = httptools.downloadpage(host + '/ajax.public.php', 'acc=ver_opc&f=' + item.extra).data - logger.info("video=" + video) - enlaces = servertools.findvideos(video) - if enlaces: - logger.info("server=" + enlaces[0][2]) - thumbnail = servertools.guess_server_thumbnail(video) - # Añade al listado de XBMC + data = httptools.downloadpage(item.url).data + video = scrapertools.find_single_match(data, '