diff --git a/.gitignore b/.gitignore index bd02e367..d9aeb552 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,5 @@ *.pyc .DS_Store .idea/ -.dev .directory __pycache__/ diff --git a/channels/support.py b/channels/support.py index 1f77809c..5e0da055 100644 --- a/channels/support.py +++ b/channels/support.py @@ -189,7 +189,8 @@ def scrape(item, patron = '', listGroups = [], headers="", blacklist="", data="" quality=scraped["quality"], url=scraped["url"], infoLabels=infolabels, - thumbnail=scraped["thumb"] + thumbnail=scraped["thumb"], + args=item.args ) for lg in list(set(listGroups).difference(known_keys)): @@ -417,6 +418,7 @@ def typo(string, typography=''): def match(item, patron='', patron_block='', headers='', url=''): + matches = [] url = url if url else item.url data = httptools.downloadpage(url, headers=headers).data.replace("'", '"') data = re.sub('\n|\t', '', data) @@ -480,10 +482,12 @@ def nextPage(itemlist, item, data, patron, function_level=1): return itemlist -def server(item, data='', headers='', AutoPlay=True): +def server(item, data='', headers='', AutoPlay=True, CheckLinks=True): __comprueba_enlaces__ = config.get_setting('comprueba_enlaces', item.channel) + log(__comprueba_enlaces__ ) __comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', item.channel) + log(__comprueba_enlaces_num__ ) if not data: data = httptools.downloadpage(item.url, headers=headers).data @@ -498,7 +502,7 @@ def server(item, data='', headers='', AutoPlay=True): videoitem.channel = item.channel videoitem.contentType = item.contentType - if __comprueba_enlaces__: + if __comprueba_enlaces__ and CheckLinks: itemlist = servertools.check_list_links(itemlist, __comprueba_enlaces_num__) if AutoPlay == True: diff --git a/channels/tantifilm.json b/channels/tantifilm.json index a575213c..e181261f 100644 --- a/channels/tantifilm.json +++ b/channels/tantifilm.json @@ -6,9 +6,9 @@ "adult": false, "thumbnail": "https://raw.githubusercontent.com/Zanzibar82/images/master/posters/tantifilm.png", "banner": "https://raw.githubusercontent.com/Zanzibar82/images/master/posters/tantifilm.png", - "categories": ["tvshow", "movie"], + "categories": ["tvshow", "movie", "anime"], "settings": [ - { + { "id": "include_in_global_search", "type": "bool", "label": "Includi in ricerca globale", @@ -25,14 +25,6 @@ "visible": true }, - { - "id": "include_in_newest_series", - "type": "bool", - "label": "Includi in Novità - Serie TV", - "default": true, - "enabled": true, - "visible": true - }, { "id": "include_in_newest_italiano", "type": "bool", diff --git a/channels/tantifilm.py b/channels/tantifilm.py index f7443fb9..0a366a53 100644 --- a/channels/tantifilm.py +++ b/channels/tantifilm.py @@ -1,130 +1,79 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------ -# Ringraziamo Icarus crew -# Canale piratestreaming +# Canale per Tantifilm # ------------------------------------------------------------ + import re import urlparse -from channels import autoplay -from channels import filtertools -from core import scrapertools, servertools, httptools +from channels import support, autorenumber +from channels.support import menu, log, aplay +from core import scrapertoolsV2, httptools, tmdb from core.item import Item -from core import tmdb -from lib.unshortenit import unshorten_only -from platformcode import config -from platformcode import logger +from platformcode import config, logger IDIOMAS = {'Italiano': 'IT'} list_language = IDIOMAS.values() list_servers = ['verystream', 'openload', 'streamango', 'vidlox', 'youtube'] list_quality = ['default'] -__comprueba_enlaces__ = config.get_setting('comprueba_enlaces', 'tantifilm') -__comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', 'tantifilm') - -host = "https://www.tantifilm.club" ### <-- Cambiato Host da .gratis a .club --> Continua riga 233 +host = "https://www.tantifilm.cafe" headers = [['Referer', host]] def mainlist(item): - logger.info("kod.tantifilm mainlist") + log() + itemlist = [] - autoplay.init(item.channel, list_servers, list_quality) - itemlist = [Item(channel=item.channel, - title="[COLOR azure]Novita'[/COLOR]", - action="peliculas", - url="%s/watch-genre/recommended/" % host, - thumbnail="http://orig03.deviantart.net/6889/f/2014/079/7/b/movies_and_popcorn_folder_icon_by_matheusgrilo-d7ay4tw.png"), - Item(channel=item.channel, - title="[COLOR azure]HD - Alta Definizione[/COLOR]", - action="peliculas", - url="%s/watch-genre/altadefinizione/" % host, - thumbnail="http://jcrent.com/apple%20tv%20final/HD.png"), - Item(channel=item.channel, - title="[COLOR azure]Film Per Categoria[/COLOR]", - action="categorias", - url=host, - thumbnail="http://orig03.deviantart.net/6889/f/2014/079/7/b/movies_and_popcorn_folder_icon_by_matheusgrilo-d7ay4tw.png"), - Item(channel=item.channel, - title="[COLOR yellow]Cerca...[/COLOR]", - action="search", - extra="movie", - thumbnail="http://dc467.4shared.com/img/fEbJqOum/s7/13feaf0c8c0/Search"), - Item(channel=item.channel, - title="[COLOR azure]Serie TV[/COLOR]", - extra="tvshow", - action="peliculas_tv", - url="%s/watch-genre/serie-tv" % host, - thumbnail="http://orig03.deviantart.net/6889/f/2014/079/7/b/movies_and_popcorn_folder_icon_by_matheusgrilo-d7ay4tw.png"), - Item(channel=item.channel, - title="[COLOR yellow]Cerca Serie TV...[/COLOR]", - action="search", - extra="tvshow", - thumbnail="http://dc467.4shared.com/img/fEbJqOum/s7/13feaf0c8c0/Search")] - - autoplay.show_option(item.channel, itemlist) + menu(itemlist, 'Film', 'peliculas', host + '/film/', 'movie', args='movie') + menu(itemlist, 'Film Al Cinema submenu', 'peliculas', host + '/watch-genre/al-cinema/', 'movie') + menu(itemlist, 'Film HD submenu', 'peliculas', host + '/watch-genre/altadefinizione/', 'movie') + menu(itemlist, 'Film Per Categoria submenu', 'category', host, 'movie') + menu(itemlist, 'Cerca film... submenu color kod', 'search', contentType='movie', args='findvideos') + menu(itemlist, 'Serie TV', 'peliculas', host + '/watch-genre/serie-tv/', contentType='episode') + menu(itemlist, 'Serie TV HD submenu', 'peliculas', host + '/watch-genre/serie-altadefinizione/', contentType='episode') + menu(itemlist, 'Miniserie submenu', 'peliculas', host + '/watch-genre/miniserie/', contentType='episode', args='serie') + menu(itemlist, 'Programmi TV submenu', 'peliculas', host + '/watch-genre/programmi-tv/', contentType='episode') + menu(itemlist, 'Anime submenu', 'peliculas', host + '/watch-genre/anime/', contentType='episode', args='anime') + menu(itemlist, 'Cerca Serie TV... submenu color kod', 'search', contentType='episode', args='episodios') + aplay(item, itemlist, list_servers, list_quality) return itemlist def newest(categoria): - logger.info("kod.tantifilm newest" + categoria) + log() itemlist = [] item = Item() - try: - if categoria == "film": - item.url = host - item.action = "latest" - itemlist = latest(item) + item.url = host +'/aggiornamenti/' - if itemlist[-1].action == "latest": - itemlist.pop() + matches = support.match(item, r'mediaWrapAlt recomended_videos"[^>]+>\s*\s*]+>')[0] - # Continua la ricerca in caso di errore - except: - import sys - for line in sys.exc_info(): - logger.error("{0}".format(line)) - return [] - - return itemlist - - -def categorias(item): - itemlist = [] - - # Carica la pagina - data = httptools.downloadpage(item.url, headers=headers).data - bloque = scrapertools.find_single_match(data, - '') - - # Estrae i contenuti - patron = '
  • (.*?)
  • ' - matches = re.compile(patron, re.DOTALL).findall(bloque) - - for scrapedurl, scrapedtitle in matches: + for url, title, thumb in matches: + title = scrapertoolsV2.decodeHtmlentities(title).replace("Permalink to ", "").replace("streaming", "") + title = re.sub(r'\s\(\d+\)','',title) itemlist.append( Item(channel=item.channel, - action="peliculas", - title="[COLOR azure]" + scrapedtitle + "[/COLOR]", - url=scrapedurl, - thumbnail="http://xbmc-repo-ackbarr.googlecode.com/svn/trunk/dev/skin.cirrus%20extended%20v2/extras/moviegenres/All%20Movies%20by%20Genre.png", + action="findvideos", + contentType="movie", + fulltitle=title, + show=title, + title=support.typo(title, 'bold'), + url=url, + thumbnail=thumb, folder=True)) + tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) return itemlist def search(item, texto): - logger.info("[tantifilm.py] " + item.url + " search " + texto) - item.url = "%s/?s=%s" % (host, texto) + log(texto) + item.url = host + "/?s=" + texto try: - if item.extra == "movie": - return search_peliculas(item) - if item.extra == "tvshow": - return search_peliculas_tv(item) + return search_peliculas(item) # Continua la ricerca in caso di errore except: @@ -134,373 +83,149 @@ def search(item, texto): return [] + def search_peliculas(item): - logger.info("kod.tantifilm search_peliculas") + log() itemlist = [] - # Carica la pagina - data = httptools.downloadpage(item.url, headers=headers).data + action = 'findvideos' if item.extra == 'movie' else 'episodios' - # Estrae i contenuti - patron = '\s*\s*([^<]+)', ['url', 'title'], headers, blacklist, patron_block='', action='peliculas') + return support.thumb(itemlist) def peliculas(item): - logger.info("kod.tantifilm peliculas") - itemlist = [] - - # Carica la pagina - data = httptools.downloadpage(item.url, headers=headers).data - - # Estrae i contenuti - patron = '
    [^>]+>]+><[^>]+>]+>

    (.*?)

    ' - matches = re.compile(patron, re.DOTALL).findall(data) - - for scrapedurl, scrapedthumbnail, scrapedtitle in matches: - html = httptools.downloadpage(scrapedurl, headers=headers).data - start = html.find("
    ") - end = html.find("
    ", start) - scrapedplot = html[start:end] - scrapedplot = re.sub(r'<[^>]*>', '', scrapedplot) - scrapedplot = scrapertools.decodeHtmlentities(scrapedplot) - scrapedtitle = scrapertools.decodeHtmlentities(scrapedtitle) - scrapedtitle = scrapedtitle.replace("streaming", "") - - itemlist.append( - Item(channel=item.channel, - action="findvideos", - contentType="movie", - fulltitle=scrapedtitle, - show=scrapedtitle, - title=scrapedtitle, - url=scrapedurl, - thumbnail=scrapedthumbnail, - plot=scrapedplot, - folder=True)) - - # Paginazione - patronvideos = '' - matches = re.compile(patronvideos, re.DOTALL).findall(data) - - if len(matches) > 0: - scrapedurl = urlparse.urljoin(item.url, matches[0]) - itemlist.append( - Item(channel=item.channel, - action="peliculas", - title="[COLOR lightgreen]" + config.get_localized_string(30992) + "[/COLOR]", - url=scrapedurl, - thumbnail="http://2.bp.blogspot.com/-fE9tzwmjaeQ/UcM2apxDtjI/AAAAAAAAeeg/WKSGM2TADLM/s1600/pager+old.png", - folder=True)) - - tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) - return itemlist - - -def peliculas_tv(item): - logger.info("kod.tantifilm peliculas") - itemlist = [] - - # Carica la pagina - data = httptools.downloadpage(item.url, headers=headers).data - - # Estrae i contenuti - patron = '
    [^>]+>]+><[^>]+>]+>

    (.*?)

    ' - matches = re.compile(patron, re.DOTALL).findall(data) - - for scrapedurl, scrapedthumbnail, scrapedtitle in matches: - html = httptools.downloadpage(scrapedurl, headers=headers).data - start = html.find("
    ") - end = html.find("
    ", start) - scrapedplot = html[start:end] - scrapedplot = re.sub(r'<[^>]*>', '', scrapedplot) - scrapedplot = scrapertools.decodeHtmlentities(scrapedplot) - scrapedtitle = scrapertools.decodeHtmlentities(scrapedtitle) - scrapedtitle = scrapedtitle.replace("streaming", "") - - itemlist.append( - Item(channel=item.channel, - action="episodios", - fulltitle=scrapedtitle, - show=scrapedtitle, - title=scrapedtitle, - url=scrapedurl, - thumbnail=scrapedthumbnail, - plot=scrapedplot, - folder=True)) - - # Paginazione - patronvideos = '' - matches = re.compile(patronvideos, re.DOTALL).findall(data) - - if len(matches) > 0: - scrapedurl = urlparse.urljoin(item.url, matches[0]) - itemlist.append( - Item(channel=item.channel, - action="peliculas_tv", - title="[COLOR lightgreen]" + config.get_localized_string(30992) + "[/COLOR]", - url=scrapedurl, - thumbnail="http://2.bp.blogspot.com/-fE9tzwmjaeQ/UcM2apxDtjI/AAAAAAAAeeg/WKSGM2TADLM/s1600/pager+old.png", - folder=True)) - - tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) - return itemlist - -def latest(item): - logger.info("kod.tantifilm peliculas") - itemlist = [] - - # Carica la pagina - data = httptools.downloadpage(item.url, headers=headers).data - - # Estrae i contenuti - patron = '
    \s*' - patron += '\s*' - patron += ']+>' - matches = re.compile(patron, re.DOTALL).findall(data) - - for scrapedurl, scrapedtitle, scrapedthumbnail in matches: - html = httptools.downloadpage(scrapedurl, headers=headers).data - start = html.find("
    ") - end = html.find("
    ", start) - scrapedplot = html[start:end] - scrapedplot = re.sub(r'<[^>]*>', '', scrapedplot) - scrapedplot = scrapertools.decodeHtmlentities(scrapedplot) - scrapedtitle = scrapertools.decodeHtmlentities(scrapedtitle) - scrapedtitle = scrapedtitle.replace("Permalink to ", "") - scrapedtitle = scrapedtitle.replace("streaming", "") - itemlist.append( - Item(channel=item.channel, - action="findvideos", - contentType="movie", - fulltitle=scrapedtitle, - show=scrapedtitle, - title="[COLOR azure]" + scrapedtitle + "[/COLOR]", - url=scrapedurl, - thumbnail=scrapedthumbnail, - plot=scrapedplot, - folder=True)) - - # Paginazione - patronvideos = '
    ' - matches = re.compile(patronvideos, re.DOTALL).findall(data) - - if len(matches) > 0: - scrapedurl = urlparse.urljoin(item.url, matches[0]) - itemlist.append( - Item(channel=item.channel, - action="latest", - title="[COLOR lightgreen]" + config.get_localized_string(30992) + "[/COLOR]", - url=scrapedurl, - thumbnail="http://2.bp.blogspot.com/-fE9tzwmjaeQ/UcM2apxDtjI/AAAAAAAAeeg/WKSGM2TADLM/s1600/pager+old.png", - folder=True)) - - tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) - return itemlist + log() + action = 'findvideos' if item.extra == 'movie' else 'episodios' + if item.args == 'movie': + patron= r'
    [^<]+]+>[^<]+]+>[^<]+<\/a>' + itemlist = support.scrape(item, patron, ['url', 'title', 'thumb'], headers, action=action, patronNext='
    ]+><\/a><[^>]+>]+>

    ([^(:?\(|>]+)' + itemlist = support.scrape(item, patron, ['url', 'thumb', 'title'], headers, action=action, patronNext=' 0: - scrapedtitle = re.sub(r'<[^>]*>', '', data[:end]).strip() - else: - scrapedtitle = '' - if scrapedtitle == '': - patron = '([^<]+)' - scrapedtitle = scrapertools.find_single_match(data, patron).strip() - title = scrapertools.find_single_match(scrapedtitle, '\d+[^\d]+\d+') - if title == '': - title = scrapedtitle - if title != '': - itemlist.append( - Item(channel=item.channel, - action="findvideos", - contentType="episode", - title=title, - url=data, - thumbnail=item.thumbnail, - extra=item.extra, - fulltitle=item.fulltitle, - show=item.show)) - - logger.info("kod.tantifilm episodios") - + log() itemlist = [] + if item.args == 'anime': return anime(item) - data = httptools.downloadpage(item.url, headers=headers).data - data = scrapertools.decodeHtmlentities(data) + data = httptools.downloadpage(item.url).data - start = data.find('

    ') - end = data.find('
    ', start) + # Check if is series + check = scrapertoolsV2.find_single_match(data.replace('\t','').replace('\n',''), r'

    ([^<]+)<\/h3>') + if 'serie tv' not in check.lower(): return findvideos(item) + elif 'anime' in check.lower(): return findvideos(item) - data_sub = data[start:end] - - starts = [] - patron = r".*?STAGIONE|MINISERIE|WEBSERIE|SERIE" - matches = re.compile(patron, re.IGNORECASE).finditer(data_sub) - for match in matches: - season_title = match.group() - if season_title != '': - starts.append(match.end()) - - i = 1 - len_starts = len(starts) - - while i <= len_starts: - inizio = starts[i - 1] - fine = starts[i] if i < len_starts else -1 - - html = data_sub[inizio:fine] - - load_episodios(html, item, itemlist) - - i += 1 - - if len(itemlist) == 0: - patron = '([^<]+)' - seasons_episodes = re.compile(patron, re.DOTALL).findall(data) - - end = None - for scrapedtag, scrapedtitle in seasons_episodes: - start = data.find(scrapedtag, end) - end = data.find('
    ', start) - html = data[start:end] + patron = r'