From e434d593a6ecc3c60303664d209c2db19fd97b99 Mon Sep 17 00:00:00 2001 From: mac12m99 Date: Sat, 20 Apr 2019 11:21:12 +0200 Subject: [PATCH 1/4] force enable dev mode for now --- plugin.video.alfa/.dev | 1 + 1 file changed, 1 insertion(+) create mode 100644 plugin.video.alfa/.dev diff --git a/plugin.video.alfa/.dev b/plugin.video.alfa/.dev new file mode 100644 index 00000000..8d1c8b69 --- /dev/null +++ b/plugin.video.alfa/.dev @@ -0,0 +1 @@ + From 7f3d9c1e9249ecb3f61152b167fe8419e714466d Mon Sep 17 00:00:00 2001 From: mac12m99 Date: Sat, 20 Apr 2019 14:39:20 +0200 Subject: [PATCH 2/4] add streamingaltadefinizione and better dooplay --- .../channels/streamingaltadefinizione.json | 19 ++++++ .../channels/streamingaltadefinizione.py | 68 +++++++++++++++++++ plugin.video.alfa/channels/support.py | 60 +++++++++++++--- 3 files changed, 139 insertions(+), 8 deletions(-) create mode 100644 plugin.video.alfa/channels/streamingaltadefinizione.json create mode 100644 plugin.video.alfa/channels/streamingaltadefinizione.py diff --git a/plugin.video.alfa/channels/streamingaltadefinizione.json b/plugin.video.alfa/channels/streamingaltadefinizione.json new file mode 100644 index 00000000..1cca3246 --- /dev/null +++ b/plugin.video.alfa/channels/streamingaltadefinizione.json @@ -0,0 +1,19 @@ +{ + "id": "streamingaltadefinizione", + "name": "Streaming Altadefinizione", + "language": ["ita"], + "active": true, + "adult": false, + "thumbnail": "https://www.streamingaltadefinizione.world/wp-content/uploads/2018/09/StreamingAltadefinizioneLogo.png", + "categories": ["movie","tvshow","anime"], + "settings": [ + { + "id": "include_in_global_search", + "type": "bool", + "label": "Includi in Ricerca Globale", + "default": true, + "enabled": true, + "visible": true + } + ] +} diff --git a/plugin.video.alfa/channels/streamingaltadefinizione.py b/plugin.video.alfa/channels/streamingaltadefinizione.py new file mode 100644 index 00000000..c6efc954 --- /dev/null +++ b/plugin.video.alfa/channels/streamingaltadefinizione.py @@ -0,0 +1,68 @@ +from channels import support, autoplay +from core.item import Item + +host = 'https://www.streamingaltadefinizione.world/' + +list_servers = ['openload', 'wstream'] +list_quality = ['1080p', 'HD', 'DVDRIP', 'SD', 'CAM'] + +def mainlist(item): + support.log() + itemlist = [] + + support.menu(itemlist, 'Film', 'peliculas', host + "/film/") + support.menu(itemlist, 'Film Anime', 'peliculas', host + "/genere/anime/") + support.menu(itemlist, 'Film per genere', 'generos', host) + support.menu(itemlist, 'Serie TV', 'peliculas', host + "/serietv/", contentType='tvshow') + support.menu(itemlist, 'Anime', 'peliculas', host + "/genere/anime/", contentType='tvshow') + support.menu(itemlist, 'Cerca film', 'search', host) + support.menu(itemlist, 'Cerca serie tv', 'search', host, contentType='tvshow') + + autoplay.init(item.channel, list_servers, list_quality) + autoplay.show_option(item.channel, itemlist) + + return itemlist + + +def search(item, text): + support.log("[streamingaltadefinizione.py] " + item.url + " search " + text) + item.url = item.url + "/?s=" + text + + return support.dooplay_search(item) + + +def generos(item): + patron = '([a-zA-Z]+)' + return support.scrape(item, patron, ['url', 'title'], patron_block='Genere', action='peliculas') + + +def peliculas(item): + support.log("[streamingaltadefinizione.py] video") + + return support.dooplay_films(item) + + +def episodios(item): + return support.dooplay_get_episodes(item) + + +def findvideos(item): + itemlist = [] + for link in support.dooplay_get_links(item, host): + server = link['server'][:link['server'].find(".")] + itemlist.append( + Item(channel=item.channel, + action="play", + title=server + " [COLOR blue][" + link['title'] + "][/COLOR]", + url=link['url'], + server=server, + fulltitle=item.fulltitle, + thumbnail=item.thumbnail, + show=item.show, + quality=link['title'], + contentType=item.contentType, + folder=False)) + + autoplay.start(itemlist, item) + + return itemlist \ No newline at end of file diff --git a/plugin.video.alfa/channels/support.py b/plugin.video.alfa/channels/support.py index 90a323e8..693028fb 100644 --- a/plugin.video.alfa/channels/support.py +++ b/plugin.video.alfa/channels/support.py @@ -86,7 +86,7 @@ def color(text, color): def scrape(item, patron = '', listGroups = [], headers="", blacklist="", data="", patron_block="", - patronNext="", action="findvideos", url_host=""): + patronNext="", action="findvideos", url_host="", addVideolibrary = True): # patron: the patron to use for scraping page, all capturing group must match with listGroups # listGroups: a list containing the scraping info obtained by your patron, in order # accepted values are: url, title, thumb, quality, year, plot, duration, genre, rating @@ -196,7 +196,7 @@ def scrape(item, patron = '', listGroups = [], headers="", blacklist="", data="" if patronNext: nextPage(itemlist, item, data, patronNext, 2) - if item.infoLabels["title"] or item.fulltitle: + if addVideolibrary and (item.infoLabels["title"] or item.fulltitle): item.fulltitle = item.infoLabels["title"] videolibrary(itemlist, item) @@ -231,16 +231,60 @@ def dooplay_get_links(item, host): return ret +def dooplay_get_episodes(item): + itemlist = [] + item.contentType = "episode" + data = httptools.downloadpage(item.url).data.replace("'", '"') + patron = '
  • .*?([^<>]+).*?([0-9]{4})' + + for scrapedthumb, scrapedep, scrapedurl, scrapedtitle, scrapedyear in scrapertoolsV2.find_multiple_matches(data, patron): + scrapedep = scrapedep.replace(' - ', 'x') + infoLabels = {} + infoLabels['year'] = scrapedyear + + itemlist.append( + Item(channel=item.channel, + action="findvideos", + contentType="episode", + title=scrapedep + " " + scrapedtitle, + fulltitle=scrapedtitle, + show=item.fulltitle, + url=scrapedurl, + thumbnail=scrapedthumb, + infoLabels=infoLabels + ) + ) + tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) + videolibrary(itemlist, item) + return itemlist + + def dooplay_films(item, blacklist=""): - patron = ').*?(?:([0-9]+) min|).*?(?:
    ([^<>]+)|).*?(?:genres">(.*?)
    |)' - patronNext = '([^<>]+).*?([^<>]+).*?([0-9]{4}).*?

    ([^<>]+)' patronNext = ' Date: Sat, 20 Apr 2019 14:50:33 +0200 Subject: [PATCH 3/4] Vedohd & Italiaserie (#2) * Vedohd small fixes * Italiaserie updated and enabled * Bugfixes italiaserie * Add parent item title, to add to videolibray item. Italiaserie fix * List of all episodes to make add to library work as well Updated scrapertools regex to match italian series and episodes number --- plugin.video.alfa/channels/italiaserie.json | 2 +- plugin.video.alfa/channels/italiaserie.py | 335 ++++++-------------- plugin.video.alfa/channels/vedohd.py | 4 +- plugin.video.alfa/core/scrapertools.py | 2 +- 4 files changed, 107 insertions(+), 236 deletions(-) diff --git a/plugin.video.alfa/channels/italiaserie.json b/plugin.video.alfa/channels/italiaserie.json index ce9d7686..ba094b25 100644 --- a/plugin.video.alfa/channels/italiaserie.json +++ b/plugin.video.alfa/channels/italiaserie.json @@ -1,7 +1,7 @@ { "id": "italiaserie", "name": "Italia Serie", - "active": false, + "active": true, "adult": false, "language": ["ita"], "thumbnail": "https:\/\/raw.githubusercontent.com\/Zanzibar82\/images\/master\/posters\/italiaserie.png", diff --git a/plugin.video.alfa/channels/italiaserie.py b/plugin.video.alfa/channels/italiaserie.py index 073f522a..0c94e5d9 100644 --- a/plugin.video.alfa/channels/italiaserie.py +++ b/plugin.video.alfa/channels/italiaserie.py @@ -1,37 +1,37 @@ # -*- coding: utf-8 -*- # ------------------------------------------------------------ -# Ringraziamo Icarus crew # Canale per italiaserie -# ---------------------------------------------------------- +# ------------------------------------------------------------ import re -import urlparse -from core import httptools, scrapertools, servertools -from core.item import Item +import autoplay +import filtertools +import support +from core import httptools, scrapertools from core import tmdb -from lib import unshortenit -from platformcode import config, logger +from core.item import Item +from platformcode import logger host = "https://italiaserie.org" +list_servers = ['speedvideo'] + +IDIOMAS = {'Italiano': 'IT'} +list_language = IDIOMAS.values() + def mainlist(item): - logger.info("kod.italiaserie mainlist") - itemlist = [Item(channel=item.channel, - title="[COLOR azure]Aggiornamenti Serie TV[/COLOR]", - action="peliculas", - 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 azure]Ultimi Episodi[/COLOR]", - action="latestep", - url="%s/aggiornamento-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, - title="[COLOR yellow]Cerca...[/COLOR]", - action="search", - extra="tvshow", - thumbnail="http://dc467.4shared.com/img/fEbJqOum/s7/13feaf0c8c0/Search")] + support.log() + itemlist = [] + + support.menu(itemlist, 'Ultime Uscite', 'peliculas', host + "/category/serie-tv/", "episode") + support.menu(itemlist, 'Ultimi Episodi', 'peliculas', host + "/ultimi-episodi/", "episode", 'latest') + support.menu(itemlist, 'Categorie', 'menu', host, "episode", args="Serie-Tv per Genere") + support.menu(itemlist, 'Cerca...', 'search', host, 'episode', args='serie') + + autoplay.init(item.channel, list_servers, []) + autoplay.show_option(item.channel, itemlist) + return itemlist @@ -41,11 +41,13 @@ def newest(categoria): item = Item() try: if categoria == "series": - item.url = "%s/aggiornamento-episodi/" % host - item.action = "latestep" - itemlist = latestep(item) + item.url = host + "/ultimi-episodi/" + item.action = "peliculas" + item.args = "latest" + item.contentType = "episode" + itemlist = peliculas(item) - if itemlist[-1].action == "latestep": + if itemlist[-1].action == "peliculas": itemlist.pop() # Continua la ricerca in caso di errore @@ -58,110 +60,46 @@ def newest(categoria): return itemlist -def latestep(item): - itemlist = [] - - data = httptools.downloadpage(item.url).data - blocco = scrapertools.find_single_match(data, - r'

    Aggiornamento Episodi

    \s*
    (.*?)

     

    ') - patron = r'(?:]+>||)(]*>([^<]+)<\/a>' - matches = re.compile(patron, re.DOTALL).findall(blocco) - - for scrapedtitle, scrapedurl, scraped_number_and_title in matches: - scrapedlang = scrapertools.find_single_match(scraped_number_and_title, r'(SUB-ITA)') - scrapedtitle = scrapertools.decodeHtmlentities(scrapedtitle).replace(scrapedlang, scrapedlang) - scrapedtitle = scrapertools.htmlclean(scrapedtitle).strip() - fulltitle = scrapedtitle.replace("–", "").replace(' ', '').strip() - - scraped_number_and_title = scrapertools.decodeHtmlentities(scraped_number_and_title.replace('×', 'x')) - seasonandep = scrapertools.find_single_match(scraped_number_and_title, r'(\d+x[0-9\-?]+)') - extra = r'%s(.*?)(?:|

    )' - - # Multi Ep - if re.compile(r'[,-]\s*\d+', re.DOTALL).findall(scraped_number_and_title): - season = scrapertools.find_single_match(scraped_number_and_title, r'(\d+x)') - scraped_number_and_title = scraped_number_and_title.split(',') - for ep in scraped_number_and_title: - ep = (season + ep if season not in ep else ep).strip() - seasonandep = scrapertools.find_single_match(ep, r'(\d+x[0-9\-?]+)') - completetitle = "%s %s" % (scrapedtitle, ep) - - itemlist.append( - Item(channel=item.channel, - action="findepvideos", - title=completetitle, - contentSerieName=completetitle, - fulltitle=fulltitle, - url=scrapedurl, - extra=extra % seasonandep.replace('x', '×'), - folder=True)) - continue - - # Ep singolo - correct_scraped_number = seasonandep.replace('x', '×') - extra = extra % (correct_scraped_number) - completetitle = ("%s %s %s" % ( - scrapedtitle, scraped_number_and_title, "(%s)" % scrapedlang if scrapedlang else scrapedlang)).strip() - itemlist.append( - Item(channel=item.channel, - action="findepvideos", - title=completetitle, - contentSerieName=completetitle, - fulltitle=fulltitle, - url=scrapedurl, - extra=extra, - folder=True)) - - tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) - return itemlist - - def peliculas(item): - logger.info("kod.italiaserie peliculas") - itemlist = [] + support.log() + patron = r'
    \s*\s*]+>' + list_groups = ["url", "title", "thumb"] - # Carica la pagina - data = httptools.downloadpage(item.url).data + if item.args == "latest": + patron += r'.*?aj-eps">(.*?)' + data = httptools.downloadpage(item.url).data - # Estrae i contenuti - patron = '
    \s*\s*]+>' - matches = re.compile(patron, re.DOTALL).findall(data) + matches = re.compile(patron, re.S).findall(data) + itemlist = [] - for scrapedurl, scrapedtitle, scrapedthumbnail in matches: - scrapedplot = "" - scrapedtitle = scrapertools.decodeHtmlentities(scrapedtitle) - scrapedurl = scrapedurl.replace("-1/", "-links/") + for scrapedurl, scrapedtitle, scrapedthumbnail, scrapedep in matches: + s, ep = scrapertools.find_single_match(scrapedep, r'(\d+)x(\d+)\s') + itemlist.append( + Item(channel=item.channel, + action="episodios", + contentType=item.contentType, + title="[B]" + scrapedtitle + "[/B] " + scrapedep, + fulltitle=scrapedtitle, + show=scrapedtitle, + url=scrapedurl, + extra=item.extra, + args={"season": s, "episode": ep} + )) - 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)) + tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True) + return itemlist + else: + patron_next = r']*>', '', scrapedtitle).strip() - if scrapedtitle != 'Categorie': - scrapedtitle = scrapedtitle.replace('×', 'x') - scrapedtitle = scrapedtitle.replace('×', 'x') - itemlist.append( - Item(channel=item.channel, - action="findvideos", - contentType="episode", - title="[COLOR azure]%s[/COLOR]" % (scrapedtitle + " (" + lang_title + ")"), - url=data, - thumbnail=item.thumbnail, - extra=item.extra, - fulltitle=scrapedtitle + " (" + lang_title + ")" + ' - ' + item.show, - show=item.show)) +def menu(item): + support.log() + patron = r'
  • (.*?)' + return support.scrape(item, patron, ["url", "title"], action="peliculas") - logger.info("[italiaserie.py] episodios") + +def episodios(item): + support.log() + + patron = r'
    ' + data = httptools.downloadpage(item.url).data + matches = re.compile(patron, re.S).findall(data) + + if item.args: + s = (int(item.args["season"])) + try: + matches = [matches[s]] + except: + matches = [matches[(s - 1)]] itemlist = [] - # Download pagina - data = httptools.downloadpage(item.url).data - data = scrapertools.decodeHtmlentities(data) - if 'CLICCA QUI PER GUARDARE TUTTI GLI EPISODI' in data: - item.url = re.sub('\-\d+[^\d]+$', '-links', item.url) - data = httptools.downloadpage(item.url).data - data = scrapertools.decodeHtmlentities(data) - data = scrapertools.find_single_match(data, '
    (.*?)
    ') + for season, block in matches: + patron = r'