Files
addon/channels/tantifilm.py
greko17 8e87409b64 refactor: riscritti canali per pieno supporto al decoratore e/o per renderlo compatibile
In alcuni canali sono state solo trasformate le def che avevano nel codice support.scrape del vecchio codice
2019-09-16 12:16:53 +02:00

289 lines
11 KiB
Python

# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per Tantifilm
# ------------------------------------------------------------
"""
Trasformate le sole def per support.menu e support.scrape
da non inviare nel test.
Test solo a trasformazione completa
"""
import re
import urlparse
from core import scrapertoolsV2, httptools, tmdb, support
from core.item import Item
from core.support import menu, log, aplay
from platformcode import logger
from specials import autorenumber
from platformcode import config
IDIOMAS = {'Italiano': 'IT'}
list_language = IDIOMAS.values()
list_servers = ['verystream', 'openload', 'streamango', 'vidlox', 'youtube']
list_quality = ['default']
__channel__ = "tantifilm"
host = config.get_channel_url(__channel__)
headers = [['Referer', host]]
@support.menu
def mainlist(item):
log()
film = ['/film/',
('Al Cinema', ['/watch-genre/al-cinema/', 'peliculas', 'movie']),
('HD',['/watch-genre/altadefinizione/', 'peliculas', 'movie']),
('Categorie', ['', 'category', 'movie'])
]
tvshow = ['/watch-genre/serie-tv/',
('HD', ['/watch-genre/serie-altadefinizione/', 'peliculas']),
('Miniserie', ['/watch-genre/miniserie/', 'peliculas', 'serie']),
('Programmi TV', ['/watch-genre/programmi-tv/', 'peliculas'])
]
pinco = [('Anime', ['/watch-genre/anime/', 'peliculas', 'anime'])]
return locals()
##def mainlist(item):
## log()
## 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):
log()
itemlist = []
item = Item()
item.url = host +'/aggiornamenti/'
matches = support.match(item, r'mediaWrapAlt recomended_videos"[^>]+>\s*<a href="([^"]+)" title="([^"]+)" rel="bookmark">\s*<img[^s]+src="([^"]+)"[^>]+>')[0]
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="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):
log(texto)
item.url = host + "/?s=" + texto
try:
return search_peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
return []
def search_peliculas(item):
log()
itemlist = []
action = 'findvideos' if item.extra == 'movie' else 'episodios'
data = httptools.downloadpage(item.url, headers=headers, ignore_response_code=True).data.replace('\t','').replace('\n','')
log(data)
patron = r'<a href="([^"]+)" title="Permalink to\s([^"]+) \(([^<]+)\).*?".*?<img[^s]+src="([^"]+)".*?<div class="calitate">\s*<p>([^<]+)<\/p>'
matches = re.compile(patron, re.MULTILINE).findall(data)
for url, title, year, thumb, quality in matches:
infoLabels = {}
infoLabels['year'] = year
title = scrapertoolsV2.decodeHtmlentities(title)
quality = scrapertoolsV2.decodeHtmlentities(quality)
longtitle = title + support.typo(quality,'_ [] color kod')
itemlist.append(
Item(channel=item.channel,
action=action,
contentType=item.contentType,
fulltitle=title,
show=title,
title=longtitle,
url=url,
thumbnail=thumb,
infoLabels=infoLabels,
args=item.args))
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
return itemlist
@support.scrape
def category(item):
log()
action = 'peliculas'
blacklist = ['Serie TV Altadefinizione', 'HD AltaDefinizione', 'Al Cinema',
'Serie TV', 'Miniserie', 'Programmi Tv', 'Live', 'Trailers',
'Serie TV Aggiornate', 'Aggiornamenti', 'Featured', 'Ultimi Film Aggiornati']
patron = r'<li><a href="(?P<url>[^"]+)"><span></span>(?P<title>[^<]+)</a></li>'
patronBlock = r'<ul class="table-list">(?P<block>.*?)</ul>'
return locals()
## itemlist = support.scrape(item, '<li><a href="([^"]+)"><span></span>([^<]+)</a></li>', ['url', 'title'], headers, blacklist, patron_block='<ul class="table-list">(.*?)</ul>', action='peliculas')
## return support.thumb(itemlist)
@support.scrape
def peliculas(item):
log()
action = 'findvideos' if item.extra == 'movie' else 'episodios'
if item.args == 'movie' or item.extra == 'movie':
patron = r'<div class="mediaWrap mediaWrapAlt">[^<]+<a href="(?P<url>[^"]+)" title="Permalink to\s(?P<title>[^"]+) \((?P<year>[^<]+)\).*?"[^>]+>[^<]+<img[^s]+src="(?P<thumb>[^"]+)"[^>]+>[^<]+<\/a>.*?<p>\s*(?P<quality>[a-zA-Z-0-9]+)\s*<\/p>'
patronBlock = '<div id="main_col">(?P<block>.*?)main_col'
## itemlist = support.scrape(item, patron, ['url', 'title', 'year', 'thumb', 'quality'], headers, action=action, patron_block='<div id="main_col">(.*?)main_col', patronNext='<a class="nextpostslink" rel="next" href="([^"]+)">')
patronNext = '<a class="nextpostslink" rel="next" href="([^"]+)">'
else:
patron = r'<div class="media3">[^>]+><a href="(?P<url>[^"]+)"><img[^s]+src="(?P<thumb>[^"]+)"[^>]+><\/a><[^>]+><a[^<]+><p>(?P<title>[^<]+) \((?P<year>[^\)]+)[^<]+<\/p>.*?<p>\s*(?P<quality>[a-zA-Z-0-9]+)\s*<\/p>'
patronNext='<a class="nextpostslink" rel="next" href="([^"]+)">'
action = action
# itemlist = support.scrape(item, patron, ['url', 'thumb', 'title', 'year', 'quality'], headers, action=action, patronNext='<a class="nextpostslink" rel="next" href="([^"]+)">')
if item.args == 'anime': autorenumber.renumber(itemlist)
## return itemlist
return locals()
def episodios(item):
log()
itemlist = []
if item.args == 'anime': return anime(item)
data = httptools.downloadpage(item.url).data
# Check if is series
check = scrapertoolsV2.find_single_match(data.replace('\t','').replace('\n',''), r'<div class="category-film"><h3>([^<]+)<\/h3>')
if 'serie tv' not in check.lower(): return findvideos(item)
elif 'anime' in check.lower(): return findvideos(item)
patron = r'<iframe src="([^"]+)" scrolling="no" frameborder="0" width="626" height="550" allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true">'
url = scrapertoolsV2.find_single_match(data, patron)
log('URL =', url)
seasons = support.match(item, r'<a href="([^"]+)"\s*>\s*<i[^>]+><\/i>\s*(\d+)<\/a>', r'Stagioni<\/a>.*?<ul class="nav navbar-nav">(.*?)<\/ul>', headers=headers, url=url)[0]
for season_url, season in seasons:
season_url = urlparse.urljoin(url, season_url)
episodes = support.match(item, r'<a href="([^"]+)"\s*>\s*<i[^>]+><\/i>\s*(\d+)<\/a>', r'Episodio<\/a>.*?<ul class="nav navbar-nav">(.*?)<\/ul>', headers=headers, url=season_url)[0]
for episode_url, episode in episodes:
episode_url = urlparse.urljoin(url, episode_url)
title = season + "x" + episode.zfill(2)
itemlist.append(
Item(channel=item.channel,
action="findvideos",
contentType=item.contentType,
title=support.typo(title + ' - ' + item.fulltitle,'bold'),
url=episode_url,
fulltitle=title + ' - ' + item.show,
show=item.show,
thumbnail=item.thumbnail))
support.videolibrary(itemlist, item, 'color kod bold')
return itemlist
def anime(item):
log()
itemlist = []
seasons = support.match(item, r'<div class="sp-body[^"]+">(.*?)<\/div>')[0]
for season in seasons:
episodes = scrapertoolsV2.find_multiple_matches(season, r'<a.*?href="([^"]+)"[^>]+>([^<]+)<\/a>(.*?)<(:?br|\/p)')
for url, title, urls, none in episodes:
urls = scrapertoolsV2.find_multiple_matches(urls, '<a.*?href="([^"]+)"[^>]+>')
for url2 in urls:
url += url2 + '\n'
log('EP URL',url)
itemlist.append(
Item(channel=item.channel,
action="findvideos",
contentType=item.contentType,
title=support.typo(title + ' - ' + item.fulltitle,'bold'),
url=url,
fulltitle=title + ' - ' + item.show,
show=item.show,
thumbnail=item.thumbnail,
args=item.args))
autorenumber.renumber(itemlist, item,'bold')
support.videolibrary(itemlist, item, 'color kod bold')
return itemlist
def findvideos(item):
log()
# itemlist = []
if item.args == 'anime':
data = item.url
else:
data = httptools.downloadpage(item.url, headers=headers).data
# Check if is series
check = scrapertoolsV2.find_single_match(data.replace('\t','').replace('\n',''), r'<div class="category-film"><h3>([^<]+)<\/h3>')
if 'serie tv' in check.lower(): return episodios(item)
elif 'anime' in check.lower(): return anime(item)
if 'protectlink' in data:
urls = scrapertoolsV2.find_multiple_matches(data, r'<iframe src="[^=]+=(.*?)"')
for url in urls:
url= url.decode('base64')
if '\t' in url:
url = url[:-1]
data += '\t' + url
if 'nodmca' in data:
page = httptools.downloadpage(url, headers=headers).data
data += '\t' + scrapertoolsV2.find_single_match(page,'<meta name="og:url" content="([^=]+)">')
return support.server(item, data, headers=headers)
# return itemlist