From ffa3b2b785eb499d04cc79d905785c81052d59d4 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Wed, 28 Mar 2018 16:31:22 -0500 Subject: [PATCH 1/6] cinemahd: fix --- plugin.video.alfa/channels/cinemahd.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/plugin.video.alfa/channels/cinemahd.py b/plugin.video.alfa/channels/cinemahd.py index ce07e269..6d4d748d 100644 --- a/plugin.video.alfa/channels/cinemahd.py +++ b/plugin.video.alfa/channels/cinemahd.py @@ -4,6 +4,7 @@ # -*- By the Alfa Develop Group -*- import re +import urllib from channelselector import get_thumb from core import httptools from core import scrapertools @@ -58,17 +59,16 @@ def list_all(item): itemlist = [] data = get_source(item.url) - if item.section == 'alpha': patron = '\d+.*?(.*?).*?' - patron += '(\d{4}).*?Qlty>(.*?)' + patron += '(\d{4})' else: patron = '
.*?.*?'.*?\d+<.*?.*?(' - '.*?)'%option).split('-') - + scrapedurl = scrapedurl.replace('"','').replace('&','&') + data_video = get_source(scrapedurl) + url = scrapertools.find_single_match(data_video, '
.*?src=(.*?) frameborder') + opt_data = scrapertools.find_single_match(data,'%s>.*?.*?(.*?)'%option).split('-') language = opt_data[0].strip() quality = opt_data[1].strip() if url != '' and 'youtube' not in url: @@ -151,7 +150,10 @@ def findvideos(item): itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % '%s [%s] [%s]'%(i.server.capitalize(), i.language, i.quality)) - itemlist.append(trailer) + try: + itemlist.append(trailer) + except: + pass # Requerido para FilterTools itemlist = filtertools.get_links(itemlist, item, list_language) From 5080915be4abccf46f5e56af3346e9b1aac3ef96 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Wed, 28 Mar 2018 16:34:50 -0500 Subject: [PATCH 2/6] seriesdanko: fix --- plugin.video.alfa/channels/seriesdanko.py | 71 ++++++++++++++++++----- 1 file changed, 57 insertions(+), 14 deletions(-) diff --git a/plugin.video.alfa/channels/seriesdanko.py b/plugin.video.alfa/channels/seriesdanko.py index ac3c7a2b..858a1ae7 100644 --- a/plugin.video.alfa/channels/seriesdanko.py +++ b/plugin.video.alfa/channels/seriesdanko.py @@ -8,18 +8,24 @@ from core import httptools from core import scrapertools from core import servertools from core.item import Item +from core import tmdb +from channels import autoplay from platformcode import config, logger HOST = 'http://seriesdanko.to/' IDIOMAS = {'es': 'Español', 'la': 'Latino', 'vos': 'VOS', 'vo': 'VO'} list_idiomas = IDIOMAS.values() +list_servers = ['streamcloud', 'powvideo', 'gamovideo', 'streamplay', 'openload', 'flashx', 'nowvideo', 'thevideo'] CALIDADES = ['SD', 'MicroHD', 'HD/MKV'] + def mainlist(item): logger.info() + autoplay.init(item.channel, list_servers, CALIDADES) itemlist = list() + itemlist.append(Item(channel=item.channel, title="Novedades", action="novedades", url=HOST)) itemlist.append(Item(channel=item.channel, title="Más vistas", action="mas_vistas", url=HOST)) itemlist.append(Item(channel=item.channel, title="Listado Alfabético", action="listado_alfabetico", url=HOST)) @@ -27,7 +33,9 @@ def mainlist(item): itemlist.append(Item(channel=item.channel, title="Buscar...", action="search", url=urlparse.urljoin(HOST, "all.php"))) - itemlist = filtertools.show_option(itemlist, item.channel, list_idiomas, CALIDADES) + #itemlist = filtertools.show_option(itemlist, item.channel, list_idiomas, CALIDADES) + + autoplay.show_option(item.channel, itemlist) return itemlist @@ -40,7 +48,6 @@ def novedades(item): data = httptools.downloadpage(item.url).data data = re.sub(r"\n|\r|\t|\s{2}| |
|
|
|
|
|-\s", "", data) data = re.sub(r"", "", data) - logger.debug(data) patron = '
' patron += "|
|
|
|
|-\s", "", data) data = re.sub(r"", "", data) - patron = "
(.*?)
" data = scrapertools.get_match(data, patron) - - return series_seccion(item, data) + item.data = data + item.first = 0 + return series_seccion(item) def listado_completo(item): @@ -87,21 +94,37 @@ def listado_completo(item): data = re.sub(r"", "", data) patron = '
(.*?)
' data = scrapertools.get_match(data, patron) - - return series_seccion(item, data) + item.first = 0 + item.data = data + return series_seccion(item) -def series_seccion(item, data): +def series_seccion(item): logger.info() itemlist = [] + next_page = '' + data = item.data + data = data.replace('ahref', 'a href') patron = "
(.*?)" matches = re.compile(patron, re.DOTALL).findall(data) - for scrapedurl, scrapedtitle in matches: + if int(item.first)+20 < len(matches): + limit = int(item.first)+20 + next_page = limit + 1 + else: + limit = len(matches) + for scrapedurl, scrapedtitle in matches[item.first:limit]: itemlist.append(Item(channel=item.channel, action="episodios", title=scrapedtitle, show=scrapedtitle, url=urlparse.urljoin(HOST, scrapedurl), context=filtertools.context(item, list_idiomas, CALIDADES))) + tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) + #pagination + + if next_page !='': + itemlist.append(Item(channel=item.channel, action="series_seccion", title='Siguiente >>>', data=item.data, + first=next_page)) + return itemlist @@ -117,6 +140,7 @@ def listado_alfabetico(item): return itemlist + def series_por_letra(item): logger.info("letra = {0}".format(item.title)) data = httptools.downloadpage(item.url).data @@ -142,6 +166,7 @@ def search(item, texto): itemlist.append(item.clone(title=title, url=urlparse.urljoin(HOST, url), action="episodios", show=title, context=filtertools.context(item, list_idiomas, CALIDADES))) + tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) # Se captura la excepción, para no interrumpir al buscador global si un canal falla except: import sys @@ -176,18 +201,27 @@ def episodios(item): patron = "(.*?)(.*?)" matches = re.compile(patron, re.DOTALL).findall(data) + infoLabels = item.infoLabels for scrapedurl, scrapedtitle, scrapedidioma in matches: idioma = "" filter_langs = [] for i in scrapedidioma.split("|"): idioma += " [" + IDIOMAS.get(i, "OVOS") + "]" filter_langs.append(IDIOMAS.get(i, "OVOS")) - title = scrapedtitle + idioma + season_episode = scrapertools.get_season_and_episode(scrapedtitle) + title = '%s %s %s' % (season_episode, scrapedtitle, idioma) + season_episode = season_episode.split('x') + infoLabels['season'] = season_episode[0] + infoLabels['episode'] = season_episode[1] + itemlist.append(Item(channel=item.channel, title=title, url=urlparse.urljoin(HOST, scrapedurl), - action="findvideos", show=item.show, thumbnail=thumbnail, plot="", language=filter_langs)) + action="findvideos", show=item.show, thumbnail=thumbnail, plot="", language=filter_langs, + infoLabels=infoLabels)) - itemlist = filtertools.get_links(itemlist, item, list_idiomas, CALIDADES) + + #itemlist = filtertools.get_links(itemlist, item, list_idiomas, CALIDADES) + tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) # Opción "Añadir esta serie a la videoteca de XBMC" if config.get_videolibrary_support() and len(itemlist) > 0: @@ -212,6 +246,14 @@ def findvideos(item): itemlist = filtertools.get_links(itemlist, item, list_idiomas, CALIDADES) + # Requerido para FilterTools + + itemlist = filtertools.get_links(itemlist, item, list_idiomas) + + # Requerido para AutoPlay + + autoplay.start(itemlist, item) + return itemlist @@ -227,6 +269,7 @@ def parse_videos(item, tipo, data): links = re.findall(pattern, data, re.MULTILINE | re.DOTALL) for language, date, server, link, quality in links: + if quality == "": quality = "SD" title = "%s en %s [%s] [%s] (%s)" % (tipo, server, IDIOMAS.get(language, "OVOS"), quality, date) @@ -243,8 +286,8 @@ def play(item): data = httptools.downloadpage(item.url).data data = re.sub(r"\n|\r|\t|\s{2}| |
|
|
|
|
|-\s", "", data) - - patron = '' + #patron = '' + patron = '' url = scrapertools.find_single_match(data, patron) itemlist = servertools.find_video_items(data=url) From f90b24bbac2250b5e883c56487285d1fc44d1fc0 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Wed, 28 Mar 2018 16:37:01 -0500 Subject: [PATCH 3/6] doramasmp4; nuevo canal --- plugin.video.alfa/channels/doramasmp4.json | 34 ++++ plugin.video.alfa/channels/doramasmp4.py | 222 +++++++++++++++++++++ 2 files changed, 256 insertions(+) create mode 100644 plugin.video.alfa/channels/doramasmp4.json create mode 100644 plugin.video.alfa/channels/doramasmp4.py diff --git a/plugin.video.alfa/channels/doramasmp4.json b/plugin.video.alfa/channels/doramasmp4.json new file mode 100644 index 00000000..c28e266f --- /dev/null +++ b/plugin.video.alfa/channels/doramasmp4.json @@ -0,0 +1,34 @@ +{ + "id": "doramasmp4", + "name": "DoramasMP4", + "active": true, + "adult": false, + "language": [], + "thumbnail": "https://s14.postimg.org/ibh4znkox/doramasmp4.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", + "VOSE" + ] + } + ] +} \ No newline at end of file diff --git a/plugin.video.alfa/channels/doramasmp4.py b/plugin.video.alfa/channels/doramasmp4.py new file mode 100644 index 00000000..5e8c7480 --- /dev/null +++ b/plugin.video.alfa/channels/doramasmp4.py @@ -0,0 +1,222 @@ +# -*- coding: utf-8 -*- +# -*- Channel DoramasMP4 -*- +# -*- 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 jsontools +from core import tmdb +from core.item import Item +from platformcode import config, logger +from channelselector import get_thumb + +host = 'https://www.doramasmp4.com/' + +IDIOMAS = {'sub': 'VOSE'} +list_language = IDIOMAS.values() +list_quality = [] +list_servers = ['openload', 'streamango', 'netutv', 'okru', 'directo', 'mp4upload'] + +def get_source(url): + logger.info() + data = httptools.downloadpage(url).data + data = re.sub(r'"|\n|\r|\t| |
|\s{2,}', "", data) + return data + +def mainlist(item): + logger.info() + + autoplay.init(item.channel, list_servers, list_quality) + itemlist = [] + + itemlist.append(Item(channel= item.channel, title="Doramas", action="doramas_menu", + thumbnail=get_thumb('doramas', auto=True), type='dorama')) + itemlist.append(Item(channel=item.channel, title="Películas", action="list_all", + url=host + 'catalogue?type[]=pelicula', thumbnail=get_thumb('movies', auto=True), + type='movie')) + itemlist.append(Item(channel=item.channel, title = 'Buscar', action="search", url= host+'search?q=', + thumbnail=get_thumb('search', auto=True))) + + autoplay.show_option(item.channel, itemlist) + + return itemlist + +def doramas_menu(item): + logger.info() + + itemlist =[] + + itemlist.append(Item(channel=item.channel, title="Todas", action="list_all", url=host + 'catalogue', + thumbnail=get_thumb('all', auto=True), type='dorama')) + itemlist.append(Item(channel=item.channel, title="Nuevos capitulos", action="latest_episodes", + url=host + 'latest-episodes', thumbnail=get_thumb('new episodes', auto=True), type='dorama')) + return itemlist + +def list_all(item): + logger.info() + + itemlist = [] + data = get_source(item.url) + + patron = '
(.*?)' + patron += '
.*?episode>(.*?)' + matches = re.compile(patron, re.DOTALL).findall(data) + + for scrapedurl, scrapedthumbnail, scrapedtitle, scrapedep in matches: + title = '%s %s' % (scrapedtitle, scrapedep) + contentSerieName = scrapedtitle + itemlist.append(Item(channel=item.channel, action='findvideos', url=scrapedurl, thumbnail=scrapedthumbnail, + title=title, contentSerieName=contentSerieName, type='episode')) + tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) + + return itemlist + + +def episodes(item): + logger.info() + itemlist = [] + data = get_source(item.url) + patron = '' + + matches = re.compile(patron, re.DOTALL).findall(data) + infoLabels = item.infoLabels + + for scrapedurl, scrapedtitle, scrapedep in matches: + url = scrapedurl + contentEpisodeNumber = scrapedep + + infoLabels['season'] = 1 + infoLabels['episode'] = contentEpisodeNumber + + if scrapedtitle != '': + title = scrapedtitle + else: + title = 'episodio %s' % scrapedep + + infoLabels = item.infoLabels + + itemlist.append(Item(channel=item.channel, action="findvideos", title=title, url=url, + contentEpisodeNumber=contentEpisodeNumber, type='episode', infoLabels=infoLabels)) + + tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) + return itemlist + +def findvideos(item): + logger.info() + + itemlist = [] + duplicated = [] + data = get_source(item.url) + if item.type !='episode' and '' not in data: + item.type = 'dorama' + item.contentSerieName = item.contentTitle + item.contentTitle = '' + return episodes(item) + else: + itemlist.extend(servertools.find_video_items(data=data)) + for video_item in itemlist: + if 'sgl.php' in video_item.url: + headers = {'referer': item.url} + patron_gvideo = "'file':'(.*?)','type'" + data_gvideo = httptools.downloadpage(video_item.url, headers=headers).data + video_item.url = scrapertools.find_single_match(data_gvideo, patron_gvideo) + + duplicated.append(video_item.url) + video_item.channel = item.channel + video_item.infoLabels = item.infoLabels + video_item.language=IDIOMAS['sub'] + + patron = 'var item = {id: (\d+), episode: (\d+),' + matches = re.compile(patron, re.DOTALL).findall(data) + + for id, episode in matches: + data_json=jsontools.load(httptools.downloadpage(host+'/api/stream/?id=%s&episode=%s' %(id, episode)).data) + sources = data_json['options'] + for src in sources: + url = sources[src] + + if 'sgl.php' in url: + headers = {'referer':item.url} + patron_gvideo = "'file':'(.*?)','type'" + data_gvideo = httptools.downloadpage(url, headers = headers).data + url = scrapertools.find_single_match(data_gvideo, patron_gvideo) + + new_item = Item(channel=item.channel, title='%s', url=url, language=IDIOMAS['sub'], action='play', + infoLabels=item.infoLabels) + if url != '' and url not in duplicated: + itemlist.append(new_item) + duplicated.append(url) + try: + itemlist = servertools.get_servers_itemlist(itemlist, lambda x: x.title % x.server.capitalize()) + except: + pass + + + # Requerido para FilterTools + + itemlist = filtertools.get_links(itemlist, item, list_language) + + # Requerido para AutoPlay + + autoplay.start(itemlist, item) + + return itemlist + + +def search(item, texto): + logger.info() + texto = texto.replace(" ", "+") + item.url = item.url + texto + item.type = 'search' + if texto != '': + return list_all(item) From b1cf39c8ac5f468f4f773eea702d905249b6c8d3 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Wed, 28 Mar 2018 16:38:59 -0500 Subject: [PATCH 4/6] pelisplus: fix --- plugin.video.alfa/channels/pelisplus.py | 628 ++++++++---------------- 1 file changed, 195 insertions(+), 433 deletions(-) diff --git a/plugin.video.alfa/channels/pelisplus.py b/plugin.video.alfa/channels/pelisplus.py index fefe287d..48c408c4 100644 --- a/plugin.video.alfa/channels/pelisplus.py +++ b/plugin.video.alfa/channels/pelisplus.py @@ -7,18 +7,14 @@ from channels import filtertools from core import httptools from core import scrapertools from core import tmdb +from core import jsontools from core.item import Item from platformcode import config, logger +from channelselector import get_thumb from core import servertools host = "http://www.pelisplus.tv/" -headers = [['User-Agent', 'Mozilla/50.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0'], - ['Referer', host]] - -patrones = ['.*?', - 'Sinopsis:<\/span>.([^<]+)<\/span>.<\/p>'] - IDIOMA = {'latino': 'Latino'} list_language = IDIOMA.values() @@ -36,6 +32,13 @@ list_servers = [ ] +def get_source(url): + + logger.info() + data = httptools.downloadpage(url).data + data = re.sub(r'"|\n|\r|\t| |
|\s{2,}', "", data) + return data + def mainlist(item): logger.info() @@ -44,100 +47,218 @@ def mainlist(item): itemlist.append( item.clone(title="Peliculas", - action="menupeliculas", - thumbnail='https://s8.postimg.org/6wqwy2c2t/peliculas.png', - fanart='https://s8.postimg.org/6wqwy2c2t/peliculas.png', - extra='peliculas/' + action="sub_menu", + thumbnail=get_thumb('movies', auto=True), )) itemlist.append( item.clone(title="Series", - action="menuseries", - thumbnail='https://s27.postimg.org/iahczwgrn/series.png', - fanart='https://s27.postimg.org/iahczwgrn/series.png', - extra='peliculas/' + action="sub_menu", + thumbnail=get_thumb('tvshows', auto=True), )) itemlist.append( - item.clone(title="Documentales", - action="lista", - url=host + 'documentales/pag-1', - thumbnail='https://s16.postimg.org/7xjj4bmol/documental.png', - fanart='https://s16.postimg.org/7xjj4bmol/documental.png', - extra='documentales/' - )) + item.clone(title="Buscar", action="search", url=host + 'busqueda/?s=', + thumbnail=get_thumb('search', auto=True), + )) autoplay.show_option(item.channel, itemlist) return itemlist -def menupeliculas(item): +def sub_menu(item): logger.info() itemlist = [] + content = item.title.lower() itemlist.append(item.clone(title="Todas", - action="lista", - url=host + 'peliculas/pag-1', - thumbnail='https://s18.postimg.org/fwvaeo6qh/todas.png', - fanart='https://s18.postimg.org/fwvaeo6qh/todas.png', - extra='peliculas/' - )) - - itemlist.append(item.clone(title="Ultimas", - action="lista", - url=host + 'estrenos/pag-1', - thumbnail='https://s22.postimg.org/cb7nmhwv5/ultimas.png', - fanart='https://s22.postimg.org/cb7nmhwv5/ultimas.png', - extra='estrenos/' + action="list_all", + url=host + '%s/ultimas-%s/' % (content, content), + thumbnail=get_thumb('all', auto=True), )) itemlist.append(item.clone(title="Generos", action="generos", - url=host + 'peliculas/pag-1', - thumbnail='https://s3.postimg.org/5s9jg2wtf/generos.png', - fanart='https://s3.postimg.org/5s9jg2wtf/generos.png', - extra='documentales/' - )) - - itemlist.append(item.clone(title="Buscar", - action="search", - url=host + 'busqueda/?s=', - thumbnail='https://s30.postimg.org/pei7txpa9/buscar.png', - fanart='https://s30.postimg.org/pei7txpa9/buscar.png', - extra='peliculas/' + url=host + '%s/' % content, + thumbnail=get_thumb('genres', auto=True), )) return itemlist -def menuseries(item): +def list_all(item): + logger.info() + + itemlist=[] + + data = get_source(item.url) + patron = '(?:|Posters>)') + if next_page != '': + itemlist.append(item.clone(action="list_all", + title='Siguiente >>>', + url=host+next_page, + thumbnail='https://s32.postimg.org/4zppxf5j9/siguiente.png' + )) + return itemlist + + +def generos(item): + logger.info() itemlist = [] + data = get_source(item.url) + if 'series' not in item.url: + clean_genre = 'PELÍCULAS DE' + else: + clean_genre = 'SERIES DE' - itemlist.append(item.clone(title="Todas", - action="lista", - url=host + "series/pag-1", - thumbnail='https://s18.postimg.org/fwvaeo6qh/todas.png', - fanart='https://s18.postimg.org/fwvaeo6qh/todas.png', - extra='series/' - )) + patron = '