Files
addon/channels/animeworld.py
greko 3eaf36d3e4 New scrape (#63)
* fix canale

* fix newest

* fix numero puntata

* experimental scrape as decorator

* prova su support.scrape e modifiche

* uso del decoratore support.scrape

Scritto guardaserieclick con supporto del decoratore
Modificato:
 - eurostreaming.py per piccoli fix
 - Support.py per fix oltre che a portarlo allo stato del master
 - zcrypt - bit.ly non funziona. DA FIXARE!!!

* migliorato codice

Tentativo vano di inserire autorenumber per gli anime

* New scrape (#55)

* fix canale

* fix newest

* fix numero puntata

* Fix Animeworld

* Nuovo Autorenumber

* initial background downloader support

* ops

* Update channels.json

* Update channels.json

* fix openload

* move json update to cohesist with updater

* disable json url updates

* prova su support.scrape e modifiche

* uso del decoratore support.scrape

Scritto guardaserieclick con supporto del decoratore
Modificato:
 - eurostreaming.py per piccoli fix
 - Support.py per fix oltre che a portarlo allo stato del master
 - zcrypt - bit.ly non funziona. DA FIXARE!!!

* migliorato codice

Tentativo vano di inserire autorenumber per gli anime

* fix autoplay in altadefinizioneLink

* camel case

* decoratore per i menu

* altadefinizione01 C

* Decoratore Menu e Altadefinizione01_C e _L

modifiche a support.menu per fix e scrittura dei canali:

	- Altadefinizione01_C
	- Altadefinizione01_L
per il supporto dei decoratori:
	- menu
	- scrape

* eliminato listGroup in favore dei nomi dei gruppi nelle regex

* cambio struttura in support.menu()

* cambio struttura in support.menu()

* supporto completo per i decoratori

Riscritti i canali per il supporto ai decoratori e alle sole regex:
	- Altadefinizione01_C
	- Altadefinizione01_L

* AltadefinizioneClick - altadefinizione01 e piccoli fix
	modified:   channels/altadefinizione01.py
	modified:   channels/altadefinizione01_club.py
	modified:   channels/altadefinizione01_link.py
	modified:   channels/altadefinizioneclick.py

* NewScrape  (#62)

* fix typo

* fix typo 2

* Add files via upload

* Add files via upload

* fix autoplay in community channels

* fix toonitalia

* Fix Toonitalia

* workaround serietvsubita

* Nuova Rinumerazione Automatica

* Fix per Rinumerazione Automatica

* workaround updater

* kod stable 0.3.1

* aggiunti nuovi file

* channel e custom json

* aggiunto bit.ly

* Fix on air

* ops

* Personalizzazione sezione "Oggi in TV"

* Aggiunto orario sezione Oggi in TV

* aggiunto bit.ly (#56)

* aggiunto bit.ly

* Aggiunta personalizzazione homepage

* Revert "initial background downloader support"

This reverts commit f676ab0f

* KoD 0.4

* KoD 0.4 (#57)

* fix next page

* testing new filmontv

* Wstream quick fix, no resolution displayed :(

* new filmontv

* now regex is ok

* fix .po files

* +netlovers

* working on filmontv

* fix debriders

* new updater

* updater

* fix crash

* fix updater and re-add dev mode

* new url eurostreaming

* Delete netlovers.py

* Delete netlovers.json

* -net from menù

* fix eurostreaming: numero stagione e newest (#50)

* fix canale

* fix newest

* fix numero puntata

* cleanup

* cleanup 2

* fix updater crash on windows

* Fix Animeworld

* Nuovo Autorenumber

* initial background downloader support

* ops

* Update channels.json

* Update channels.json

* fix openload

* move json update to cohesist with updater

* disable json url updates

* fix typo

* fix typo 2

* Add files via upload

* Add files via upload

* fix autoplay in community channels

* fix toonitalia

* Fix Toonitalia

* workaround serietvsubita

* Nuova Rinumerazione Automatica

* Fix per Rinumerazione Automatica

* workaround updater

* Fix on air

* ops

* Personalizzazione sezione "Oggi in TV"

* Aggiunto orario sezione Oggi in TV

* aggiunto bit.ly (#56)

* aggiunto bit.ly

* Aggiunta personalizzazione homepage

* Revert "initial background downloader support"

This reverts commit f676ab0f

* KoD 0.4

* stable

* Rimossa dipendenza inutile

* fix per i link bit.ly

sperando non ricambiano...

* Update updater.py

* update

* Fix Numerazione Automatica

* possible fix badZipFile on android

* possible fix crash if no internet connection

* try except unzipper -> workaround

* KoD 0.4.1

* Fix Numerazione Automatica

* Fix ricerca CB01

* pagination fix

* fix per bit.ly e fix di alcuni canali

* Cambio dominio per FilmPerTutti

* Fix per Wstream

* miglioramenti vari updater + fix definitivo android

* Fix Ricerca per Altadefinizione01

* Revert "Merge branch 'stable' of https://github.com/kodiondemand/addon into stable"

This reverts commit cf50d10a00, reversing
changes made to 4a695c096c.

* Revert "Revert "Merge branch 'stable' of https://github.com/kodiondemand/addon into stable""

This reverts commit cd19484c70.

* Rimosso canale non più funzionante

* Update addon.xml

* da master a newScrape (#38)

* Fix Numerazione Automatica

* possible fix badZipFile on android

* possible fix crash if no internet connection

* try except unzipper -> workaround

* KoD 0.4.1

* Fix Numerazione Automatica

* Fix CB01

* pagination fix

* Fix altadefinizione01_club e alcune mod a support

Il canale è stato riscritto per support, così è pronto per il decoratore.
Aggiunti dei fix a support altrimenti mi dava la lingua sub-ita a tutti i film successivi
di un film sub-ita

* fix di alcuni canali

	modified:   animesubita.py
	modified:   cinetecadibologna.py
	modified:   filmpertutti.json
	modified:   guardarefilm.py
	modified:   istitutoluce.py
	modified:   italiaserie.py

* fix per bit.ly (#58)

fix per bit.ly e fix di alcuni canali

* Cambio dominio per FilmPerTutti

* miglioramenti vari updater + fix definitivo android

* Fix per Wstream

* fix updater

* Fix Ricerca per Altadefinizione01

* Rimosso canale non più funzionante

* fix altadefinizione01 C

* fix altadefinizione01_C

* altadefinizione01 C fix regex
2019-07-17 21:36:14 +02:00

318 lines
11 KiB
Python

# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per animeworld
# ----------------------------------------------------------
import re
import time
import urllib
import urlparse
from core import httptools, scrapertoolsV2, servertools, tmdb, support, jsontools
from core.support import log
from core.item import Item
from platformcode import logger, config
from specials import autoplay, autorenumber
__channel__ = "animeworld"
host = config.get_channel_url(__channel__)
headers = [['Referer', host]]
IDIOMAS = {'Italiano': 'Italiano'}
list_language = IDIOMAS.values()
list_servers = ['animeworld', 'verystream', 'streamango', 'openload', 'directo']
list_quality = ['default', '480p', '720p', '1080p']
def mainlist(item):
log()
itemlist =[]
support.menu(itemlist, 'ITA submenu bold', 'build_menu', host + '/filter?', args=["anime", 'language[]=1'])
support.menu(itemlist, 'Sub-ITA submenu bold', 'build_menu', host + '/filter?', args=["anime", 'language[]=0'])
support.menu(itemlist, 'Archivio A-Z submenu', 'alfabetico', host+'/az-list', args=["tvshow","a-z"])
support.menu(itemlist, 'In corso submenu', 'video', host+'/', args=["in sala"])
support.menu(itemlist, 'Generi submenu', 'generi', host+'/')
support.menu(itemlist, 'Ultimi Aggiunti bold', 'video', host+'/newest', args=["anime"])
support.menu(itemlist, 'Ultimi Episodi bold', 'video', host+'/updated', args=["novita'"])
support.menu(itemlist, 'Cerca...', 'search')
support.aplay(item, itemlist, list_servers, list_quality)
support.channel_config(item, itemlist)
return itemlist
# Crea menu dei generi =================================================
def generi(item):
log()
patronBlock = r'</i>\sGeneri</a>\s*<ul class="sub">(.*?)</ul>'
patron = r'<a href="([^"]+)"\stitle="([^"]+)">'
return support.scrape(item, patron, ['url','title'], patronBlock=patronBlock, action='video')
# Crea Menu Filtro ======================================================
def build_menu(item):
log()
itemlist = []
support.menu(itemlist, 'Tutti bold submenu', 'video', item.url+item.args[1])
matches, data = support.match(item,r'<button class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown"> (.*?) <span.*?>(.*?)<\/ul>',r'<form class="filters.*?>(.*?)<\/form>')
log('ANIME DATA =' ,data)
for title, html in matches:
if title not in 'Lingua Ordine':
support.menu(itemlist, title + ' submenu bold', 'build_sub_menu', html, args=item.args)
log('ARGS= ', item.args[0])
log('ARGS= ', html)
return itemlist
# Crea SottoMenu Filtro ======================================================
def build_sub_menu(item):
log()
itemlist = []
matches = re.compile(r'<input.*?name="([^"]+)" value="([^"]+)"\s*>[^>]+>([^<]+)<\/label>', re.DOTALL).findall(item.url)
for name, value, title in matches:
support.menu(itemlist, support.typo(title, 'bold'), 'video', host + '/filter?' + '&' + name + '=' + value + '&' + item.args[1])
return itemlist
# Novità ======================================================
def newest(categoria):
log()
itemlist = []
item = Item()
try:
if categoria == "anime":
item.url = host + '/newest'
item.action = "video"
itemlist = video(item)
if itemlist[-1].action == "video":
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
return []
return itemlist
# Cerca ===========================================================
def search(item, texto):
log(texto)
item.url = host + '/search?keyword=' + 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 []
# Lista A-Z ====================================================
def alfabetico(item):
return support.scrape(item, '<a href="([^"]+)" title="([^"]+)">', ['url', 'title'], patronBlock=r'<span>.*?A alla Z.<\/span>.*?<ul>(.*?)<\/ul>', action='lista_anime')
def lista_anime(item):
log()
itemlist = []
matches ,data = support.match(item, r'<div class="item"><a href="([^"]+)".*?src="([^"]+)".*?data-jtitle="([^"]+)".*?>([^<]+)<\/a><p>(.*?)<\/p>')
for scrapedurl, scrapedthumb, scrapedoriginal, scrapedtitle, scrapedplot in matches:
if scrapedoriginal == scrapedtitle:
scrapedoriginal=''
else:
scrapedoriginal = support.typo(scrapedoriginal,' -- []')
year = ''
lang = ''
infoLabels = {}
if '(' in scrapedtitle:
year = scrapertoolsV2.find_single_match(scrapedtitle, r'(\([0-9]+\))')
lang = scrapertoolsV2.find_single_match(scrapedtitle, r'(\([a-zA-Z]+\))')
infoLabels['year'] = year
title = scrapedtitle.replace(year,'').replace(lang,'').strip()
original = scrapedoriginal.replace(year,'').replace(lang,'').strip()
if lang: lang = support.typo(lang,'_ color kod')
longtitle = '[B]' + title + '[/B]' + lang + original
itemlist.append(
Item(channel=item.channel,
extra=item.extra,
contentType="episode",
action="episodios",
title=longtitle,
url=scrapedurl,
thumbnail=scrapedthumb,
fulltitle=title,
show=title,
infoLabels=infoLabels,
plot=scrapedplot,
folder=True))
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
autorenumber.renumber(itemlist)
# Next page
support.nextPage(itemlist, item, data, r'<a class="page-link" href="([^"]+)" rel="next"')
return itemlist
def video(item):
log()
itemlist = []
matches, data = support.match(item, r'<a href="([^"]+)" class[^>]+><img src="([^"]+)"(.*?)data-jtitle="([^"]+)" .*?>(.*?)<\/a>', '<div class="widget-body">(.*?)<div id="sidebar"', headers=headers)
for scrapedurl, scrapedthumb ,scrapedinfo, scrapedoriginal, scrapedtitle in matches:
# Cerca Info come anno o lingua nel Titolo
year = ''
lang = ''
if '(' in scrapedtitle:
year = scrapertoolsV2.find_single_match(scrapedtitle, r'( \([0-9]+\))')
lang = scrapertoolsV2.find_single_match(scrapedtitle, r'( \([a-zA-Z]+\))')
# Rimuove Anno e Lingua nel Titolo
title = scrapedtitle.replace(year,'').replace(lang,'').strip()
original = scrapedoriginal.replace(year,'').replace(lang,'').strip()
# Compara Il Titolo con quello originale
if original == title:
original=''
else:
original = support.typo(scrapedoriginal,'-- []')
# cerca info supplementari
ep = ''
ep = scrapertoolsV2.find_single_match(scrapedinfo, '<div class="ep">(.*?)<')
if ep != '':
ep = ' - ' + ep
ova = ''
ova = scrapertoolsV2.find_single_match(scrapedinfo, '<div class="ova">(.*?)<')
if ova != '':
ova = ' - (' + ova + ')'
ona = ''
ona = scrapertoolsV2.find_single_match(scrapedinfo, '<div class="ona">(.*?)<')
if ona != '':
ona = ' - (' + ona + ')'
movie = ''
movie = scrapertoolsV2.find_single_match(scrapedinfo, '<div class="movie">(.*?)<')
if movie != '':
movie = ' - (' + movie + ')'
special = ''
special = scrapertoolsV2.find_single_match(scrapedinfo, '<div class="special">(.*?)<')
if special != '':
special = ' - (' + special + ')'
# Concatena le informazioni
lang = support.typo('Sub-ITA', '_ [] color kod') if '(ita)' not in lang.lower() else ''
info = ep + lang + year + ova + ona + movie + special
# Crea il title da visualizzare
long_title = '[B]' + title + '[/B]' + info + original
# Controlla se sono Episodi o Film
if movie == '':
contentType = 'tvshow'
action = 'episodios'
else:
contentType = 'movie'
action = 'findvideos'
itemlist.append(
Item(channel=item.channel,
contentType=contentType,
action=action,
title=long_title,
url=scrapedurl,
fulltitle=title,
show=title,
thumbnail=scrapedthumb,
context = autoplay.context,
number= '1'))
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
autorenumber.renumber(itemlist)
# Next page
support.nextPage(itemlist, item, data, r'href="([^"]+)" rel="next"', resub=['&amp;','&'])
return itemlist
def episodios(item):
log()
itemlist = []
patron_block = r'server active(.*?)server hidden '
patron = r'<li><a [^=]+="[^"]+"[^=]+="[^"]+"[^=]+="[^"]+"[^=]+="[^"]+"[^=]+="[^"]+" href="([^"]+)"[^>]+>([^<]+)<'
matches = support.match(item, patron, patronBlock)[0]
for scrapedurl, scrapedtitle in matches:
itemlist.append(
Item(
channel=item.channel,
action="findvideos",
contentType="episode",
title='[B] Episodio ' + scrapedtitle + '[/B]',
url=urlparse.urljoin(host, scrapedurl),
fulltitle=scrapedtitle,
show=scrapedtitle,
plot=item.plot,
fanart=item.thumbnail,
thumbnail=item.thumbnail,
number=scrapedtitle))
autorenumber.renumber(itemlist, item, 'bold')
support.videolibrary(itemlist, item)
return itemlist
def findvideos(item):
log()
itemlist = []
matches, data = support.match(item, r'class="tab.*?data-name="([0-9]+)">([^<]+)</span', headers=headers)
videoData = ''
for serverid, servername in matches:
block = scrapertoolsV2.find_multiple_matches(data,'data-id="'+serverid+'">(.*?)<div class="server')
log('ITEM= ',item)
id = scrapertoolsV2.find_single_match(str(block),r'<a data-id="([^"]+)" data-base="'+item.number+'"')
if id:
dataJson = httptools.downloadpage('%s/ajax/episode/info?id=%s&server=%s&ts=%s' % (host, id, serverid, int(time.time())), headers=[['x-requested-with', 'XMLHttpRequest']]).data
json = jsontools.load(dataJson)
videoData +='\n'+json['grabber']
if serverid == '28':
itemlist.append(
Item(
channel=item.channel,
action="play",
title='diretto',
quality='',
url=json['grabber'],
server='directo',
show=item.show,
contentType=item.contentType,
folder=False))
return support.server(item, videoData, itemlist)