diff --git a/plugin.video.alfa/channels/danimados.py b/plugin.video.alfa/channels/danimados.py index a3df1ecb..32891a44 100644 --- a/plugin.video.alfa/channels/danimados.py +++ b/plugin.video.alfa/channels/danimados.py @@ -143,52 +143,27 @@ def episodios(item): 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><\/div><\/div>') - patron='src="(.+?)"' - itemla = scrapertools.find_multiple_matches(data1,patron) - if "favicons?domain" in itemla[0]: - method = 1 - data2=scrapertools.find_single_match(data, "var \$user_hashs = {(.+?)}") - patron='".+?":"(.+?)"' - itemla = scrapertools.find_multiple_matches(data2,patron) - else: - method = 0 - for i in range(len(itemla)): - if method==0: - url=itemla[i] - else: - import base64 - b=base64.b64decode(itemla[i]) - url=b.decode('utf8') - #verificar existencia del video (testing) - codigo=verificar_video(itemla[i]) - if codigo==200: - if "ok.ru" in url: - server='okru' - else: - server='' - if "youtube" in url: - server='youtube' - if "openload" in url: - server='openload' - if "google" in url: - server='gvideo' - if "rapidvideo" in url: - server='rapidvideo' - if "streamango" in url: - server='streamango' - if server!='': - title="Enlace encontrado en %s " % (server.capitalize()) - else: - title="NO DISPONIBLE" - if title!="NO DISPONIBLE": - itemlist.append(item.clone(title=title,url=url, action="play", server=server)) + '
(.+?)<\/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, @@ -196,18 +171,3 @@ def findvideos(item): autoplay.start(itemlist, item) return itemlist - - -def verificar_video(url): - codigo=httptools.downloadpage(url).code - if codigo==200: - # Revise de otra forma - data=httptools.downloadpage(url).data - removed = scrapertools.find_single_match(data,'removed(.+)') - if len(removed) != 0: - codigo1=404 - else: - codigo1=200 - else: - codigo1=200 - return codigo1 diff --git a/plugin.video.alfa/channels/diskokosmiko.json b/plugin.video.alfa/channels/diskokosmiko.json new file mode 100644 index 00000000..0844956a --- /dev/null +++ b/plugin.video.alfa/channels/diskokosmiko.json @@ -0,0 +1,64 @@ +{ + "id": "diskokosmiko", + "name": "Diskokosmiko", + "language": ["cast", "lat"], + "active": true, + "adult": false, + "version": 1, + "thumbnail": "http://i.imgur.com/EjbfM7p.png?1", + "banner": "copiapop.png", + "categories": [ + "movie", + "tvshow" + ], + "settings": [ + { + "id": "include_in_global_search", + "type": "bool", + "label": "Incluir en busqueda global", + "default": false, + "enabled": true, + "visible": true + }, + { + "id": "diskokosmikouser", + "type": "text", + "color": "0xFFC52020", + "label": "Usuario Diskokosmiko", + "enabled": true, + "visible": true + }, + { + "id": "diskokosmikopassword", + "type": "text", + "color": "0xFFC52020", + "hidden": true, + "label": "Password Diskokosmiko", + "enabled": "!eq(-1,'')", + "visible": true + }, + { + "id": "adult_content", + "type": "bool", + "color": "0xFFd50b0b", + "label": "Mostrar contenido adulto en las búsquedas", + "default": false, + "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/diskokosmiko.py b/plugin.video.alfa/channels/diskokosmiko.py new file mode 100644 index 00000000..e73f9f48 --- /dev/null +++ b/plugin.video.alfa/channels/diskokosmiko.py @@ -0,0 +1,366 @@ +# -*- coding: utf-8 -*- + +import re +import threading +import urllib +import xbmc + +from core import downloadtools +from core import filetools +from core import httptools +from core import jsontools +from core import scrapertools +from core.item import Item +from platformcode import config, logger +from platformcode import platformtools + +__perfil__ = config.get_setting('perfil', "diskokosmiko") + +# Fijar perfil de color +perfil = [['0xFFFFE6CC', '0xFFFFCE9C', '0xFF994D00', '0xFFFE2E2E', '0xFF088A08'], + ['0xFFA5F6AF', '0xFF5FDA6D', '0xFF11811E', '0xFFFE2E2E', '0xFF088A08'], + ['0xFF58D3F7', '0xFF2E9AFE', '0xFF2E64FE', '0xFFFE2E2E', '0xFF088A08']] + +if __perfil__ - 1 >= 0: + color1, color2, color3, color4, color5 = perfil[__perfil__ - 1] +else: + color1 = color2 = color3 = color4 = color5 = "" + +adult_content = config.get_setting("adult_content", "diskokosmiko") + + +def login(pagina): + logger.info() + try: + dom = pagina.split(".")[0] + user = config.get_setting("%suser" %dom, "diskokosmiko") + password = config.get_setting("%spassword" %dom, "diskokosmiko") + if not user: + return False, "Para ver los enlaces de %s es necesario registrarse en %s" %(dom, pagina) + data = httptools.downloadpage("http://%s" % pagina).data + if re.search(r'(?i)%s' % user, data): + return True, "" + token = scrapertools.find_single_match(data, 'name="__RequestVerificationToken".*?value="([^"]+)"') + post = "__RequestVerificationToken=%s&UserName=%s&Password=%s" % (token, user, password) + headers = {'X-Requested-With': 'XMLHttpRequest'} + url_log = "http://%s/action/Account/Login" % pagina + data = httptools.downloadpage(url_log, post, headers).data + if "redirectUrl" in data: + logger.info("Login correcto") + return True, "" + else: + logger.error("Error en el login") + return False, "Nombre de usuario no válido. Comprueba tus credenciales" + except: + import traceback + logger.error(traceback.format_exc()) + return False, "Error durante el login. Comprueba tus credenciales" + + +def mainlist(item): + logger.info() + itemlist = [] + item.text_color = color1 + logueado, error_message = login("diskokosmiko.mx") + if not logueado: + itemlist.append(item.clone(title=error_message, action="configuracion", folder=False)) + else: + item.extra = "http://diskokosmiko.mx/" + itemlist.append(item.clone(title="DiskoKosmiko", action="", text_color=color2)) + itemlist.append(item.clone(title=" Búsqueda", action="search", url="http://diskokosmiko.mx/action/SearchFiles")) + itemlist.append(item.clone(title=" Colecciones", action="colecciones", + url="http://diskokosmiko.mx/action/home/MoreNewestCollections?pageNumber=1")) + itemlist.append(item.clone(title=" Búsqueda personalizada", action="filtro", + url="http://diskokosmiko.mx/action/SearchFiles")) + itemlist.append(item.clone(title=" Mi cuenta", action="cuenta")) + itemlist.append(item.clone(action="", title="")) + folder_thumb = filetools.join(config.get_data_path(), 'thumbs_disko') + files = filetools.listdir(folder_thumb) + if files: + itemlist.append( + item.clone(title="Eliminar caché de imágenes (%s)" % len(files), action="delete_cache", text_color="red")) + itemlist.append(item.clone(title="Configuración del canal", action="configuracion", text_color="gold")) + return itemlist + + +def search(item, texto): + logger.info() + item.post = "Mode=List&Type=Video&Phrase=%s&SizeFrom=0&SizeTo=0&Extension=&ref=pager&pageNumber=1" % texto.replace( + " ", "+") + try: + return listado(item) + except: + import sys, traceback + for line in sys.exc_info(): + logger.error("%s" % line) + logger.error(traceback.format_exc()) + return [] + + +def configuracion(item): + ret = platformtools.show_channel_settings() + platformtools.itemlist_refresh() + return ret + + +def listado(item): + logger.info() + itemlist = [] + data_thumb = httptools.downloadpage(item.url, item.post.replace("Mode=List", "Mode=Gallery")).data + if not item.post: + data_thumb = "" + item.url = item.url.replace("/gallery,", "/list,") + data = httptools.downloadpage(item.url, item.post).data + data = re.sub(r"\n|\r|\t|\s{2}| |
", "", data) + + folder = filetools.join(config.get_data_path(), 'thumbs_disko') + patron = 'data-file-id(.*?

)
' + bloques = scrapertools.find_multiple_matches(data, patron) + for block in bloques: + if "adult_info" in block and not adult_content: + continue + size = scrapertools.find_single_match(block, '([^<]+)

