diff --git a/channels.json b/channels.json index 5a36c337..5df090bb 100644 --- a/channels.json +++ b/channels.json @@ -30,6 +30,7 @@ "netfreex": "https://www.netfreex.online", "piratestreaming": "https://www.piratestreaming.gratis", "polpotv": "https://polpo.tv", + "pufimovies": "https://pufimovies.com", "seriehd": "https://www.seriehd.watch", "serietvonline": "https://serietvonline.monster", "serietvsubita": "http://serietvsubita.xyz", diff --git a/channels/pufimovies.json b/channels/pufimovies.json new file mode 100644 index 00000000..5ded05f3 --- /dev/null +++ b/channels/pufimovies.json @@ -0,0 +1,11 @@ +{ + "id": "pufimovies", + "name": "PufiMovies", + "active": true, + "adult": false, + "language": ["ita", "sub-ita"], + "thumbnail": "pufimovies.png", + "banner": "pufimovies.png", + "categories": ["movie","tvshow"], + "settings": [] +} diff --git a/channels/pufimovies.py b/channels/pufimovies.py new file mode 100644 index 00000000..7cabbe4a --- /dev/null +++ b/channels/pufimovies.py @@ -0,0 +1,124 @@ +# -*- coding: utf-8 -*- +# ------------------------------------------------------------ +# Canale per Filmi Gratis +# ------------------------------------------------------------ +""" + La voce "Al cinema" si riferisce ai titoli che scorrono nella home page + + Problemi: + - Nessuno noto + + Novità, il canale, è presente in: + - FILM +""" +import re + +from core import servertools, httptools, support +from core.item import Item +from platformcode import config + +host = config.get_channel_url() + +list_servers = ['verystream', 'openload', 'streamango', 'vidoza', 'okru'] +list_quality = ['1080p', '720p', '480p', '360'] + +headers = [['Referer', host]] + + +@support.menu +def mainlist(item): + film = [ + ('Generi', ['', 'menu', 'Film']), + ('Più Visti', ['','peliculas', 'most']) + ] + + tvshow = ['', + ('Generi', ['', 'menu', 'Serie Tv']), + ('Ultimi Episodi', ['','peliculas', 'last']) + ] + + search = '' + return locals() + + +@support.scrape +def menu(item): + action = 'peliculas' + patronBlock = item.args + r' Categorie\s*.*?)' + patronMenu = r']+>(?P[^>]+)<' + return locals() + + +def search(item, text): + support.log('search', item) + + text = text.replace(' ', '+') + item.url = host + '/search/keyword/' + text + try: + item.args = 'search' + return peliculas(item) + # Se captura la excepcion, para no interrumpir al buscador global si un canal falla + except: + import sys + for line in sys.exc_info(): + support.log('search log:', line) + return [] + + +def newest(categoria): + support.log(categoria) + itemlist = [] + item = support.Item() + item.url = host + item.action = 'peliculas' + try: + if categoria == 'peliculas': + item.contentType = 'movie' + itemlist = peliculas(item) + else: + item.args = 'last' + item.contentType = 'tvshow' + 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({0}.format(line)) + return [] + + return itemlist + + +@support.scrape +def peliculas(item): + # debug = True + if item.contentType == 'tvshow' and not item.args: + action = 'episodios' + patron = r'<div class="movie-box">\s*<a href="(?P<url>[^"]+)">[^>]+>[^>]+>\D+Streaming\s(?P<lang>[^"]+)[^>]+>[^>]+>[^>]+>(?P<quality>[^<]+)[^>]+>[^>]+>[^>]+>\s*<img src="(?P<thumb>[^"]+)"[^>]+>[^>]+>[^>]+>[^>]+>(?P<rating>[^<]+)<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<title>[^<]+)[^>]+>[^>]+>[^>]+>\s*(?P<year>\d+)' + elif item.contentType == 'movie' and not item.args: + patron = r'<div class="existing_item col-6 col-lg-3 col-sm-4 col-xl-4">\s*<div class="movie-box">\s*<a href="(?P<url>(?:http(?:s)://[^/]+)?/(?P<type>[^/]+)/[^"]+)">[^>]+>[^>]+>\D+Streaming\s*(?P<lang>[^"]+)">[^>]+>[^>]+>(?P<quality>[^<]+)<[^>]+>[^>]+>[^>]+>\s*<img src="(?P<thumb>[^"]+)"[^>]+>[^>]+>[^>]+>[^>]+>(?P<rating>[^<]+)<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<title>[^<]+)[^>]+>[^>]+>[^>]+>\s*(?:(?P<year>\d+))?[^>]+>[^>]+>[^>]+>[^>]+>(?P<plot>[^<]*)<' + elif item.args == 'last': + patron = r'<div class="episode-box">[^>]+>[^>]+>[^>]+>\D+Streaming\s(?P<lang>[^"]+)">[^>]+>[^>]+>(?P<quality>[^<]+)<[^>]+>[^>]+>[^>]+>[^^>]+>[^>]+>\s*<img src="(?P<thumb>[^"]+)"[^[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>[^>]+>(?P<title>[^<]+)<[^>]+>[^>]+>[^>]+>\D*(?P<season>\d+)[^>]+>\D*(?P<episode>\d+)' + elif item.args == 'most': + patron =r'div class="sm-113 item">\s*<a href="(?P<url>[^"]+)">[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s<img src="(?P<thumb>[^"]+)"[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*(?P<title>[^<]+)' + else: + patron = r'<div class="movie-box">\s*<a href="(?P<url>(?:http(?:s)://[^/]+)?/(?P<type>[^/]+)/[^"]+)">[^>]+>[^>]+>\D+Streaming\s*(?P<lang>[^"]+)">[^>]+>[^>]+>(?P<quality>[^<]+)<[^>]+>[^>]+>[^>]+>\s*<img src="(?P<thumb>[^"]+)"[^>]+>[^>]+>[^>]+>[^>]+>(?P<rating>[^<]+)<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<title>[^<]+)[^>]+>[^>]+>[^>]+>\s*(?:(?P<year>\d+))?[^>]+>[^>]+>[^>]+>[^>]+>(?P<plot>[^<]*)<' + typeActionDict = {'findvideos':['movie'], 'episodios':['tvshow']} + typeContentDict = {'movie':['movie'], 'tvshow':['tvshow']} + patronNext = r'<a href="([^"]+)"[^>]+>»' + return locals() + + +@support.scrape +def episodios(item): + patron = r'<div class="episode-box">[^>]+>[^>]+>[^>]+>\D+Streaming\s(?P<lang>[^"]+)">[^>]+>[^>]+>(?P<quality>[^<]+)<[^>]+>[^>]+>[^>]+>\s*<img src="(?P<thumb>[^"]+)"[^[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>[^>]+>(?P<title>[^<]+)<[^>]+>[^>]+>[^>]+>\D*(?P<season>\d+)[^>]+>\D*(?P<episode>\d+)' + return locals() + + +def findvideos(item): + support.log() + # match = support.match(item, patron) + return support.server(item) diff --git a/core/support.py b/core/support.py index 6e683675..02e5b886 100755 --- a/core/support.py +++ b/core/support.py @@ -219,7 +219,7 @@ def scrapeBlock(item, args, block, patron, headers, action, pagination, debug, t if scraped['season']: stagione = scraped['season'] - episode = scraped['season'] +'x'+ scraped['episode'] + episode = scraped['season'] +'x'+ scraped['episode'].zfill(2) elif item.season: episode = item.season +'x'+ scraped['episode'] elif item.contentType == 'tvshow' and (scraped['episode'] == '' and scraped['season'] == '' and stagione == ''): @@ -295,7 +295,7 @@ def scrapeBlock(item, args, block, patron, headers, action, pagination, debug, t quality=quality, url=scraped["url"], infoLabels=infolabels, - thumbnail=item.thumbnail if function == 'episodios' else scraped["thumb"] , + thumbnail=item.thumbnail if function == 'episodios' and not scraped["thumb"] else scraped["thumb"] , args=item.args, contentSerieName= scraped['title'] if item.contentType or CT != 'movie' and function != 'episodios' else item.fulltitle if function == 'episodios' else '', contentTitle= scraped['title'] if item.contentType or CT == 'movie' else '',