fix: cinemalibero.py
funzionanti sezioni film e serietv
This commit is contained in:
+84
-20
@@ -1,19 +1,42 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
# Canale per CinemaLibero - First Version
|
# Canale per 'cinemaLibero'
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
|
"""
|
||||||
|
Questi sono commenti per i beta-tester.
|
||||||
|
|
||||||
|
Su questo canale in:
|
||||||
|
- Cerca ( nel canale ) e Ricerca Globale
|
||||||
|
- SerieTV e novità del canale
|
||||||
|
- Novità -> SerieTV
|
||||||
|
non saranno presenti le voci:
|
||||||
|
- 'Aggiungi alla Videoteca',
|
||||||
|
- 'Scarica Serie'
|
||||||
|
- NON SONO PRESENTI IN NOVITà GLOBALE E del CANALE RIGUARDANTI LO SPORT!!!!
|
||||||
|
dunque, la loro assenza, nel Test, NON dovrà essere segnalata come ERRORE.
|
||||||
|
|
||||||
|
NON CONTROLLARE LA SEZIONE SPORT, HA PROBLEMI!!!
|
||||||
|
è stata eliminata dall'elenco ma i titoli possono apparire nella ricerca o tra le novità
|
||||||
|
Non è errore se dà problemi!!! NON CONSIDERATELA!
|
||||||
|
|
||||||
|
Novità. Indicare in quale/i sezione/i è presente il canale:
|
||||||
|
- FILM
|
||||||
|
|
||||||
|
Avvisi:
|
||||||
|
- Eventuali avvisi per i tester
|
||||||
|
|
||||||
|
Ulteriori info:
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from core import httptools, support, scrapertoolsV2
|
from core import httptools, support, scrapertoolsV2
|
||||||
from core.item import Item
|
from core.item import Item
|
||||||
from platformcode import config
|
from platformcode import config
|
||||||
|
|
||||||
list_servers = ['akstream', 'wstream', 'openload', 'streamango']
|
list_servers = ['akstream', 'wstream', 'backin', 'verystream', 'openload', 'streamango']
|
||||||
list_quality = ['default']
|
list_quality = ['default']
|
||||||
##
|
|
||||||
### Necessario per Verifica Link
|
|
||||||
##checklinks = config.get_setting('checklinks', 'cinemalibero')
|
|
||||||
##checklinks_number = config.get_setting('checklinks_number', 'cinemalibero')
|
|
||||||
|
|
||||||
__channel__ = "cinemalibero"
|
__channel__ = "cinemalibero"
|
||||||
host = config.get_channel_url(__channel__)
|
host = config.get_channel_url(__channel__)
|
||||||
@@ -28,15 +51,17 @@ def mainlist(item):
|
|||||||
('Generi', ['', 'genres'])
|
('Generi', ['', 'genres'])
|
||||||
]
|
]
|
||||||
|
|
||||||
tvshow = ['/category/serie-tv/',
|
tvshow = ['/category/serie-tv/'
|
||||||
]
|
]
|
||||||
|
|
||||||
Anime = [('Anime',['/category/anime-giapponesi/', 'peliculas', 'anime', 'tvshow'])
|
Anime = [(support.typo('Anime', 'bullet bold'),['/category/anime-giapponesi/', 'peliculas', 'anime', 'tvshow'])
|
||||||
]
|
]
|
||||||
|
|
||||||
sport = [('Sport', ['/category/sport/', 'peliculas', 'tvshow'])]
|
## Sport = [(support.typo('Sport', 'bullet bold'), ['/category/sport/', 'peliculas', '', 'tvshow'])
|
||||||
|
## ]
|
||||||
|
## news = [('Novità Serie-Anime', ['/aggiornamenti-serie-tv/', 'peliculas', 'update', 'tvshow'])]
|
||||||
search = ''
|
search = ''
|
||||||
|
|
||||||
return locals()
|
return locals()
|
||||||
|
|
||||||
|
|
||||||
@@ -51,6 +76,9 @@ def peliculas(item):
|
|||||||
patron = r'<div class="col-lg-3">[^>]+>[^>]+>\s<a href="(?P<url>[^"]+)".+?url\((?P<thumb>[^\)]+)\)">[^>]+>[^>]+>[^>]+>\s?(?P<rating>[\d\.]+)?[^>]+>[^>]+>(?P<title>.+?)\(?(?P<year>\d+)?\)?<[^>]+>[^>]+>(?P<quality>[^<]+)?<'
|
patron = r'<div class="col-lg-3">[^>]+>[^>]+>\s<a href="(?P<url>[^"]+)".+?url\((?P<thumb>[^\)]+)\)">[^>]+>[^>]+>[^>]+>\s?(?P<rating>[\d\.]+)?[^>]+>[^>]+>(?P<title>.+?)\(?(?P<year>\d+)?\)?<[^>]+>[^>]+>(?P<quality>[^<]+)?<'
|
||||||
elif item.args == 'anime':
|
elif item.args == 'anime':
|
||||||
patron = r'<div class="col-lg-3">[^>]+>[^>]+>\s<a href="(?P<url>[^"]+)".+?url\((?P<thumb>[^\)]+)\)">[^>]+>[^>]+>[^>]+>\s?(?P<rating>[\d\.]+)?[^>]+>[^>]+>(?P<title>.+?)\(?(?P<year>\d+)?\)?<[^>]+>[^>]+>(?:.+?[^fFiInNeE]+?\(?(?P<lang>[sSuUbBiItTaA]+)\)?.+?)<'
|
patron = r'<div class="col-lg-3">[^>]+>[^>]+>\s<a href="(?P<url>[^"]+)".+?url\((?P<thumb>[^\)]+)\)">[^>]+>[^>]+>[^>]+>\s?(?P<rating>[\d\.]+)?[^>]+>[^>]+>(?P<title>.+?)\(?(?P<year>\d+)?\)?<[^>]+>[^>]+>(?:.+?[^fFiInNeE]+?\(?(?P<lang>[sSuUbBiItTaA]+)\)?.+?)<'
|
||||||
|
elif item.args == 'update':
|
||||||
|
action = 'select'
|
||||||
|
patron = r'<div class="card-body p-0">\s<a href="(?P<url>[^"]+)".+?url\((?P<thumb>.+?)\)">\s<div class="titolo">(?P<title>.+?)(?: – Serie TV)?(?:\([sSuUbBiItTaA\-]+\))?[ ]?(?P<year>\d{4})?</div>[ ]<div class="genere">(?:[\w]+?\.?\s?[\s|S]?[\dx\-S]+?\s\(?(?P<lang>[iItTaA]+|[sSuUbBiItTaA\-]+)\)?\s?(?P<quality>[HD]+)?|.+?\(?(?P<lang2>[sSuUbBiItTaA\-]+)?\)?</div>)'
|
||||||
else:
|
else:
|
||||||
patron = r'<div class="col-lg-3">[^>]+>[^>]+>\s<a href="(?P<url>[^"]+)".+?url\((?P<thumb>[^\)]+)\)">[^>]+>[^>]+>[^>]+>(?:[^>]+>)?\s?(?P<rating>[\d\.]+)?[^>]+>(?P<title>[^<]+)<[^>]+>[^>]+>(.?[\d\-x]+\s\(?(?P<lang>[sSuUbBiItTaA\-]+)?\)?\s?(?P<quality>[\w]+)?[|]?\s?(?:[fFiInNeE]+)?\s?\(?(?P<lang2>[sSuUbBiItTaA\-]+)?\)?)?'
|
patron = r'<div class="col-lg-3">[^>]+>[^>]+>\s<a href="(?P<url>[^"]+)".+?url\((?P<thumb>[^\)]+)\)">[^>]+>[^>]+>[^>]+>(?:[^>]+>)?\s?(?P<rating>[\d\.]+)?[^>]+>(?P<title>[^<]+)<[^>]+>[^>]+>(.?[\d\-x]+\s\(?(?P<lang>[sSuUbBiItTaA\-]+)?\)?\s?(?P<quality>[\w]+)?[|]?\s?(?:[fFiInNeE]+)?\s?\(?(?P<lang2>[sSuUbBiItTaA\-]+)?\)?)?'
|
||||||
|
|
||||||
@@ -63,13 +91,14 @@ def peliculas(item):
|
|||||||
|
|
||||||
if item.contentType == 'movie':
|
if item.contentType == 'movie':
|
||||||
item.action = 'findvideos'
|
item.action = 'findvideos'
|
||||||
elif item.args == 'anime' or item.extra == 'search':
|
elif item.args == 'anime' or item.args == 'update' or item.args == 'search':
|
||||||
item.action = 'select'
|
item.action = 'select'
|
||||||
elif item.contentType == 'tvshow':
|
elif item.contentType == 'tvshow':
|
||||||
item.extra = 'serie'
|
item.extra = 'serie'
|
||||||
item.action = 'episodios'
|
item.action = 'episodios'
|
||||||
else:
|
else:
|
||||||
item.action = 'select'
|
item.action = 'select'
|
||||||
|
|
||||||
return item
|
return item
|
||||||
|
|
||||||
patronNext = r'<a class="next page-numbers".*?href="([^"]+)">'
|
patronNext = r'<a class="next page-numbers".*?href="([^"]+)">'
|
||||||
@@ -81,15 +110,21 @@ def episodios(item): # Questa def. deve sempre essere nominata episodios
|
|||||||
support.log()
|
support.log()
|
||||||
|
|
||||||
if item.extra == 'serie':
|
if item.extra == 'serie':
|
||||||
|
support.log("Serie :", item)
|
||||||
patron = r'(?P<episode>\d+(?:×|×)?\d+\-\d+|\d+(?:×|×)\d+)[;]?[ ]?(?:(?P<title>[^<]+)(?P<url>.*?)|(\2[ ])(?:<(\3.*?)))(?:</a><br />|</a></p>)'
|
patron = r'(?P<episode>\d+(?:×|×)?\d+\-\d+|\d+(?:×|×)\d+)[;]?[ ]?(?:(?P<title>[^<]+)(?P<url>.*?)|(\2[ ])(?:<(\3.*?)))(?:</a><br />|</a></p>)'
|
||||||
patronBlock = r'<p><strong>(?P<block>(?:.+?[Ss]tagione.+?(?P<lang>iTA|ITA|Sub-ITA|Sub-iTA))?(?:|.+?|</strong>)(/?:</span>)?</p>.*?</p>)'
|
patronBlock = r'<p><strong>(?P<block>(?:.+?[Ss]tagione.+?(?P<lang>iTA|ITA|Sub-ITA|Sub-iTA))?(?:|.+?|</strong>)(/?:</span>)?</p>.*?</p>)'
|
||||||
elif item.extra == 'anime':
|
item.contentType = 'tvshow'
|
||||||
|
item.contentSerieName = item.fulltitle
|
||||||
|
elif item.args == 'anime':
|
||||||
support.log("Anime :", item)
|
support.log("Anime :", item)
|
||||||
blacklist = ['Clipwatching', 'Verystream', 'Easybytez', 'Flix555']
|
blacklist = ['Clipwatching', 'Verystream', 'Easybytez', 'Flix555']
|
||||||
patron = r'(?:href="[ ]?(?P<url>[^"]+)"[^>]+>(?P<title>[^<]+))<'#|(?P<episode>\d+(?:×|×)?\d+\-\d+|\d+(?:×|×)\d+)[;]?(?:(\4[^<]+)(\2.*?)|(\2[ ])(?:<(\3.*?)))(?:</a><br />|</a></p>))'
|
#patron = r'(?:href="[ ]?(?P<url>[^"]+)"[^>]+>(?P<title>[^<]+))<|(?P<episode>\d+(?:×|×)?\d+\-\d+|\d+(?:×|×)\d+)[;]?(?:(\4[^<]+)(\2.*?)|(\2[ ])(?:<(\3.*?)))(?:</a><br />|</a></p>)'
|
||||||
#patron = r'<a target=.+?href="(?P<url>[^"]+)"[^>]+>(?P<title>(Epis|).+?(?P<episode>\d+)?)(?:\((?P<lang>Sub ITA)\))?</a>(?:<br />)?'
|
#patron = r'<a target=.+?href="(?P<url>[^"]+)"[^>]+>(?P<title>(Epis|).+?(?P<episode>\d+)?)(?:\((?P<lang>Sub ITA)\))?</a>(?:<br />)?'
|
||||||
patronBlock = r'(?:class="txt_dow">Streaming:(?P<block>.*?)at-below-post)'
|
patron = r'<a target=(?P<url>.+?(?:rel="noopener noreferrer">(?P<title>[^<]+)))</a>.+?(?:</a></p>|</a><br />)'
|
||||||
|
patronBlock = r'Streaming.+?:(?P<block>.*?)</div>'
|
||||||
|
#patronBlock = r'(?:<p>)?(?P<block>.*?)(?:</a><br /> |</p><div)'
|
||||||
|
item.contentType = 'tvshow'
|
||||||
|
item.contentSerieName = item.fulltitle
|
||||||
else:
|
else:
|
||||||
support.log('extra = else --- select = ### è un film ###')
|
support.log('extra = else --- select = ### è un film ###')
|
||||||
return findvideos(Item(channel=item.channel,
|
return findvideos(Item(channel=item.channel,
|
||||||
@@ -98,7 +133,7 @@ def episodios(item): # Questa def. deve sempre essere nominata episodios
|
|||||||
url=item.url,
|
url=item.url,
|
||||||
show=item.fulltitle,
|
show=item.fulltitle,
|
||||||
contentType='movie'))
|
contentType='movie'))
|
||||||
|
debug = True
|
||||||
return locals()
|
return locals()
|
||||||
|
|
||||||
@support.scrape
|
@support.scrape
|
||||||
@@ -116,13 +151,13 @@ def select(item):
|
|||||||
support.log()
|
support.log()
|
||||||
|
|
||||||
data = httptools.downloadpage(item.url, headers=headers).data
|
data = httptools.downloadpage(item.url, headers=headers).data
|
||||||
#block = scrapertools.find_single_match(data, r'<div class="col-md-8 bg-white rounded-left p-5"><div>(.*?)<\/div>')
|
block = scrapertoolsV2.find_single_match(data, r'Streaming\s?[\w]+?:(.*?)<\/div>')
|
||||||
block = scrapertoolsV2.find_single_match(data, r'Streaming:(.*?)<\/div>')
|
|
||||||
if re.findall('rel="category tag">serie', data, re.IGNORECASE):
|
if re.findall('rel="category tag">serie', data, re.IGNORECASE):
|
||||||
support.log('select = ### è una serie ###')
|
support.log('select = ### è una serie ###')
|
||||||
return episodios(Item(channel=item.channel,
|
return episodios(Item(channel=item.channel,
|
||||||
title=item.title,
|
title=item.title,
|
||||||
fulltitle=item.fulltitle,
|
fulltitle=item.fulltitle,
|
||||||
|
contentSerieName = fulltitle,
|
||||||
url=item.url,
|
url=item.url,
|
||||||
extra='serie',
|
extra='serie',
|
||||||
contentType='episode'))
|
contentType='episode'))
|
||||||
@@ -133,8 +168,9 @@ def select(item):
|
|||||||
return episodios(Item(channel=item.channel,
|
return episodios(Item(channel=item.channel,
|
||||||
title=item.title,
|
title=item.title,
|
||||||
fulltitle=item.fulltitle,
|
fulltitle=item.fulltitle,
|
||||||
|
contentSerieName = item.fulltitle,
|
||||||
url=item.url,
|
url=item.url,
|
||||||
extra='anime',
|
args='anime',
|
||||||
contentType='episode'))
|
contentType='episode'))
|
||||||
else:
|
else:
|
||||||
support.log('select anime ELSE = ### è un film ###')
|
support.log('select anime ELSE = ### è un film ###')
|
||||||
@@ -155,7 +191,7 @@ def search(item, texto):
|
|||||||
support.log(item.url,texto)
|
support.log(item.url,texto)
|
||||||
item.url = host + "/?s=" + texto
|
item.url = host + "/?s=" + texto
|
||||||
item.contentType = 'episode'
|
item.contentType = 'episode'
|
||||||
item.extra = 'search'
|
item.args = 'search'
|
||||||
try:
|
try:
|
||||||
return peliculas(item)
|
return peliculas(item)
|
||||||
# Continua la ricerca in caso di errore
|
# Continua la ricerca in caso di errore
|
||||||
@@ -165,6 +201,34 @@ def search(item, texto):
|
|||||||
support.log("%s" % line)
|
support.log("%s" % line)
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
def newest(categoria):
|
||||||
|
support.log('newest ->', categoria)
|
||||||
|
itemlist = []
|
||||||
|
item = Item()
|
||||||
|
try:
|
||||||
|
if categoria == 'peliculas':
|
||||||
|
item.url = host+'/category/film/'
|
||||||
|
item.contentType = 'movie'
|
||||||
|
## item.action = 'peliculas'
|
||||||
|
## itemlist = peliculas(item)
|
||||||
|
## elif categoria == 'series':
|
||||||
|
## item.contentType = 'tvshow'
|
||||||
|
## item.args = 'update'
|
||||||
|
## item.url = host+'/aggiornamenti-serie-tv/'
|
||||||
|
item.action = 'peliculas'
|
||||||
|
itemlist = peliculas(item)
|
||||||
|
|
||||||
|
if itemlist[-1].action == 'peliculas':
|
||||||
|
itemlist.pop()
|
||||||
|
# Continua la ricerca in caso di errore
|
||||||
|
except:
|
||||||
|
import sys
|
||||||
|
for line in sys.exc_info():
|
||||||
|
support.log('newest log: ', {0}.format(line))
|
||||||
|
return []
|
||||||
|
|
||||||
|
return itemlist
|
||||||
|
|
||||||
def findvideos(item):
|
def findvideos(item):
|
||||||
support.log('findvideos ->', item)
|
support.log('findvideos ->', item)
|
||||||
if item.contentType == 'movie':
|
if item.contentType == 'movie':
|
||||||
|
|||||||
Reference in New Issue
Block a user