# -*- coding: utf-8 -*- # -*- Channel PelisPlus.co -*- # -*- Created for Alfa-addon -*- # -*- By the Alfa Develop Group -*- import re import urllib from platformcode import logger from platformcode import config from core import jsontools from core import scrapertools from core.item import Item from core import servertools from core import httptools from core import tmdb host = 'http://pelisplus.co' CHANNEL_HEADERS = [ ["Host", host.replace("http://","")], ["X-Requested-With", "XMLHttpRequest"] ] def mainlist(item): logger.info() itemlist = [] itemlist.append(item.clone(title="Peliculas", action="movie_menu", )) itemlist.append(item.clone(title="Series", action="series_menu", )) return itemlist def movie_menu(item): logger.info() itemlist = [] itemlist.append(item.clone(title="Estrenos", action="list_all", url = host+'/estrenos/', type = 'normal' )) itemlist.append(item.clone(title="Generos", action="seccion", url=host, seccion='generos' )) itemlist.append(item.clone(title="Por Año", action="seccion", url=host, seccion='anios' )) itemlist.append(item.clone(title="Buscar", action="search", url=host + "/suggest/?query=", type="m", seccion='buscar' )) return itemlist def search(item, texto): logger.info() if not item.type: item.type = "m" item.url = host + "/suggest/?query=" item.url = item.url + texto if texto != '': return sub_search(item) else: return [] def sub_search(item): logger.info() itemlist =[] headers = {'Referer':host, 'X-Requested-With': 'XMLHttpRequest'} data = httptools.downloadpage(item.url, headers=headers).data dict_data = jsontools.load(data) list =dict_data["data"] [item.type] if item.type == "m": action = "findvideos" else: action = "seasons" for dict in list: itemlist.append(item.clone(channel = item.channel, action = action, fulltitle = dict["title"], show = dict["title"], infoLabels={"year":dict["release_year"]}, thumbnail = "http://static.pelisfox.tv/static/movie/" + dict["cover"], title = dict["title"] + " (" + dict["release_year"] + ")", url = host + dict["slug"] )) tmdb.set_infoLabels(itemlist) return itemlist def series_menu(item): logger.info() itemlist =[] itemlist.append(item.clone(title="Todas", action="list_all", url=host + '/series/', type='serie' )) itemlist.append(item.clone(title="Buscar", action="search", url=host + "/suggest/?query=", type="s", seccion='buscar' )) return itemlist def get_source(url): logger.info() data = httptools.downloadpage(url).data data = re.sub(r'"|\n|\r|\t| |
|\s{2,}', "", data) return data def list_all (item): logger.info () itemlist = [] if item.type in ['serie','recents']: contentType = 'serie' action = 'seasons' else: contentType = 'pelicula' action = 'findvideos' if item.type not in ['normal', 'seccion', 'serie']: post = {'page':item.page, 'type':item.type,'slug':item.slug,'id':item.id} post = urllib.urlencode(post) data =httptools.downloadpage(item.url, post=post, headers=CHANNEL_HEADERS).data data = re.sub(r'"|\n|\r|\t| |
|\s{2,}', "", data) patron ='
(.*?)<\/p>(\d{4})<\/span>' else: data = get_source(item.url) patron = 'item-%s>
(.*?)<\/p>(\d{4})'%contentType matches = scrapertools.find_multiple_matches(data, patron) for scrapedurl, scrapedthumbnail, scrapedtitle, scrapedyear in matches: url = host+scrapedurl+'p001/' thumbnail = scrapedthumbnail contentTitle=scrapedtitle title = contentTitle year = scrapedyear new_item=item.clone(action=action, title=title, url=url, thumbnail=thumbnail, plot="", fanart="", infoLabels ={'year':year} ) if contentType =='serie': new_item.contentSerieName=title else: new_item.contentTitle = title itemlist.append(new_item) tmdb.set_infoLabels_itemlist(itemlist, seekTmdb =True) #Paginacion next_page_valid = scrapertools.find_single_match(data, '
') if item.type != 'normal' and (len(itemlist)>19 or next_page_valid): type = item.type if item.type == 'serie': type = 'recents' if next_page_valid: page = str(int(next_page_valid[0])+1) if item.type != 'recents': id = next_page_valid[1] type = next_page_valid[2] else: id ='' else: if not item.page: item.page = "1" page = str(int(item.page)+1) id = item.id if type =='recents': type_pagination = '/series/pagination/' else: type_pagination = '/pagination/' url = host+type_pagination itemlist.append(item.clone(action = "list_all", title = 'Siguiente >>>', page=page, url = url, id = id, type = type )) return itemlist def seccion(item): logger.info() itemlist = [] data = get_source(item.url) page = "1" if item.seccion == 'generos': patron = '
  • <\/i>(.*?)<\/span>' type = 'genre' pat = 'genero/' elif item.seccion == 'anios': patron = '
  • (\d{4})<\/a>' type = 'year' pat = 'peliculas-' matches = scrapertools.find_multiple_matches(data, patron) for scrapedurl, scrapedtitle in matches: title = scrapedtitle if item.seccion == 'generos': cant = re.sub(r'.*?','',scrapedtitle) only_title = re.sub(r'<.*','',scrapedtitle).rstrip() title = only_title+' (%s)'%cant url = host+scrapedurl slug = scrapertools.find_single_match(scrapedurl, "%s(.*?)/" %pat) if item.seccion in ['generos', 'anios']: url = host + "/pagination/" itemlist.append( Item(action="list_all", channel=item.channel, fulltitle=item.title, page = "1", slug = slug, title=title, type = type, url=url )) # Paginacion if itemlist != []: next_page = scrapertools.find_single_match(data, '
  • Siguiente <') next_page_url = host + next_page import inspect if next_page != '': itemlist.append(item.clone(action="seccion", title='Siguiente >>>', url=next_page_url, thumbnail='https://s16.postimg.cc/9okdu7hhx/siguiente.png' )) return itemlist def seasons(item): logger.info() itemlist =[] data = httptools.downloadpage(item.url).data data = re.sub(r'"|\n|\r|\t| |
    |\s{2,}', "", data) patron ='<\/i>(.*?)<\/div>' matches = matches = re.compile(patron, re.DOTALL).findall(data) infoLabels=item.infoLabels for title in matches: season = title.replace('Temporada ','') infoLabels['season'] = season itemlist.append(Item( channel=item.channel, title=title, url=item.url, action='season_episodes', contentSerieName= item.contentSerieName, contentSeasonNumber = season, infoLabels=infoLabels )) tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) return itemlist[::-1] def season_episodes(item): logger.info() itemlist = [] data = httptools.downloadpage(item.url).data data = re.sub(r'"|\n|\r|\t| |
    |\s{2,}', "", data) season = str(item.infoLabels['season']) patron = '
    <\/i> (.*?)<\/a>'%season matches = matches = re.compile(patron, re.DOTALL).findall(data) infoLabels = item.infoLabels for url, episode in matches: episodenumber = re.sub('C.* ','',episode) infoLabels['episode'] = episodenumber itemlist.append(Item(channel=item.channel, title= episode, url = host+url, action = 'findvideos', infoLabels=infoLabels, contentEpisodeNumber=episode )) tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) return itemlist[::-1] def get_links_by_language(item, data): logger.info() video_list = [] language = scrapertools.find_single_match(data, 'ul id=level\d_(.*?)\s*class=') patron = 'data-source=(.*?)data.*?srt=(.*?)data-iframe.*?Opci.*?<.*?hidden>[^\(]\((.*?)\)' matches = re.compile(patron, re.DOTALL).findall(data) for url, sub, quality in matches: if 'http' not in url: new_url = 'https://onevideo.tv/api/player?key=90503e3de26d45e455b55e9dc54f015b3d1d4150&link' \ '=%s&srt=%s' % (url, sub) data = httptools.downloadpage(new_url).data data = re.sub(r'\\', "", data) video_list.extend(servertools.find_video_items(data=data)) for video_url in video_list: video_url.channel = item.channel video_url.action = 'play' video_url.title = item.title + '(%s) (%s)' % ('', video_url.server) if video_url.language == '': video_url.language = language video_url.subtitle = sub video_url.contentTitle = item.contentTitle else: video_list.append(item.clone(title='%s [%s] [%s]', url=url, action='play', quality=quality, language=language, subtitle=sub )) return video_list def findvideos(item): logger.info() itemlist = [] video_list = [] data = httptools.downloadpage(item.url).data data = re.sub(r'"|\n|\r|\t| |
    |\s{2,}', "", data) patron_language ='(
      )' matches = re.compile(patron_language, re.DOTALL).findall(data) for language in matches: video_list.extend(get_links_by_language(item, language)) 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 )) video_list = servertools.get_servers_itemlist(video_list, lambda i: i.title % (i.server.capitalize(), i.language,i.quality) ) return video_list