diff --git a/plugin.video.alfa/channels/danimados.py b/plugin.video.alfa/channels/danimados.py index 1c07a152..62a65bb9 100644 --- a/plugin.video.alfa/channels/danimados.py +++ b/plugin.video.alfa/channels/danimados.py @@ -12,7 +12,7 @@ from core.item import Item from platformcode import config, logger from channels import autoplay -host = "http://www.danimados.com/" +host = "https://www.danimados.com/" list_servers = ['openload', 'okru', @@ -48,12 +48,13 @@ def sub_search(item): logger.info() itemlist = [] data = httptools.downloadpage(item.url).data - patron = 'class="thumbnail animation-.*?href="([^"]+).*?' + patron = '(?s)class="thumbnail animation-.*?href="([^"]+).*?' patron += 'img src="([^"]+).*?' patron += 'alt="([^"]+).*?' - patron += 'class="year">(\d{4})' + patron += 'class="meta"(.*?)class="contenido"' matches = scrapertools.find_multiple_matches(data, patron) for scrapedurl, scrapedthumbnail, scrapedtitle, scrapedyear in matches: + scrapedyear = scrapertools.find_single_match(scrapedyear, 'class="year">(\d{4})') item.action = "findvideos" item.contentTitle = scrapedtitle item.contentSerieName = "" @@ -95,7 +96,7 @@ def mainpage(item): itemlist.append( Item(channel=item.channel, title=scrapedtitle, url=scrapedurl, thumbnail=scrapedthumbnail, action="episodios", show=scrapedtitle)) - tmdb.set_infoLabels(itemlist) + tmdb.set_infoLabels(itemlist) return itemlist return itemlist @@ -171,12 +172,14 @@ def findvideos(item): id = scrapertools.find_single_match(url, 'iframe/(.*)') url = url.replace(id, base64.b64encode(id)) new_data = httptools.downloadpage(url).data - url = scrapertools.find_single_match(new_data, "sources: \[\{file:'([^']+)") - if "zkstream" in url: + new_data = new_data.replace('"',"'") + url = scrapertools.find_single_match(new_data, "sources:\s*\[\{file:\s*'([^']+)") + if "zkstream" in url or "cloudup" in url: url1 = httptools.downloadpage(url, follow_redirects=False, only_headers=True).headers.get("location", "") else: url1 = url - itemlist.append(item.clone(title='%s',url=url1, action="play")) + if url1: + itemlist.append(item.clone(title='%s',url=url1, action="play")) tmdb.set_infoLabels(itemlist) itemlist = servertools.get_servers_itemlist(itemlist, lambda i: i.title % i.server.capitalize()) if config.get_videolibrary_support() and len(itemlist) > 0 and item.contentType=="movie" and item.contentChannel!='videolibrary': diff --git a/plugin.video.alfa/channels/megadede.json b/plugin.video.alfa/channels/megadede.json new file mode 100644 index 00000000..03d3cb52 --- /dev/null +++ b/plugin.video.alfa/channels/megadede.json @@ -0,0 +1,85 @@ +{ + "id": "megadede", + "name": "Megadede", + "active": true, + "adult": false, + "language": ["cast"], + "thumbnail": "https://i.postimg.cc/L5pNtXdS/megadede1.png", + "banner": "", + "categories": [ + "movie", + "tvshow" + ], + "settings": [ + { + "id": "megadedeuser", + "type": "text", + "label": "@30014", + "enabled": true, + "visible": true + }, + { + "id": "megadedepassword", + "type": "text", + "hidden": true, + "label": "@30015", + "enabled": "!eq(-1,'')", + "visible": true + }, + { + "id": "include_in_global_search", + "type": "bool", + "label": "Incluir en busqueda global", + "default": false, + "enabled": "!eq(-1,'') + !eq(-2,'')", + "visible": true + }, + { + "id": "megadedesortlinks", + "type": "list", + "label": "Ordenar enlaces", + "default": 0, + "enabled": true, + "visible": "!eq(-2,'') + !eq(-3,'')", + "lvalues": [ + "No", + "Por no Reportes", + "Por Idioma", + "Por Calidad", + "Por Idioma y Calidad", + "Por Idioma y no Reportes", + "Por Idioma, Calidad y no Reportes" + ] + }, + { + "id": "megadedeshowlinks", + "type": "list", + "label": "Mostrar enlaces", + "default": 0, + "enabled": true, + "visible": "!eq(-3,'') + !eq(-4,'')", + "lvalues": [ + "Todos", + "Ver online", + "Descargar" + ] + }, + { + "id": "megadedenumberlinks", + "type": "list", + "label": "Limitar número de enlaces", + "default": 0, + "enabled": true, + "visible": "!eq(-4,'') + !eq(-5,'')", + "lvalues": [ + "No", + "5", + "10", + "15", + "20", + "25", + "30" + ] + } + ] +} diff --git a/plugin.video.alfa/channels/megadede.py b/plugin.video.alfa/channels/megadede.py new file mode 100644 index 00000000..d7ed7feb --- /dev/null +++ b/plugin.video.alfa/channels/megadede.py @@ -0,0 +1,816 @@ +# -*- coding: utf-8 -*- + +import os +import re +import sys +import urlparse +from time import sleep + +from core import channeltools +from core import httptools +from core import jsontools +from core import scrapertools +from core import servertools +from core.item import Item +from platformcode import config, logger +from platformcode import platformtools + +host = 'https://www.megadede.com' +__channel__ = 'megadede' +parameters = channeltools.get_channel_parameters(__channel__) +fanart_host = parameters['fanart'] +thumbnail_host = parameters['thumbnail'] +color1, color2, color3 = ['0xFFB10021', '0xFFB10021', '0xFFB10004'] + + +def login(): + url_origen = host+"/login?popup=1" + try: + data = httptools.downloadpage(url_origen).data + except: + data = httptools.downloadpage(url_origen, follow_redirects=False).data + if '' in data: + return True + token = scrapertools.find_single_match(data, '') + imagen_data = httptools.downloadpage(captcha_url).data + ficheropng = os.path.join(config.get_data_path(), "captcha_megadede.png") + outfile=open(ficheropng,'wb') + outfile.write(imagen_data) + outfile.close() + img = xbmcgui.ControlImage(450,15,400,130,ficheropng) + wdlg = xbmcgui.WindowDialog() + wdlg.addControl(img) + wdlg.show() + sleep(1) + kb = platformtools.dialog_numeric(0, "Escribe los números de la imagen") + + postcaptcha = "" + if kb !='': + solution = kb + postcaptcha = "&captcha=" + str(solution) + else: + return False + wdlg.close() + else: + postcaptcha="" + post = "_token=" + str(token) + "&email=" + str(config.get_setting("megadedeuser", "megadede")) + \ + "&password=" + str(config.get_setting("megadedepassword", "megadede")) + postcaptcha\ + #+ "&app=2131296469" + headers = {"User-Agent": "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko) " + "Chrome/66.0.3163.100 Safari/537.36", "Referer": host, "X-Requested-With": "XMLHttpRequest","X-CSRF-TOKEN": + token} + data = httptools.downloadpage(host+"/login", post=post, headers=headers, + replace_headers=False).data + if "redirect" in data: + return True + else: + return False + + +def mainlist(item): + logger.info() + itemlist = [] + if not config.get_setting("megadedeuser", "megadede"): + itemlist.append( + Item(channel=item.channel, title="Habilita tu cuenta en la configuración e ingresar de nuevo al canal", action="settingCanal", + url="")) + else: + result = login() + if not result: + itemlist.append(Item(channel=item.channel, action="mainlist", title="Login fallido. Volver a intentar...")) + return itemlist + item.url = host + item.fanart = fanart_host + item.thumbnail = "https://s18.postimg.cc/r5cylu6rd/12_-_oi_RDsdv.png" + itemlist.append(item.clone(title="Películas", action="menupeliculas", text_color=color3, text_blod=True)) + + item.thumbnail = "https://s18.postimg.cc/ruvqy6zl5/15_-_9m9_Dp1m.png" + itemlist.append(item.clone(title="Series", action="menuseries", text_color=color3, text_blod=True)) + + itemlist.append(item.clone(title="Listas", action="menulistas", text_color=color3, text_blod=True, thumbnail = 'https://s18.postimg.cc/xj21p46ih/10_-_Uf7e_XHE.png')) + + itemlist.append(item.clone(title="", folder=False, thumbnail=thumbnail_host)) + item.thumbnail = "" + itemlist.append(item.clone(channel=item.channel, action="settingCanal", title="Configuración...", url="", thumbnail='https://s18.postimg.cc/c9efeassp/3_-_QAHK2_Tc.png')) + return itemlist + + +def settingCanal(item): + return platformtools.show_channel_settings() + + +def menuseries(item): + logger.info() + itemlist = [] + item.url = host + item.fanart = fanart_host + item.text_color = None + item.thumbnail = "https://s18.postimg.cc/ruvqy6zl5/15_-_9m9_Dp1m.png" + itemlist.append(item.clone(action="peliculas", title=" Novedades", url= host + "/series", thumbnail='https://s18.postimg.cc/in3ihji95/11_-_WPg_H5_Kx.png')) + itemlist.append(item.clone(action="generos", title=" Por géneros", url= host + "/series", thumbnail='https://s18.postimg.cc/p0slktaah/5_-_c_Nf_KRvm.png')) + itemlist.append( + item.clone(action="peliculas", title=" Siguiendo", url= host + "/series/following", thumbnail='https://s18.postimg.cc/68gqh7j15/7_-_tqw_AHa5.png')) + itemlist.append(item.clone(action="peliculas", title=" Capítulos Pendientes", + url= host + "/series/mypending/0?popup=1", viewmode="movie", thumbnail='https://s18.postimg.cc/9s2o71w1l/2_-_3dbbx7_K.png')) + itemlist.append( + item.clone(action="peliculas", title=" Favoritas", url= host + "/series/favorites", thumbnail='https://s18.postimg.cc/n8zmpwynd/4_-_JGrig_Ep.png')) + itemlist.append( + item.clone(action="peliculas", title=" Pendientes", url= host + "/series/pending", thumbnail='https://s18.postimg.cc/4gnrmacix/13_-_cwl_TDog.png')) + itemlist.append(item.clone(action="peliculas", title=" Terminadas", url= host + "/series/seen", thumbnail='https://s18.postimg.cc/5vpcay0qh/17_-_M2in_Fp_O.png')) + itemlist.append( + item.clone(action="peliculas", title=" Recomendadas", url= host + "/series/recommended", thumbnail='https://s18.postimg.cc/bwn182sih/14_-_fin32_Kp.png')) + itemlist.append(item.clone(action="search", title=" Buscar...", url= host + "/series", thumbnaiil='https://s18.postimg.cc/s7n54ghvt/1_-_01_ZDYii.png')) + itemlist.append(item.clone(title="", folder=False, thumbnail=thumbnail_host)) + itemlist.append(Item(channel=item.channel, action="settingCanal", title="Configuración...", url="", thumbnail='https://s18.postimg.cc/c9efeassp/3_-_QAHK2_Tc.png')) + return itemlist + + +def menupeliculas(item): + logger.info() + itemlist = [] + item.url = host + item.fanart = fanart_host + item.text_color = None + item.thumbnail = "https://s18.postimg.cc/r5cylu6rd/12_-_oi_RDsdv.png" + itemlist.append(item.clone(action="peliculas", title=" Novedades", url= host + "/pelis", thumbnail='https://s18.postimg.cc/in3ihji95/11_-_WPg_H5_Kx.png')) + itemlist.append(item.clone(action="generos", title=" Por géneros", url= host + "/pelis", thumbnail='https://s18.postimg.cc/p0slktaah/5_-_c_Nf_KRvm.png')) + itemlist.append(item.clone(action="peliculas", title=" Solo HD", url= host + "/pelis?quality=3", thumbnail='https://s18.postimg.cc/e17e95mfd/16_-_qmqn4_Si.png')) + itemlist.append( + item.clone(action="peliculas", title=" Pendientes", url= host + "/pelis/pending", thumbnail='https://s18.postimg.cc/4gnrmacix/13_-_cwl_TDog.png')) + itemlist.append( + item.clone(action="peliculas", title=" Recomendadas", url= host + "/pelis/recommended", thumbnail='https://s18.postimg.cc/bwn182sih/14_-_fin32_Kp.png')) + itemlist.append( + item.clone(action="peliculas", title=" Favoritas", url= host + "/pelis/favorites", thumbnail='https://s18.postimg.cc/n8zmpwynd/4_-_JGrig_Ep.png')) + itemlist.append(item.clone(action="peliculas", title=" Vistas", url= host + "/pelis/seen", thumbnail='https://s18.postimg.cc/5vpcay0qh/17_-_M2in_Fp_O.png')) + itemlist.append(item.clone(action="search", title=" Buscar...", url= host + "/pelis", thumbnail='https://s18.postimg.cc/s7n54ghvt/1_-_01_ZDYii.png')) + itemlist.append(item.clone(title="", folder=False, thumbnail=thumbnail_host)) + item.thumbnail = "" + itemlist.append(item.clone(channel=item.channel, action="settingCanal", title="Configuración...", url="", thumbnail='https://s18.postimg.cc/c9efeassp/3_-_QAHK2_Tc.png')) + return itemlist + + +def menulistas(item): + logger.info() + itemlist = [] + item.url = host + item.fanart = fanart_host + item.text_color = None + itemlist.append( + item.clone(action="listas", tipo="populares", title=" Populares", url= host + "/listas", thumbnail='https://s18.postimg.cc/7aqwzrha1/8_-_3rn14_Tq.png')) + itemlist.append( + item.clone(action="listas", tipo="siguiendo", title=" Siguiendo", url= host + "/listas", thumbnail='https://s18.postimg.cc/4tf5sha89/9_-_z_F8c_UBT.png')) + itemlist.append( + item.clone(action="listas", tipo="tuslistas", title=" Tus Listas", url= host + "/listas")) + itemlist.append(item.clone(title="", folder=False, thumbnail=thumbnail_host)) + item.thumbnail = "" + itemlist.append(item.clone(channel=item.channel, action="settingCanal", title="Configuración...", url="", thumbnail='https://s18.postimg.cc/c9efeassp/3_-_QAHK2_Tc.png')) + return itemlist + + +def generos(item): + logger.info() + tipo = item.url.replace( host + "/", "") + data = httptools.downloadpage(item.url).data + data = scrapertools.find_single_match(data, + '') + patron = '' + matches = re.compile(patron, re.DOTALL).findall(data) + itemlist = [] + for id_genere, title in matches: + title = title.strip() + thumbnail = "" + plot = "" + url = host + "/" + tipo + "?genre_id=" + id_genere + itemlist.append( + Item(channel=item.channel, action="peliculas", title=title, url=url, thumbnail=thumbnail, plot=plot, + fulltitle=title)) + return itemlist + + +def search(item, texto): + logger.info() + item.tipo = item.url.replace(host + "/", "") + item.url = host + "/search/" + texto = texto.replace(" ", "-") + item.url = item.url + texto + try: + return buscar(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 buscar(item): + logger.info() + headers = {"X-Requested-With": "XMLHttpRequest"} + data = httptools.downloadpage(item.url, headers=headers).data + json_object = jsontools.load(data) + data = json_object["content"] + return parse_mixed_results(item, data) + + +def parse_mixed_results(item, data): + itemlist = [] + patron = '