Aggiunto AnimeSubIta, fix support

This commit is contained in:
Alhaziel
2019-08-21 18:09:13 +02:00
parent 037bf6525d
commit 7f34e64efb
5 changed files with 109 additions and 265 deletions
+32
View File
@@ -31,6 +31,38 @@
"default": true, "default": true,
"enabled": true, "enabled": true,
"visible": true "visible": true
}, {
"id": "checklinks",
"type": "bool",
"label": "Verifica se i link esistono",
"default": false,
"enabled": true,
"visible": true
},
{
"id": "checklinks_number",
"type": "list",
"label": "Numero de link da verificare",
"default": 1,
"enabled": true,
"visible": "eq(-1,true)",
"lvalues": [ "1", "3", "5", "10" ]
},
{
"id": "autorenumber",
"type": "bool",
"label": "@70712",
"default": false,
"enabled": true,
"visible": true
},
{
"id": "autorenumber_mode",
"type": "bool",
"label": "@70688",
"default": false,
"enabled": true,
"visible": "eq(-1,true)"
} }
] ]
} }
+68 -255
View File
@@ -1,7 +1,5 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Ringraziamo Icarus crew
# ------------------------------------------------------------ # ------------------------------------------------------------
# Ringraziamo Icarus crew
# Canale per AnimeSubIta # Canale per AnimeSubIta
# ------------------------------------------------------------ # ------------------------------------------------------------
@@ -12,45 +10,25 @@ import urlparse
from core import httptools, scrapertools, tmdb, support from core import httptools, scrapertools, tmdb, support
from core.item import Item from core.item import Item
from platformcode import logger, config from platformcode import logger, config
from core import support
__channel__ = "animesubita" __channel__ = "animesubita"
host = config.get_channel_url(__channel__) host = support.config.get_channel_url(__channel__)
PERPAGE = 20 headers = {'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0'}
# ---------------------------------------------------------------------------------------------------------------- list_servers = ['directo']
list_quality = ['default']
@support.menu
def mainlist(item): def mainlist(item):
logger.info() anime = ['/lista-anime/',
itemlist = [Item(channel=item.channel, ('Ultimi Episodi',['/category/ultimi-episodi/', 'peliculas', 'updated']),
action="lista_anime_completa", ('in Corso',['/category/anime-in-corso/', 'peliculas', 'alt']),
title=support.color("Lista Anime", "azure"), ('Generi',['/generi/', 'genres', 'alt'])]
url="%s/lista-anime/" % host, return locals()
thumbnail="http://orig03.deviantart.net/6889/f/2014/079/7/b/movies_and_popcorn_folder_icon_by_matheusgrilo-d7ay4tw.png"),
Item(channel=item.channel,
action="ultimiep",
title=support.color("Ultimi Episodi", "azure"),
url="%s/category/ultimi-episodi/" % 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,
action="lista_anime",
title=support.color("Anime in corso", "azure"),
url="%s/category/anime-in-corso/" % 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,
action="categorie",
title=support.color("Categorie", "azure"),
url="%s/generi/" % 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,
action="search",
title=support.color("Cerca anime ...", "yellow"),
extra="anime",
thumbnail="http://dc467.4shared.com/img/fEbJqOum/s7/13feaf0c8c0/Search")
]
return itemlist
# ================================================================================================================
# ----------------------------------------------------------------------------------------------------------------
def newest(categoria): def newest(categoria):
logger.info() logger.info()
itemlist = [] itemlist = []
@@ -58,8 +36,8 @@ def newest(categoria):
try: try:
if categoria == "anime": if categoria == "anime":
item.url = host item.url = host
item.action = "ultimiep" item.args = "updated"
itemlist = ultimiep(item) itemlist = peliculas(item)
if itemlist[-1].action == "ultimiep": if itemlist[-1].action == "ultimiep":
itemlist.pop() itemlist.pop()
@@ -72,13 +50,13 @@ def newest(categoria):
return itemlist return itemlist
# ================================================================================================================
# ----------------------------------------------------------------------------------------------------------------
def search(item, texto): def search(item, texto):
logger.info() logger.info()
item.url = host + "/?s=" + texto item.url = host + "/?s=" + texto
item.args = 'alt'
try: try:
return lista_anime(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
@@ -87,9 +65,13 @@ def search(item, texto):
return [] return []
# ================================================================================================================ @support.scrape
def genres(item):
blacklist= ['Anime In Corso','Ultimi Episodi']
patronMenu=r'<li><a title="[^"]+" href="(?P<url>[^"]+)">(?P<title>[^<]+)</a>'
action = 'peliculas'
return locals()
# ----------------------------------------------------------------------------------------------------------------
def categorie(item): def categorie(item):
logger.info() logger.info()
itemlist = [] itemlist = []
@@ -110,234 +92,65 @@ def categorie(item):
return itemlist return itemlist
# ================================================================================================================
# ----------------------------------------------------------------------------------------------------------------
def ultimiep(item):
logger.info("ultimiep")
itemlist = lista_anime(item, False, False)
for itm in itemlist:
title = scrapertools.decodeHtmlentities(itm.title)
# Pulizia titolo
title = title.replace("Streaming", "").replace("&", "")
title = title.replace("Download", "")
title = title.replace("Sub Ita", "").strip()
eptype = scrapertools.find_single_match(title, "((?:Episodio?|OAV))")
cleantitle = re.sub(r'%s\s*\d*\s*(?:\(\d+\)|)' % eptype, '', title).strip()
# Creazione URL
url = re.sub(r'%s-?\d*-' % eptype.lower(), '', itm.url)
if "-streaming" not in url:
url = url.replace("sub-ita", "sub-ita-streaming")
epnumber = ""
if 'episodio' in eptype.lower():
epnumber = scrapertools.find_single_match(title.lower(), r'episodio?\s*(\d+)')
eptype += ":? " + epnumber
extra = "<tr>\s*<td[^>]+><strong>(?:[^>]+>|)%s(?:[^>]+>[^>]+>|[^<]*|[^>]+>)</strong>" % eptype
itm.title = support.color(title, 'azure').strip()
itm.action = "findvideos"
itm.url = url
itm.fulltitle = cleantitle
itm.extra = extra
itm.show = re.sub(r'Episodio\s*', '', title)
itm.thumbnail = item.thumbnail
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
return itemlist
# ================================================================================================================
# ----------------------------------------------------------------------------------------------------------------
def lista_anime(item, nextpage=True, show_lang=True):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
blocco = scrapertools.find_single_match(data, r'<div class="post-list group">(.*?)</nav><!--/.pagination-->')
# patron = r'<a href="([^"]+)" title="([^"]+)">\s*<img[^s]+src="([^"]+)"[^>]+>' # Patron con thumbnail, Kodi non scarica le immagini dal sito
patron = r'<a href="([^"]+)" title="([^"]+)">'
matches = re.compile(patron, re.DOTALL).findall(blocco)
for scrapedurl, scrapedtitle in matches:
scrapedtitle = scrapertools.decodeHtmlentities(scrapedtitle)
scrapedtitle = re.sub(r'\s+', ' ', scrapedtitle)
# Pulizia titolo
scrapedtitle = scrapedtitle.replace("Streaming", "").replace("&", "")
scrapedtitle = scrapedtitle.replace("Download", "")
lang = scrapertools.find_single_match(scrapedtitle, r"([Ss][Uu][Bb]\s*[Ii][Tt][Aa])")
scrapedtitle = scrapedtitle.replace("Sub Ita", "").strip()
eptype = scrapertools.find_single_match(scrapedtitle, "((?:Episodio?|OAV))")
cleantitle = re.sub(r'%s\s*\d*\s*(?:\(\d+\)|)' % eptype, '', scrapedtitle)
cleantitle = cleantitle.replace(lang, "").strip() @support.scrape
def peliculas(item):
anime = True
if item.args == 'updated':
patron = r'<div class="post-thumbnail">\s*<a href="(?P<url>[^"]+)" title="(?P<title>.*?)\s*(?P<episode>Episodio \d+)[^"]+"[^>]*>\s*<img[^src]+src="(?P<thumb>[^"]+)"'
patronNext = r'<link rel="next" href="([^"]+)"\s*/>'
action = 'findvideos'
elif item.args == 'alt':
# debug = True
patron = r'<div class="post-thumbnail">\s*<a href="(?P<url>[^"]+)" title="(?P<title>.*?)(?: [Oo][Aa][Vv])?(?:\s*(?P<lang>[Ss][Uu][Bb].[Ii][Tt][Aa]))[^"]+">\s*<img[^src]+src="(?P<thumb>[^"]+)"'
patronNext = r'<link rel="next" href="([^"]+)"\s*/>'
action = 'episodios'
else:
pagination = ''
patronBlock = r'<ul class="lcp_catlist"[^>]+>(?P<block>.*?)</ul>'
patron = r'<a href="(?P<url>[^"]+)"[^>]+>(?P<title>.*?)(?: [Oo][Aa][Vv])?(?:\s*(?P<lang>[Ss][Uu][Bb].[Ii][Tt][Aa])[^<]+)?</a>'
action = 'episodios'
return locals()
itemlist.append( @support.scrape
Item(channel=item.channel, def episodios(item):
action="episodi", anime = True
contentType="tvshow" if 'oav' not in scrapedtitle.lower() else "movie", patron = r'<td style="[^"]*?">\s*.*?<strong>(?P<episode>[^<]+)</strong>\s*</td>\s*<td[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>\s*<img src="(?P<thumb>[^"]+?)"[^>]+>'
title=scrapedtitle.replace(lang, "(%s)" % support.color(lang, "red") if show_lang else "").strip(), return locals()
fulltitle=cleantitle,
url=scrapedurl,
show=cleantitle,
folder=True))
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
if nextpage:
patronvideos = r'<link rel="next" href="([^"]+)"\s*/>'
matches = re.compile(patronvideos, re.DOTALL).findall(data)
if len(matches) > 0:
scrapedurl = matches[0]
itemlist.append(
Item(channel=item.channel,
action="lista_anime",
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))
return itemlist
# ================================================================================================================
# ----------------------------------------------------------------------------------------------------------------
def lista_anime_completa(item):
logger.info()
itemlist = []
p = 1
if '{}' in item.url:
item.url, p = item.url.split('{}')
p = int(p)
data = httptools.downloadpage(item.url).data
blocco = scrapertools.find_single_match(data, r'<ul class="lcp_catlist"[^>]+>(.*?)</ul>')
patron = r'<a href="([^"]+)"[^>]+>([^<]+)</a>'
matches = re.compile(patron, re.DOTALL).findall(blocco)
for i, (scrapedurl, scrapedtitle) in enumerate(matches):
if (p - 1) * PERPAGE > i: continue
if i >= p * PERPAGE: break
scrapedtitle = scrapertools.decodeHtmlentities(scrapedtitle.strip())
cleantitle = scrapedtitle.replace("Sub Ita Streaming", "").replace("Ita Streaming", "")
itemlist.append(
Item(channel=item.channel,
action="episodi",
contentType="tvshow" if 'oav' not in scrapedtitle.lower() else "movie",
title=support.color(scrapedtitle, 'azure'),
fulltitle=cleantitle,
show=cleantitle,
url=scrapedurl,
folder=True))
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
if len(matches) >= p * PERPAGE:
scrapedurl = item.url + '{}' + str(p + 1)
itemlist.append(
Item(channel=item.channel,
extra=item.extra,
action="lista_anime_completa",
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))
return itemlist
# ================================================================================================================
# ----------------------------------------------------------------------------------------------------------------
def episodi(item):
logger.info()
itemlist = []
data = httptools.downloadpage(item.url).data
patron = '<td style="[^"]*?">\s*.*?<strong>(.*?)</strong>.*?\s*</td>\s*<td style="[^"]*?">\s*<a href="([^"]+?)"[^>]+>\s*<img.*?src="([^"]+?)".*?/>\s*</a>\s*</td>'
matches = re.compile(patron, re.DOTALL).findall(data)
for scrapedtitle, scrapedurl, scrapedimg in matches:
if 'nodownload' in scrapedimg or 'nostreaming' in scrapedimg:
continue
if 'vvvvid' in scrapedurl.lower():
itemlist.append(Item(title='I Video VVVVID Non sono supportati'))
continue
scrapedtitle = scrapertools.decodeHtmlentities(scrapedtitle)
scrapedtitle = re.sub(r'<[^>]*?>', '', scrapedtitle)
scrapedtitle = '[COLOR azure][B]' + scrapedtitle + '[/B][/COLOR]'
itemlist.append(
Item(channel=item.channel,
action="findvideos",
contentType="episode",
title=scrapedtitle,
url=urlparse.urljoin(host, scrapedurl),
fulltitle=item.title,
show=scrapedtitle,
plot=item.plot,
fanart=item.thumbnail,
thumbnail=item.thumbnail))
# Comandi di servizio
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
# ================================================================================================================
# ----------------------------------------------------------------------------------------------------------------
def findvideos(item): def findvideos(item):
logger.info() support.log(item)
itemlist = [] itemlist = []
headers = {'Upgrade-Insecure-Requests': '1', if item.args == 'updated':
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0'} ep = support.match(item.fulltitle,r'(Episodio\s*\d+)')[0][0]
item.url = support.re.sub(r'episodio-\d+-|oav-\d+-', '',item.url)
if 'streaming' not in item.url: item.url = item.url.replace('sub-ita','sub-ita-streaming')
item.url = support.match(item, r'<a href="([^"]+)"[^>]+>', ep + '(.*?)</tr>', )[0][0]
if item.extra: urls = support.match(item.url, r'(episodio\d*.php.*)')[0]
data = httptools.downloadpage(item.url, headers=headers).data for url in urls:
blocco = scrapertools.find_single_match(data, r'%s(.*?)</tr>' % item.extra) url = host + '/' + url
item.url = scrapertools.find_single_match(blocco, r'<a href="([^"]+)"[^>]+>')
patron = r'http:\/\/link[^a]+animesubita[^o]+org\/[^\/]+\/.*?(episodio\d*)[^p]+php(\?.*)'
for phpfile, scrapedurl in re.findall(patron, item.url, re.DOTALL):
url = "%s/%s.php%s" % (host, phpfile, scrapedurl)
headers['Referer'] = url headers['Referer'] = url
data = httptools.downloadpage(url, headers=headers).data data = support.match(item, headers=headers, url=url)[1]
# ------------------------------------------------
cookies = "" cookies = ""
matches = re.compile('(.%s.*?)\n' % host.replace("http://", "").replace("www.", ""), re.DOTALL).findall(config.get_cookie_data()) matches = support.re.compile('(.%s.*?)\n' % host.replace("http://", "").replace("www.", ""), re.DOTALL).findall(config.get_cookie_data())
for cookie in matches: for cookie in matches:
name = cookie.split('\t')[5] cookies += cookie.split('\t')[5] + "=" + cookie.split('\t')[6] + ";"
value = cookie.split('\t')[6]
cookies += name + "=" + value + ";"
headers['Cookie'] = cookies[:-1] headers['Cookie'] = cookies[:-1]
# ------------------------------------------------
scrapedurl = scrapertools.find_single_match(data, r'<source src="([^"]+)"[^>]+>') url = support.match(data, r'<source src="([^"]+)"[^>]+>')[0][0] + '|' + urllib.urlencode(headers)
url = scrapedurl + '|' + urllib.urlencode(headers)
itemlist.append( itemlist.append(
Item(channel=item.channel, Item(channel=item.channel,
action="play", action="play",
text_color="azure", title='diretto',
title="[%s] %s" % (support.color("Diretto", "orange"), item.title), quality='',
fulltitle=item.fulltitle,
url=url, url=url,
thumbnail=item.thumbnail, server='directo',
fanart=item.thumbnail, fulltitle=item.fulltitle,
plot=item.plot)) show=item.show))
return itemlist return support.server(item,url,itemlist)
+5 -6
View File
@@ -731,9 +731,9 @@ def videolibrary(itemlist, item, typography='', function_level=1, function=''):
# Simply add this function to add video library support # Simply add this function to add video library support
# Function_level is useful if the function is called by another function. # Function_level is useful if the function is called by another function.
# If the call is direct, leave it blank # If the call is direct, leave it blank
log(item) log()
if item.contentType != 'episode': if item.contentType == 'movie':
action = 'add_pelicula_to_library' action = 'add_pelicula_to_library'
extra = 'findvideos' extra = 'findvideos'
contentType = 'movie' contentType = 'movie'
@@ -742,8 +742,7 @@ def videolibrary(itemlist, item, typography='', function_level=1, function=''):
extra = 'episodios' extra = 'episodios'
contentType = 'tvshow' contentType = 'tvshow'
log('FUNCTION = ',function) function = function if function else inspect.stack()[function_level][3]
if not typography: typography = 'color kod bold' if not typography: typography = 'color kod bold'
@@ -751,8 +750,8 @@ def videolibrary(itemlist, item, typography='', function_level=1, function=''):
contentSerieName=item.contentSerieName if item.contentSerieName else '' contentSerieName=item.contentSerieName if item.contentSerieName else ''
contentTitle=item.contentTitle if item.contentTitle else '' contentTitle=item.contentTitle if item.contentTitle else ''
if (inspect.stack()[function_level][3] == 'findvideos' and contentType == 'movie' \ if (function == 'findvideos' and contentType == 'movie') \
or inspect.stack()[function_level][3] != 'findvideos' and contentType != 'movie'): or (function == 'episodios' and contentType != 'movie'):
if config.get_videolibrary_support() and len(itemlist) > 0: if config.get_videolibrary_support() and len(itemlist) > 0:
itemlist.append( itemlist.append(
Item(channel=item.channel, Item(channel=item.channel,
Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB