# -*- coding: utf-8 -*- # ------------------------------------------------------------ # Canale per CinemaLibero - First Version # ------------------------------------------------------------ import base64 import re import urlparse from channels import autoplay from channels import filtertools from core import scrapertools, servertools, httptools from platformcode import logger, config from core.item import Item from lib import unshortenit from platformcode import config from core import tmdb # Necessario per Autoplay IDIOMAS = {'Italiano': 'IT'} list_language = IDIOMAS.values() list_servers = ['wstream', 'openload', 'streamango', 'akstream', 'clipwatching', 'cloudvideo', 'youtube'] list_quality = ['default'] # Necessario per Verifica Link __comprueba_enlaces__ = config.get_setting('comprueba_enlaces', 'cinemalibero') __comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', 'cinemalibero') host = 'https://www.cinemalibero.center' headers = [['Referer', host]] def mainlist(item): logger.info('[cinemalibero.py] mainlist') autoplay.init(item.channel, list_servers, list_quality) # Necessario per Autoplay # Menu Principale itemlist = [Item(channel=item.channel, action='video', title='Film', url=host+'/category/film/', contentType='movie', thumbnail=''), Item(channel=item.channel, action='sottomenu_film', title='Generi Film', url=host, contentType='movie', thumbnail=''), Item(channel=item.channel, action='video', title='Serie TV', url=host+'/category/serie-tv/', contentType='episode', extra='tv', thumbnail=''), Item(channel=item.channel, action='video', title='Anime', url=host+'/category/anime-giapponesi/', contentType='episode', thumbnail=''), Item(channel=item.channel, action='video', title='Sport', url=host+'/category/sport/', contentType='movie', thumbnail=''), Item(channel=item.channel, action='search', title='[B]Cerca...[/B]', thumbnail=''), ] autoplay.show_option(item.channel, itemlist) # Necessario per Autoplay (Menu Configurazione) return itemlist def search(item, texto): logger.info("[cinemalibero.py] " + item.url + " search " + texto) item.url = host + "/?s=" + texto try: return video(item) # Continua la ricerca in caso di errore except: import sys for line in sys.exc_info(): logger.error("%s" % line) return [] def video(item): logger.info('[cinemalibero.py] video') itemlist = [] # Carica la pagina data = httptools.downloadpage(item.url).data.replace('\n','').replace('\t','') block = scrapertools.find_single_match(data, '
.*?class="col-md-12">(.*?)
') # Estrae i contenuti matches = re.compile(r'
(.*?)<\/a><\/div>', re.DOTALL).findall(block) for match in matches: url = scrapertools.find_single_match(match, r'href="([^"]+)"') long_title = scrapertools.find_single_match(match, r'
([^<]+)<\/div>') thumb = scrapertools.find_single_match(match, r'url=\((.*?)\)') quality = scrapertools.find_single_match(match, r'
([^<]+)<\/div>') genere = scrapertools.find_single_match(match, r'
([^<]+)<\/div>') year = scrapertools.find_single_match(long_title, r'\(([0-9)]+)') or scrapertools.find_single_match(long_title, r'\) ([0-9)]+)') lang = scrapertools.find_single_match(long_title, r'\(([a-zA-Z)]+)') title = re.sub(r'\(.*','',long_title) title = re.sub(r'(?:\(|\))','',title) if genere: genere = ' - [' + genere + ']' if year: long_title = title + ' - ('+ year + ')' + genere if lang: long_title = '[B]' + title + '[/B]' + ' - ('+ lang + ')' + genere else: long_title = '[B]' + title + '[/B]' # Seleziona fra Serie TV e Film if item.contentType == 'movie': tipologia = 'movie' action = 'findvideos' elif item.contentType == 'episode': tipologia = 'tv' action = 'episodios' else: tipologia = 'movie' action = 'select' itemlist.append( Item(channel=item.channel, action=action, contentType=item.contentType, title=long_title, fulltitle=title, quality=quality, url=url, thumbnail=thumb, infoLabels=year, show=title)) # Next page next_page = scrapertools.find_single_match(data, '
0 and item.extra != 'findservers': itemlist.append( Item(channel=item.channel, title='[COLOR lightblue][B]Aggiungi alla videoteca[/B][/COLOR]', url=item.url, action='add_pelicula_to_library', extra='findservers', contentTitle=item.contentTitle)) # Necessario per filtrare i Link if __comprueba_enlaces__: itemlist = servertools.check_list_links(itemlist, __comprueba_enlaces_num__) # Necessario per FilterTools itemlist = filtertools.get_links(itemlist, item, list_language) # Necessario per AutoPlay autoplay.start(itemlist, item) return itemlist def episodios(item): # Questa def. deve sempre essere nominata episodios logger.info('[cinemalibero.py] episodios') itemlist = [] extra ='' # Carica la pagina data = httptools.downloadpage(item.url, headers=headers).data block = scrapertools.find_single_match(data, r'
(.*?)<\/div>') if re.findall('rel="category tag">serie', data, re.IGNORECASE): # logger.info('select = ### è una serie ###') extra='serie' elif re.findall('rel="category tag">anime', data, re.IGNORECASE): if re.findall('episodi', block, re.IGNORECASE): # logger.info('select = ### è un anime ###') extra='anime' block = re.sub(r'

.*?<\/h2>','',block) block = block.replace('

','').replace('

','').replace('–<','<').replace('-<','<').replace('–<','<').replace('– <','<').replace('','')+'' block = re.sub(r'stagione completa.*?<\/p>','',block,flags=re.IGNORECASE) if extra == 'serie': block = block.replace('
.*?(?:stagione|Stagione)(.*?)<\/(?:strong|span)><\/p>(.*?)', re.DOTALL).findall(block) for lang, html in matches: lang = re.sub('<.*?>','',lang) html = html.replace('
','\n').replace('

','\n') matches = re.compile(r'([^<]+)([^\n]+)\n', re.DOTALL).findall(html) for scrapedtitle, html in matches: itemlist.append( Item(channel=item.channel, action="findvideos", contentType='episode', title=scrapedtitle + ' - (' + lang + ')', fulltitle=scrapedtitle, show=scrapedtitle, url=html)) elif extra == 'anime': block = re.sub(r'','',block) block = re.sub(r'(?:mirror|Mirror)[^<]+<','',block) block = block.replace('
','\n').replace('/a>

','\n') block = re.sub(r'(.*?)<\/a>') itemlist.append( Item(channel=item.channel, action="findvideos", contentType='episode', title=scrapedtitle, fulltitle=scrapedtitle, show=scrapedtitle, url=html)) else: logger.info('select = ### è un film ###') return findvideos(Item(channel=item.channel, title=item.title, fulltitle=item.fulltitle, url=item.url, show=item.fulltitle, contentType='movie')) if config.get_videolibrary_support() and len(itemlist) != 0: itemlist.append( Item(channel=item.channel, title="[COLOR lightblue]%s[/COLOR]" % config.get_localized_string(30161), url=item.url, action="add_serie_to_library", extra="episodios", show=item.show)) return itemlist