Merge pull request #2 from kodiondemand/master

update
This commit is contained in:
greko
2019-05-08 22:05:57 +02:00
committed by GitHub
6 changed files with 177 additions and 451 deletions
-1
View File
@@ -2,6 +2,5 @@
*.pyc *.pyc
.DS_Store .DS_Store
.idea/ .idea/
.dev
.directory .directory
__pycache__/ __pycache__/
+7 -3
View File
@@ -189,7 +189,8 @@ def scrape(item, patron = '', listGroups = [], headers="", blacklist="", data=""
quality=scraped["quality"], quality=scraped["quality"],
url=scraped["url"], url=scraped["url"],
infoLabels=infolabels, infoLabels=infolabels,
thumbnail=scraped["thumb"] thumbnail=scraped["thumb"],
args=item.args
) )
for lg in list(set(listGroups).difference(known_keys)): 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=''): def match(item, patron='', patron_block='', headers='', url=''):
matches = []
url = url if url else item.url url = url if url else item.url
data = httptools.downloadpage(url, headers=headers).data.replace("'", '"') data = httptools.downloadpage(url, headers=headers).data.replace("'", '"')
data = re.sub('\n|\t', '', data) data = re.sub('\n|\t', '', data)
@@ -480,10 +482,12 @@ def nextPage(itemlist, item, data, patron, function_level=1):
return itemlist 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) __comprueba_enlaces__ = config.get_setting('comprueba_enlaces', item.channel)
log(__comprueba_enlaces__ )
__comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', item.channel) __comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', item.channel)
log(__comprueba_enlaces_num__ )
if not data: if not data:
data = httptools.downloadpage(item.url, headers=headers).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.channel = item.channel
videoitem.contentType = item.contentType videoitem.contentType = item.contentType
if __comprueba_enlaces__: if __comprueba_enlaces__ and CheckLinks:
itemlist = servertools.check_list_links(itemlist, __comprueba_enlaces_num__) itemlist = servertools.check_list_links(itemlist, __comprueba_enlaces_num__)
if AutoPlay == True: if AutoPlay == True:
+2 -10
View File
@@ -6,9 +6,9 @@
"adult": false, "adult": false,
"thumbnail": "https://raw.githubusercontent.com/Zanzibar82/images/master/posters/tantifilm.png", "thumbnail": "https://raw.githubusercontent.com/Zanzibar82/images/master/posters/tantifilm.png",
"banner": "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": [ "settings": [
{ {
"id": "include_in_global_search", "id": "include_in_global_search",
"type": "bool", "type": "bool",
"label": "Includi in ricerca globale", "label": "Includi in ricerca globale",
@@ -25,14 +25,6 @@
"visible": true "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", "id": "include_in_newest_italiano",
"type": "bool", "type": "bool",
+149 -424
View File
@@ -1,130 +1,79 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# ------------------------------------------------------------ # ------------------------------------------------------------
# Ringraziamo Icarus crew # Canale per Tantifilm
# Canale piratestreaming
# ------------------------------------------------------------ # ------------------------------------------------------------
import re import re
import urlparse import urlparse
from channels import autoplay from channels import support, autorenumber
from channels import filtertools from channels.support import menu, log, aplay
from core import scrapertools, servertools, httptools from core import scrapertoolsV2, httptools, tmdb
from core.item import Item from core.item import Item
from core import tmdb from platformcode import config, logger
from lib.unshortenit import unshorten_only
from platformcode import config
from platformcode import logger
IDIOMAS = {'Italiano': 'IT'} IDIOMAS = {'Italiano': 'IT'}
list_language = IDIOMAS.values() list_language = IDIOMAS.values()
list_servers = ['verystream', 'openload', 'streamango', 'vidlox', 'youtube'] list_servers = ['verystream', 'openload', 'streamango', 'vidlox', 'youtube']
list_quality = ['default'] list_quality = ['default']
__comprueba_enlaces__ = config.get_setting('comprueba_enlaces', 'tantifilm') host = "https://www.tantifilm.cafe"
__comprueba_enlaces_num__ = config.get_setting('comprueba_enlaces_num', 'tantifilm')
host = "https://www.tantifilm.club" ### <-- Cambiato Host da .gratis a .club --> Continua riga 233
headers = [['Referer', host]] headers = [['Referer', host]]
def mainlist(item): def mainlist(item):
logger.info("kod.tantifilm mainlist") log()
itemlist = []
autoplay.init(item.channel, list_servers, list_quality) menu(itemlist, 'Film', 'peliculas', host + '/film/', 'movie', args='movie')
itemlist = [Item(channel=item.channel, menu(itemlist, 'Film Al Cinema submenu', 'peliculas', host + '/watch-genre/al-cinema/', 'movie')
title="[COLOR azure]Novita'[/COLOR]", menu(itemlist, 'Film HD submenu', 'peliculas', host + '/watch-genre/altadefinizione/', 'movie')
action="peliculas", menu(itemlist, 'Film Per Categoria submenu', 'category', host, 'movie')
url="%s/watch-genre/recommended/" % host, menu(itemlist, 'Cerca film... submenu color kod', 'search', contentType='movie', args='findvideos')
thumbnail="http://orig03.deviantart.net/6889/f/2014/079/7/b/movies_and_popcorn_folder_icon_by_matheusgrilo-d7ay4tw.png"), menu(itemlist, 'Serie TV', 'peliculas', host + '/watch-genre/serie-tv/', contentType='episode')
Item(channel=item.channel, menu(itemlist, 'Serie TV HD submenu', 'peliculas', host + '/watch-genre/serie-altadefinizione/', contentType='episode')
title="[COLOR azure]HD - Alta Definizione[/COLOR]", menu(itemlist, 'Miniserie submenu', 'peliculas', host + '/watch-genre/miniserie/', contentType='episode', args='serie')
action="peliculas", menu(itemlist, 'Programmi TV submenu', 'peliculas', host + '/watch-genre/programmi-tv/', contentType='episode')
url="%s/watch-genre/altadefinizione/" % host, menu(itemlist, 'Anime submenu', 'peliculas', host + '/watch-genre/anime/', contentType='episode', args='anime')
thumbnail="http://jcrent.com/apple%20tv%20final/HD.png"), menu(itemlist, 'Cerca Serie TV... submenu color kod', 'search', contentType='episode', args='episodios')
Item(channel=item.channel, aplay(item, itemlist, list_servers, list_quality)
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)
return itemlist return itemlist
def newest(categoria): def newest(categoria):
logger.info("kod.tantifilm newest" + categoria) log()
itemlist = [] itemlist = []
item = Item() item = Item()
try: item.url = host +'/aggiornamenti/'
if categoria == "film":
item.url = host
item.action = "latest"
itemlist = latest(item)
if itemlist[-1].action == "latest": matches = support.match(item, r'mediaWrapAlt recomended_videos"[^>]+>\s*<a href="([^"]+)" title="([^"]+)" rel="bookmark">\s*<img[^s]+src="([^"]+)"[^>]+>')[0]
itemlist.pop()
# Continua la ricerca in caso di errore for url, title, thumb in matches:
except: title = scrapertoolsV2.decodeHtmlentities(title).replace("Permalink to ", "").replace("streaming", "")
import sys title = re.sub(r'\s\(\d+\)','',title)
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,
'<ul class="table-list">(.*?)</ul>')
# Estrae i contenuti
patron = '<li><a href=\'(.*?)\'><span></span>(.*?)</a></li>'
matches = re.compile(patron, re.DOTALL).findall(bloque)
for scrapedurl, scrapedtitle in matches:
itemlist.append( itemlist.append(
Item(channel=item.channel, Item(channel=item.channel,
action="peliculas", action="findvideos",
title="[COLOR azure]" + scrapedtitle + "[/COLOR]", contentType="movie",
url=scrapedurl, fulltitle=title,
thumbnail="http://xbmc-repo-ackbarr.googlecode.com/svn/trunk/dev/skin.cirrus%20extended%20v2/extras/moviegenres/All%20Movies%20by%20Genre.png", show=title,
title=support.typo(title, 'bold'),
url=url,
thumbnail=thumb,
folder=True)) folder=True))
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
return itemlist return itemlist
def search(item, texto): def search(item, texto):
logger.info("[tantifilm.py] " + item.url + " search " + texto) log(texto)
item.url = "%s/?s=%s" % (host, texto) item.url = host + "/?s=" + texto
try: try:
if item.extra == "movie": return search_peliculas(item)
return search_peliculas(item)
if item.extra == "tvshow":
return search_peliculas_tv(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
@@ -134,373 +83,149 @@ def search(item, texto):
return [] return []
def search_peliculas(item): def search_peliculas(item):
logger.info("kod.tantifilm search_peliculas") log()
itemlist = [] itemlist = []
# Carica la pagina action = 'findvideos' if item.extra == 'movie' else 'episodios'
data = httptools.downloadpage(item.url, headers=headers).data
# Estrae i contenuti data = httptools.downloadpage(item.url, headers=headers, ignore_response_code=True).data
patron = '<a href="([^"]+)" title="([^"]+)" rel="[^"]+">\s*<img[^s]+src="(.*?)"' patron = r'<a href="([^"]+)" title="Permalink to\s([^"]+) \([^<]+\).*?" rel="[^"]+">\s*<img[^s]+src="(.*?)"'
matches = re.compile(patron, re.DOTALL).findall(data) matches = re.compile(patron, re.MULTILINE).findall(data)
for scrapedurl, scrapedtitle, scrapedthumbnail in matches:
scrapedplot = ""
scrapedtitle = scrapertools.decodeHtmlentities(scrapedtitle)
scrapedtitle = scrapedtitle.replace("streaming", "").replace("Permalink to ", "")
for url, title, thumb in matches:
title = scrapertoolsV2.decodeHtmlentities(title)
itemlist.append( itemlist.append(
Item(channel=item.channel, Item(channel=item.channel,
action="findvideos", action=action,
contentType="movie", contentType=item.contentType,
fulltitle=scrapedtitle, fulltitle=title,
show=scrapedtitle, show=title,
title="[COLOR azure]" + scrapedtitle + "[/COLOR]", title=title,
url=scrapedurl, url=url,
thumbnail=scrapedthumbnail, thumbnail=thumb,
plot=scrapedplot, args=item.args))
folder=True))
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
return itemlist return itemlist
def search_peliculas_tv(item): def category(item):
logger.info("kod.tantifilm search_peliculas") blacklist = ['Serie TV Altadefinizione', 'HD AltaDefinizione', 'Al Cinema', 'Serie TV', 'Miniserie', 'Programmi Tv', 'Live', 'Trailers', 'Serie TV Aggiornate', 'Aggiornamenti', 'Featured']
itemlist = [] 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)
# Carica la pagina
data = httptools.downloadpage(item.url, headers=headers).data
# Estrae i contenuti
patron = '<a href="([^"]+)" title="([^"]+)" rel="[^"]+">\s*<img[^s]+src="(.*?)"'
matches = re.compile(patron, re.DOTALL).findall(data)
for scrapedurl, scrapedtitle, scrapedthumbnail in matches:
scrapedplot = ""
scrapedtitle = scrapertools.decodeHtmlentities(scrapedtitle)
scrapedtitle = scrapedtitle.replace("streaming", "").replace("Permalink to ", "")
itemlist.append(
Item(channel=item.channel,
action="episodios",
fulltitle=scrapedtitle,
show=scrapedtitle,
title="[COLOR azure]" + scrapedtitle + "[/COLOR]",
url=scrapedurl,
thumbnail=scrapedthumbnail,
plot=scrapedplot,
folder=True))
return itemlist
def peliculas(item): def peliculas(item):
logger.info("kod.tantifilm peliculas") log()
itemlist = [] action = 'findvideos' if item.extra == 'movie' else 'episodios'
if item.args == 'movie':
# Carica la pagina patron= r'<div class="mediaWrap mediaWrapAlt">[^<]+<a href="([^"]+)" title="Permalink to\s([^"]+) \([^<]+\).*?"[^>]+>[^<]+<img[^s]+src="([^"]+)"[^>]+>[^<]+<\/a>'
data = httptools.downloadpage(item.url, headers=headers).data itemlist = support.scrape(item, patron, ['url', 'title', 'thumb'], headers, action=action, patronNext='<a class="nextpostslink" rel="next" href="([^"]+)">')
else:
# Estrae i contenuti patron = r'<div class="media3">[^>]+><a href="([^"]+)"><img[^s]+src="([^"]+)"[^>]+><\/a><[^>]+><a[^>]+><p>([^(:?\(|>]+)'
patron = '<div class="media3">[^>]+><a href="([^"]+)"><img[^s]+src="([^"]+)"[^>]+></a><[^>]+><a[^>]+><p>(.*?)</p></a></div>' itemlist = support.scrape(item, patron, ['url', 'thumb', 'title'], headers, action=action, patronNext='<a class="nextpostslink" rel="next" href="([^"]+)">')
matches = re.compile(patron, re.DOTALL).findall(data) return autorenumber.renumber(itemlist) if item.args == 'anime' else itemlist
for scrapedurl, scrapedthumbnail, scrapedtitle in matches:
html = httptools.downloadpage(scrapedurl, headers=headers).data
start = html.find("<div class=\"content-left-film\">")
end = html.find("</div>", 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 = '<a class="nextpostslink".*?href="([^"]+)"' ### <- Fix Pagina successiva '<a class="nextpostslink" rel="next" href="([^"]+)">»</a>'
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 = '<div class="media3">[^>]+><a href="([^"]+)"><img[^s]+src="([^"]+)"[^>]+></a><[^>]+><a[^>]+><p>(.*?)</p></a></div>'
matches = re.compile(patron, re.DOTALL).findall(data)
for scrapedurl, scrapedthumbnail, scrapedtitle in matches:
html = httptools.downloadpage(scrapedurl, headers=headers).data
start = html.find("<div class=\"content-left-film\">")
end = html.find("</div>", 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 = '<a class="nextpostslink" rel="next" href="([^"]+)">»</a>'
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 = '<div class="mediaWrap mediaWrapAlt">\s*'
patron += '<a href="([^"]+)" title="([^"]+)" rel="bookmark">\s*'
patron += '<img[^s]+src="([^"]+)"[^>]+>'
matches = re.compile(patron, re.DOTALL).findall(data)
for scrapedurl, scrapedtitle, scrapedthumbnail in matches:
html = httptools.downloadpage(scrapedurl, headers=headers).data
start = html.find("<div class=\"content-left-film\">")
end = html.find("</div>", 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 = '<a class="nextpostslink" rel="next" href="([^"]+)">»</a>'
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
def episodios(item): def episodios(item):
def load_episodios(html, item, itemlist): log()
for data in html.splitlines():
# Estrae i contenuti
end = data.find('<a ')
if end > 0:
scrapedtitle = re.sub(r'<[^>]*>', '', data[:end]).strip()
else:
scrapedtitle = ''
if scrapedtitle == '':
patron = '<a\s*href="[^"]+"(?:\s*target="_blank")?>([^<]+)</a>'
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")
itemlist = [] itemlist = []
if item.args == 'anime': return anime(item)
data = httptools.downloadpage(item.url, headers=headers).data data = httptools.downloadpage(item.url).data
data = scrapertools.decodeHtmlentities(data)
start = data.find('<div class="sp-wrap sp-wrap-blue">') # Check if is series
end = data.find('<div id="disqus_thread">', start) 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)
data_sub = data[start:end] 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)
starts = [] log('URL =', url)
patron = r".*?STAGIONE|MINISERIE|WEBSERIE|SERIE" 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]
matches = re.compile(patron, re.IGNORECASE).finditer(data_sub)
for match in matches: for season_url, season in seasons:
season_title = match.group() season_url = urlparse.urljoin(url, season_url)
if season_title != '': 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]
starts.append(match.end()) for episode_url, episode in episodes:
episode_url = urlparse.urljoin(url, episode_url)
i = 1 title = season + "x" + episode.zfill(2)
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 = '<a href="(#wpwm-tabs-\d+)">([^<]+)</a></li>'
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('<div class="clearfix"></div>', start)
html = data[start:end]
itemlist.append( itemlist.append(
Item(channel=item.channel, Item(channel=item.channel,
action="findvideos", action="findvideos",
contentType="episode", contentType=item.contentType,
title=scrapedtitle, title=support.typo(title + ' - ' + item.fulltitle,'bold'),
url=html, url=episode_url,
thumbnail=item.thumbnail, fulltitle=title + ' - ' + item.show,
extra=item.extra, show=item.show,
fulltitle=item.fulltitle, thumbnail=item.thumbnail))
show=item.show))
if config.get_videolibrary_support() and len(itemlist) != 0: support.videolibrary(itemlist, item, 'color kod bold')
itemlist.append(
Item(channel=item.channel, return itemlist
title="[COLOR lightblue]%s[/COLOR]" % config.get_localized_string(30161),
url=item.url, def anime(item):
action="add_serie_to_library", log()
extra="episodios", itemlist = []
show=item.show))
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 return itemlist
def findvideos(item): def findvideos(item):
logger.info("kod.tantifilm findvideos") log()
itemlist = []
# Carica la pagina if item.args == 'anime':
data = item.url if item.contentType == "episode" else httptools.downloadpage(item.url, headers=headers).data data = item.url
else:
data = httptools.downloadpage(item.url, headers=headers).data
if 'protectlink' in data: # Check if is series
urls = scrapertools.find_multiple_matches(data, r'<iframe src="[^=]+=(.*?)"') check = scrapertoolsV2.find_single_match(data.replace('\t','').replace('\n',''), r'<div class="category-film"><h3>([^<]+)<\/h3>')
for url in urls: if 'serie tv' in check.lower(): return episodios(item)
url = url.decode('base64') elif 'anime' in check.lower(): return anime(item)
data += '\t' + url
url, c = unshorten_only(url)
data += '\t' + url
itemlist = servertools.find_video_items(data=data)
for videoitem in itemlist:
videoitem.title = item.title + videoitem.title
videoitem.fulltitle = item.fulltitle
videoitem.thumbnail = item.thumbnail
videoitem.show = item.show
videoitem.plot = item.plot
videoitem.channel = item.channel
videoitem.contentType = item.contentType
videoitem.language = IDIOMAS['Italiano']
# Requerido para Filtrar enlaces
if __comprueba_enlaces__:
itemlist = servertools.check_list_links(itemlist, __comprueba_enlaces_num__)
# Requerido para FilterTools
# itemlist = filtertools.get_links(itemlist, item, list_language)
# Requerido para AutoPlay
autoplay.start(itemlist, item)
if item.contentType != 'episode':
if config.get_videolibrary_support() and len(itemlist) > 0 and item.extra != 'findvideos':
itemlist.append(
Item(channel=item.channel, title='[COLOR yellow][B]Aggiungi alla videoteca[/B][/COLOR]', url=item.url,
action="add_pelicula_to_library", extra="findvideos", contentTitle=item.contentTitle))
# Estrae i contenuti
patron = r'\{"file":"([^"]+)","type":"[^"]+","label":"([^"]+)"\}'
matches = re.compile(patron, re.DOTALL).findall(data)
for scrapedurl, scrapedtitle in matches:
title = item.title + " " + scrapedtitle + " quality"
itemlist.append(
Item(channel=item.channel,
action="play",
title=title,
url=scrapedurl.replace(r'\/', '/').replace('%3B', ';'),
thumbnail=item.thumbnail,
fulltitle=item.title,
show=item.title,
server='',
contentType=item.contentType,
folder=False))
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="([^=]+)">')
itemlist= support.server(item, data, headers, True, True)
support.videolibrary(itemlist, item, 'color kod bold')
return itemlist return itemlist
+8 -3
View File
@@ -715,6 +715,7 @@ def check_list_links(itemlist, numero='', timeout=3):
if numero > 0 and it.server != '' and it.url != '': if numero > 0 and it.server != '' and it.url != '':
verificacion = check_video_link(it.url, it.server, timeout) verificacion = check_video_link(it.url, it.server, timeout)
it.title = verificacion + ' ' + it.title.strip() it.title = verificacion + ' ' + it.title.strip()
logger.info('VERIFICATION= '+ verificacion)
it.alive = verificacion it.alive = verificacion
numero -= 1 numero -= 1
return itemlist return itemlist
@@ -726,9 +727,13 @@ def check_video_link(url, server, timeout=3):
:return: str(2) '??':No se ha podido comprobar. 'Ok':Parece que el link funciona. 'NO':Parece que no funciona. :return: str(2) '??':No se ha podido comprobar. 'Ok':Parece que el link funciona. 'NO':Parece que no funciona.
""" """
NK = "[COLOR 0xFFF9B613][B]" + u'\u25cf' + "[/B][/COLOR]" # NK = "[COLOR 0xFFF9B613][B]" + u"\u25cf" + "[/B][/COLOR]"
OK = "[COLOR 0xFF00C289][B]" + u'\u25cf' + "[/B][/COLOR]" # OK = "[COLOR 0xFF00C289][B]" + u"\u25cf" + "[/B][/COLOR]"
KO = "[COLOR 0xFFC20000][B]" + u'\u25cf' + "[/B][/COLOR]" # KO = "[COLOR 0xFFC20000][B]" + u"\u25cf" + "[/B][/COLOR]"
NK = "[COLOR 0xFFF9B613][B]O[/B][/COLOR]"
OK = "[COLOR 0xFF00C289][B]O[/B][/COLOR]"
KO = "[COLOR 0xFFC20000][B]O[/B][/COLOR]"
try: try:
server_module = __import__('servers.%s' % server, None, None, ["servers.%s" % server]) server_module = __import__('servers.%s' % server, None, None, ["servers.%s" % server])
+11 -10
View File
@@ -337,19 +337,20 @@ if __name__ == "__main__":
logger.info("DEV MODE OFF") logger.info("DEV MODE OFF")
from platformcode import updater from platformcode import updater
updater.check_addon_init() updater.check_addon_init()
# Copia Custom code a las carpetas de Alfa desde la zona de Userdata
from platformcode import custom_code
custom_code.init()
# Identifica la dirección Proxy y la lista de alternativas
from core import proxytools
proxytools.get_proxy_list()
if not config.get_setting("update", "videolibrary") == 2:
check_for_update(overwrite=False)
else: else:
logger.info("DEV MODE ON") logger.info("DEV MODE ON")
# Copia Custom code a las carpetas de Alfa desde la zona de Userdata
from platformcode import custom_code
custom_code.init()
# Identifica la dirección Proxy y la lista de alternativas
from core import proxytools
proxytools.get_proxy_list()
if not config.get_setting("update", "videolibrary") == 2:
check_for_update(overwrite=False)
# Se ejecuta ciclicamente # Se ejecuta ciclicamente
if config.get_platform(True)['num_version'] >= 14: if config.get_platform(True)['num_version'] >= 14:
monitor = xbmc.Monitor() # For Kodi >= 14 monitor = xbmc.Monitor() # For Kodi >= 14