') + patron = 'class="name">([^<]+)<' + scrapedurl, scrapedtitle = scrapertools.find_single_match(block, patron) + scrapedthumbnail = scrapertools.find_single_match(block, "background-image:url\('([^']+)'") + if scrapedthumbnail: + try: + thumb = scrapedthumbnail.split("-", 1)[0].replace("?", "\?") + if data_thumb: + url_thumb = scrapertools.find_single_match(data_thumb, "(%s[^']+)'" % thumb) + else: + url_thumb = scrapedthumbnail + scrapedthumbnail = filetools.join(folder, "%s.jpg" % url_thumb.split("e=", 1)[1][-20:]) + except: + scrapedthumbnail = "" + if scrapedthumbnail: + t = threading.Thread(target=download_thumb, args=[scrapedthumbnail, url_thumb]) + t.setDaemon(True) + t.start() + else: + scrapedthumbnail = item.extra + "/img/file_types/gallery/movie.png" + scrapedurl = item.extra + scrapedurl + title = "%s (%s)" % (scrapedtitle, size) + if "adult_info" in block: + title += " [COLOR %s][+18][/COLOR]" % color4 + plot = scrapertools.find_single_match(block, '
(.*?)
') + if plot: + plot = scrapertools.decodeHtmlentities(plot) + new_item = Item(channel=item.channel, action="findvideos", title=title, url=scrapedurl, + thumbnail=scrapedthumbnail, contentTitle=scrapedtitle, text_color=color2, + extra=item.extra, infoLabels={'plot': plot}, post=item.post) + if item.post: + try: + new_item.folderurl, new_item.foldername = scrapertools.find_single_match(block, + '

([^<]+)<') + except: + pass + else: + new_item.folderurl = item.url.rsplit("/", 1)[0] + new_item.foldername = item.foldername + new_item.fanart = item.thumbnail + itemlist.append(new_item) + next_page = scrapertools.find_single_match(data, 'class="pageSplitter.*?" data-nextpage-number="([^"]+)"') + if next_page: + if item.post: + post = re.sub(r'pageNumber=(\d+)', "pageNumber=" + next_page, item.post) + url = item.url + else: + url = re.sub(r',\d+\?ref=pager', ",%s?ref=pager" % next_page, item.url) + post = "" + itemlist.append(Item(channel=item.channel, action="listado", title=">> Página Siguiente (%s)" % next_page, + url=url, post=post, extra=item.extra)) + return itemlist + + +def findvideos(item): + logger.info() + itemlist = [] + itemlist.append(item.clone(action="play", title="Reproducir/Descargar", server="diskokosmiko")) + usuario = scrapertools.find_single_match(item.url, '%s/([^/]+)/' % item.extra) + url_usuario = item.extra + "/" + usuario + if item.folderurl and not item.folderurl.startswith(item.extra): + item.folderurl = item.extra + item.folderurl + if item.post: + itemlist.append(item.clone(action="listado", title="Ver colección: %s" % item.foldername, + url=item.folderurl + "/gallery,1,1?ref=pager", post="")) + data = httptools.downloadpage(item.folderurl).data + token = scrapertools.find_single_match(data, + 'data-action="followChanged.*?name="__RequestVerificationToken".*?value="([^"]+)"') + collection_id = item.folderurl.rsplit("-", 1)[1] + post = "__RequestVerificationToken=%s&collectionId=%s" % (token, collection_id) + url = "%s/action/Follow/Follow" % item.extra + title = "Seguir Colección: %s" % item.foldername + if "dejar de seguir" in data: + title = "Dejar de seguir la colección: %s" % item.foldername + url = "%s/action/Follow/UnFollow" % item.extra + itemlist.append(item.clone(action="seguir", title=title, url=url, post=post, text_color=color5, folder=False)) + itemlist.append( + item.clone(action="colecciones", title="Ver colecciones del usuario: %s" % usuario, url=url_usuario)) + return itemlist + + +def colecciones(item): + logger.info() + itemlist = [] + usuario = False + data = httptools.downloadpage(item.url).data + if "Ver colecciones del usuario" not in item.title and not item.index: + data = jsontools.load(data)["Data"] + content = data["Content"] + content = re.sub(r"\n|\r|\t|\s{2}| |
", "", content) + else: + usuario = True + if item.follow: + content = scrapertools.find_single_match(data, + 'id="followed_collections"(.*?)