# -*- coding: utf-8 -*- # vStream https://github.com/Kodi-vStream/venom-xbmc-addons # import json import re import xbmcvfs import xbmc from resources.lib.comaddon import progress, VSlog, dialog, addon from resources.lib.gui.gui import cGui from resources.lib.gui.hoster import cHosterGui from resources.lib.handler.inputParameterHandler import cInputParameterHandler from resources.lib.handler.outputParameterHandler import cOutputParameterHandler from resources.lib.handler.requestHandler import cRequestHandler from resources.lib.parser import cParser from resources.lib.util import cUtil, QuotePlus UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0' headers = {'User-Agent': UA} SITE_IDENTIFIER = 'extreme_down' SITE_NAME = '[COLOR violet]Extreme Down[/COLOR]' SITE_DESC = 'films en streaming, streaming hd, streaming 720p, Films/séries, récent' URL_MAIN = 'https://www.extreme-down.video/' URL_SEARCH = (URL_MAIN + 'index.php?', 'showMovies') URL_SEARCH_MOVIES = (URL_SEARCH[0] + 'do=search&subaction=search&titleonly=3&speedsearch=1&story=', 'showMovies') URL_SEARCH_SERIES = (URL_SEARCH[0] + 'do=search&subaction=search&titleonly=3&speedsearch=2&story=', 'showMovies') URL_SEARCH_ANIMES = (URL_SEARCH[0] + 'do=search&subaction=search&titleonly=3&speedsearch=4&story=', 'showMovies') URL_SEARCH_MISC = (URL_SEARCH[0] + 'do=search&subaction=search&titleonly=3&speedsearch=3&story=', 'showMovies') FUNCTION_SEARCH = 'showMovies' MOVIE_MOVIE = (True, 'showMenuFilms') MOVIE_NEWS = (URL_MAIN + 'films/', 'showMovies') MOVIE_HD1080 = (URL_MAIN + 'films-new-hd/new-bluray-1080p/', 'showMovies') # MOVIE_GENRES = (True, 'showGenres') # MOVIE_ANNEES = (True, 'showMovieYears') MOVIE_VOSTFR = (URL_MAIN + 'films-vostfr/dvdrip-vostfr', 'showMovies') MOVIE_4K = (URL_MAIN + 'films-new-ultrahd/', 'showMovies') MOVIE_720 = (URL_MAIN + 'films-new-hd/new-bluray-720p/', 'showMovies') MOVIE_1080X265 = (URL_MAIN + 'films-hd/films-1080p-x265', 'showMovies') MOVIE_BLURAYVOSTFR = (URL_MAIN + 'films-vostfr/films-1080p-vostfr', 'showMovies') MOVIE_3D = (URL_MAIN + 'films-new-hd/new-full-bluray-3d', 'showMovies') MOVIE_FULL1080P = (URL_MAIN + 'films-new-hd/new-full-bluray', 'showMovies') MOVIE_FULL4K = (URL_MAIN + 'films-new-ultrahd/new-full-bluray-ultrahd-4k', 'showMovies') MOVIE_WEBRIP4K = (URL_MAIN + 'films-new-ultrahd/new-webrip-4k', "showMovies") MOVIE_REMUX4K = (URL_MAIN + 'films-new-ultrahd/new-ultrahd-4k', "showMovies") MOVIE_LIGHT720 = (URL_MAIN + 'films-hdlight/hdlight-720p', 'showMovies') MOVIE_LIGHT1080 = (URL_MAIN + 'films-hdlight/hdlight-1080p', 'showMovies') MOVIE_LIGHTBDRIP = (URL_MAIN + 'films-new-hd/new-bdrip-720p', 'showMovies') MOVIE_BDRIP = (URL_MAIN + 'films-sd/dvdrip', 'showMovies') MOVIE_OLDDVD = (URL_MAIN + 'films-sd/ancien-dvdrip', 'showMovies') MOVIE_FILMO = (URL_MAIN + 'films-sd/filmographie', 'showMovies') MOVIE_CLASSIQUE_SD = (URL_MAIN + 'films-classique/classiques-sd', 'showMovies') MOVIE_CLASSIQUE_HD = (URL_MAIN + 'films-classique/classiques-hd', 'showMovies') SERIE_SERIES = (True, 'showMenuSeries') SERIE_NEWS = (URL_MAIN + 'series/', 'showMovies') SERIE_HD = (URL_MAIN + 'series-hd/1080p-series-vf', 'showMovies') # SERIE_GENRES = (True, 'showGenres') # SERIE_ANNEES = (True, 'showSerieYears') SERIE_VOSTFRS = (URL_MAIN + 'series-hd/1080p-series-vostfr/', 'showMovies') SERIE_720VO = (URL_MAIN + 'series-hd/hd-series-vostfr', 'showMovies') SERIE_720VF = (URL_MAIN + 'series-hd/hd-series-vf', 'showMovies') SERIE_4K = (URL_MAIN + 'series-hd/hd-x265-hevc/', 'showMovies') SERIE_MULTI = (URL_MAIN + 'series-hd/hd-series-multi/', 'showMovies') SERIE_SDVO = (URL_MAIN + 'series/vostfr/', 'showMovies') SERIE_SDVF = (URL_MAIN + 'series/vf/', 'showMovies') ANIM_ANIMS = (True, 'showMenuMangas') ANIM_NEWS = (URL_MAIN + 'mangas/', 'showMovies') ANIM_FILM = (URL_MAIN + 'mangas/manga-films/', 'showMovies') ANIM_VOSTFRS = (URL_MAIN + 'mangas/series-vostfr/', 'showMovies') ANIM_VFS = (URL_MAIN + 'mangas/series-vf/', 'showMovies') ANIM_MULTI = (URL_MAIN + 'mangas/series-multi/', 'showMovies') DOC_NEWS = (URL_MAIN + 'documentaires/', 'showMovies') SPECTACLE_NEWS = (URL_MAIN + 'theatre/', 'showMovies') def load(): ADDON = addon() oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', 'http://venom/') oGui.addDir(SITE_IDENTIFIER, 'showMenuFilms', 'Films', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', 'http://venom/') oGui.addDir(SITE_IDENTIFIER, 'showMenuSeries', 'Séries', 'series.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', 'http://venom/') oGui.addDir(SITE_IDENTIFIER, 'showMenuMangas', 'Animés', 'animes.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', 'http://venom/') oGui.addDir(SITE_IDENTIFIER, 'showMenuAutre', 'Autres', 'tv.png', oOutputParameterHandler) if ADDON.getSetting('token_alldebrid') == "": oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', 'http://venom/') oGui.addDir(SITE_IDENTIFIER, 'getToken', '[COLOR red]Les utilisateurs d\'Alldebrid cliquez ici.[/COLOR]', 'films.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showMenuFilms(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_SEARCH_MOVIES[0]) oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche (Films)', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_NEWS[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_NEWS[1], 'Films (Derniers ajouts)', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_HD1080[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_HD1080[1], 'Bluray 1080P', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_4K[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_4K[1], 'Bluray 4K', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_VOSTFR[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_VOSTFR[1], 'Films (VOSTFR)', 'vostfr.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_720[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_720[1], 'Bluray 720P', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_1080X265[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_1080X265[1], 'Bluray 1080P H265/HEVC', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_BLURAYVOSTFR[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_BLURAYVOSTFR[1], 'Bluray VOSTFR', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_3D[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_3D[1], 'Bluray 3D', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_FULL1080P[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_FULL1080P[1], 'REMUX 1080P', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_FULL4K[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_FULL4K[1], 'Bluray 4K', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_REMUX4K[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_REMUX4K[1], 'Remux 4K', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_WEBRIP4K[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_WEBRIP4K[1], 'Webrip 4K', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_LIGHT720[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_LIGHT720[1], 'HD light 720P', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_LIGHT1080[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_LIGHT1080[1], 'HD light 1080P', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_LIGHTBDRIP[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_LIGHTBDRIP[1], 'HD light BDRIP', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_BDRIP[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_BDRIP[1], 'Films BDRIP/DVDRIP', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_OLDDVD[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_OLDDVD[1], 'Ancien DVDRIP', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_FILMO[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_FILMO[1], 'Filmographie', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_CLASSIQUE_HD[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_CLASSIQUE_HD[1], 'Films Classique HD', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_CLASSIQUE_SD[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_CLASSIQUE_SD[1], 'Films Classique SD', 'films.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showMenuSeries(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_SEARCH_SERIES[0]) oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche (Séries)', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_NEWS[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_NEWS[1], 'Séries (Derniers ajouts)', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_HD[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_HD[1], 'Séries 1080p VF', 'series.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_VOSTFRS[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_VOSTFRS[1], 'Séries 1080p VOSTFR', 'vostfr.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_720VF[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_720VF[1], 'Séries 720p VF', 'series.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_720VO[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_720VO[1], 'Séries 720p VOSTFR', 'series.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_4K[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_4K[1], 'Séries 4K H265/HEVC', 'series.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_MULTI[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_MULTI[1], 'Séries multilangue', 'series.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_SDVF[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_SDVF[1], 'Séries (VF)', 'vf.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_SDVO[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_SDVO[1], 'Séries (VOSTFR)', 'vostfr.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showMenuMangas(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_SEARCH_ANIMES[0]) oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche (Animes)', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', ANIM_NEWS[0]) oGui.addDir(SITE_IDENTIFIER, ANIM_NEWS[1], 'Animes (Derniers ajouts)', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', ANIM_FILM[0]) oGui.addDir(SITE_IDENTIFIER, ANIM_FILM[1], "Film d'animation japonais (Derniers ajouts)", 'animes.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', ANIM_VOSTFRS[0]) oGui.addDir(SITE_IDENTIFIER, ANIM_VOSTFRS[1], "Animés VOSTFR (Derniers ajouts)", 'animes.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', ANIM_VFS[0]) oGui.addDir(SITE_IDENTIFIER, ANIM_VFS[1], "Animés VF (Derniers ajouts)", 'animes.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', ANIM_MULTI[0]) oGui.addDir(SITE_IDENTIFIER, ANIM_MULTI[1], "Animés multilangue (Derniers ajouts)", 'animes.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showMenuAutre(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_SEARCH_MISC[0]) oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche (Autres)', 'films.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', DOC_NEWS[0]) oOutputParameterHandler.addParameter('misc', True) oGui.addDir(SITE_IDENTIFIER, DOC_NEWS[1], "Documentaire (Derniers ajouts)", 'doc.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SPECTACLE_NEWS[0]) oOutputParameterHandler.addParameter('misc', True) oGui.addDir(SITE_IDENTIFIER, SPECTACLE_NEWS[1], "Spectacle et théatre (Derniers ajouts)", 'buzz.png', oOutputParameterHandler) oGui.setEndOfDirectory() def getToken(): ADDON = addon() oGui = cGui() token = oGui.showKeyBoard(heading="Entrez votre token") ADDON.setSetting('token_alldebrid', token) dialog().VSinfo('Token Ajouter', "Extreme-Download", 15) oGui.setEndOfDirectory() def showSearch(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sSearchText = oGui.showKeyBoard() if (sSearchText != False): sUrl += sSearchText showMovies(sUrl) oGui.setEndOfDirectory() return def showGenres(): oGui = cGui() liste = [] liste.append(['Action', URL_MAIN + 'action/']) liste.append(['Animation', URL_MAIN + 'animation/']) liste.append(['Arts Martiaux', URL_MAIN + 'arts-martiaux/']) liste.append(['Aventure', URL_MAIN + 'aventure/']) liste.append(['Biopic', URL_MAIN + 'biopic/']) liste.append(['Comédie', URL_MAIN + 'comedie/']) liste.append(['Comédie Dramatique', URL_MAIN + 'comedie-dramatique/']) liste.append(['Comédie Musicale', URL_MAIN + 'comedie-musicale/']) liste.append(['Documentaire', URL_MAIN + 'documentaire/']) liste.append(['Drame', URL_MAIN + 'drame/']) liste.append(['Epouvante Horreur', URL_MAIN + 'epouvante-horreur/']) liste.append(['Erotique', URL_MAIN + 'erotique']) liste.append(['Espionnage', URL_MAIN + 'espionnage/']) liste.append(['Famille', URL_MAIN + 'famille/']) liste.append(['Fantastique', URL_MAIN + 'fantastique/']) liste.append(['Guerre', URL_MAIN + 'guerre/']) liste.append(['Historique', URL_MAIN + 'historique/']) liste.append(['Musical', URL_MAIN + 'musical/']) liste.append(['Policier', URL_MAIN + 'policier/']) liste.append(['Péplum', URL_MAIN + 'peplum/']) liste.append(['Romance', URL_MAIN + 'romance/']) liste.append(['Science Fiction', URL_MAIN + 'science-fiction/']) liste.append(['Spectacle', URL_MAIN + 'spectacle/']) liste.append(['Thriller', URL_MAIN + 'thriller/']) liste.append(['Western', URL_MAIN + 'western/']) liste.append(['Divers', URL_MAIN + 'divers/']) for sTitle, sUrl in liste: oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oGui.addDir(SITE_IDENTIFIER, 'showMovies', sTitle, 'genres.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showMovieYears(): oGui = cGui() for i in reversed(range(1913, 2021)): Year = str(i) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_MAIN + 'films/annee-' + Year) oGui.addDir(SITE_IDENTIFIER, 'showMovies', Year, 'annees.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showSerieYears(): oGui = cGui() for i in reversed(range(1936, 2021)): Year = str(i) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_MAIN + 'series/annee-' + Year) oGui.addDir(SITE_IDENTIFIER, 'showMovies', Year, 'annees.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showMovies(sSearch=''): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() nextPageSearch = oInputParameterHandler.getValue('nextPageSearch') siteUrl = oInputParameterHandler.getValue('siteUrl') sMisc = oInputParameterHandler.getValue('misc') # Autre contenu if nextPageSearch: sSearch = siteUrl sCat = None if sSearch: siteUrl = sSearch if nextPageSearch: sSearch += '&search_start=' + nextPageSearch oRequestHandler = cRequestHandler(siteUrl) sHtmlContent = oRequestHandler.request() sHtmlContent = oParser.abParse(sHtmlContent, 'de la recherche', 'À propos') sCat = int(re.search('speedsearch=(\d)', sSearch).group(1)) sSearch = re.search('story=(.+?)($|&)', sSearch).group(1) else: oRequestHandler = cRequestHandler(siteUrl) sHtmlContent = oRequestHandler.request() sPattern = 'class="top-last thumbnails" href="([^"]+)".+?"img-post" src="([^"]+).+?alt="([^"]+)' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) titles = set() if (aResult[0] == False): oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): total = len(aResult[1]) progress_ = progress().VScreate(SITE_NAME) for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break # on enleve les softwares if 'PC' in aEntry[2]: # for the search continue sUrl2 = aEntry[0] sThumb = aEntry[1] if ' - ' in aEntry[2]: sTitle = aEntry[2].split(' - ')[0] sQual = aEntry[2].split(' - ')[1].replace('Avec TRUEFRENCH', '').replace('TRUEFRENCH', '').replace('FRENCH ', '') if 'Saison' in sQual: # Pour les séries et animes # * et non pas + car parfois "Saison integrale" pas de chiffre saison = re.search('(Saison [0-9]*)', sQual).group(1) sTitle = sTitle + ' ' + saison sQual = re.sub('Saison [0-9]+ ', '', sQual) if '(E' in aEntry[2]: res = re.search('\(E([0-9]+ .+? [0-9]+)\)',aEntry[2]) try: sTitle = sTitle + ' E' + res.group(1).replace('Ã',' - ').replace('à',' - ').split('[')[0] except: pass else: sTitle = aEntry[2]#.replace('Avec TRUEFRENCH', '').replace('TRUEFRENCH', '').replace('FRENCH ', '') sQual = '' # Enlever les films en doublons (même titre et même pochette) # il s'agit du même film dans une autre qualité qu'on retrouvera au moment du choix de la qualité key = sTitle + "-" + sThumb if key in titles : continue titles.add(key) if sSearch and total > 5: if cUtil().CheckOccurence(sSearch, sTitle) == 0: continue sDisplayTitle = ('%s [%s]') % (sTitle, sQual) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) if sCat == 3 or sMisc: oGui.addMisc(SITE_IDENTIFIER, 'showMoviesLinks', sDisplayTitle, '', sThumb, '', oOutputParameterHandler) elif sCat == 1 or '/films-' in siteUrl or '/manga-films/' in siteUrl : oGui.addMovie(SITE_IDENTIFIER, 'showMoviesLinks', sDisplayTitle, '', sThumb, '', oOutputParameterHandler) elif sCat == 4 or '/mangas/' in siteUrl: oGui.addAnime(SITE_IDENTIFIER, 'showSeriesLinks', sDisplayTitle, '', sThumb, '', oOutputParameterHandler) else: oGui.addTV(SITE_IDENTIFIER, 'showSeriesLinks', sDisplayTitle, '', sThumb, '', oOutputParameterHandler) progress_.VSclose(progress_) if sSearch: sPattern = 'Suivant' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', siteUrl) oOutputParameterHandler.addParameter('misc', sMisc) oOutputParameterHandler.addParameter('nextPageSearch', aResult[1][0]) number = re.search('([0-9]+)', aResult[1][0]).group(1) oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Page ' + number + ' >>>[/COLOR]', oOutputParameterHandler) else: sNextPage = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) oOutputParameterHandler.addParameter('misc', sMisc) number = re.search('/page/([0-9]+)', sNextPage).group(1) oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Page ' + number + ' >>>[/COLOR]', oOutputParameterHandler) if nextPageSearch: oGui.setEndOfDirectory() if not sSearch: oGui.setEndOfDirectory() def __checkForNextPage(sHtmlContent): oParser = cParser() sPattern = 'Suivant &.+?' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): return aResult[1][0] return False def showMoviesLinks(): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() # récupération du Synopsis sDesc = '' try: sPattern = '([^<]+)<' aResult = oParser.parse(sHtmlContent, sPattern) if aResult[0]: sDesc = cUtil().removeHtmlTags(aResult[1][0]) #PY3 #Sans ca les caratere accentué n'apparissent pas. try: sDesc = sDesc.encode('utf-8') except: pass except: pass sPattern = '(Télécharger |<title>)([^"]+) - ([^"]+)' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[1]): sMovieTitle = aResult[1][0][1] sQual = aResult[1][0][2].replace('"', '') oGui.addText(SITE_IDENTIFIER,'[COLOR olive]Qualités disponibles :[/COLOR]') sDisplayTitle = ('%s (%s)') % (sMovieTitle, sQual) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sDisplayTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oGui.addLink(SITE_IDENTIFIER, 'showHosters', sDisplayTitle, sThumb, sDesc, oOutputParameterHandler) # on regarde si dispo dans d'autres qualités sPattern = '([^<]+)<' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: sUrl = aEntry[0] sQual = aEntry[1] sTitle = ('%s [%s]') % (sMovieTitle, sQual) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sDisplayTitle', sTitle) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oGui.addLink(SITE_IDENTIFIER, 'showHosters', sTitle, sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory() def showSeriesLinks(): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() # récupération du Synopsis sDesc = '' try: sPattern = '([^<]+)<' aResult = oParser.parse(sHtmlContent, sPattern) if aResult[0]: sDesc = cUtil().removeHtmlTags(aResult[1][0]) #PY3 #Sans ca les caratere accentué n'apparissent pas. try: sDesc = sDesc.encode('utf-8') except: pass except: pass sPattern = '(Télécharger |<title>)([^"]+) - ([^"]+)(VOSTFR|VF)*.+?' aResult = oParser.parse(sHtmlContent, sPattern) # VSlog(aResult) if (aResult[1]): sMovieTitle = aResult[1][0][1] oGui.addText(SITE_IDENTIFIER,'[COLOR olive]Qualités disponibles :[/COLOR]') sPattern = 'Taille([^<]+)', sHtmlContent) if 'et' in str(fileSize[0]): taille = str(fileSize[:-7]) else: taille = str(fileSize[0]) if ' Go' in taille: size, unite = taille.split(' ') if float(size) > 4.85: if "1 Lien" in sHtmlContent: VSlog('1 Lien premium') sPattern = '

([^<]+)1 Lien Uptobox\s*.+?>\s*.+?*([^<>]+)*.+?\s*
4.85: oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): for aEntry in aResult[1]: if aEntry[0]: oGui.addText(SITE_IDENTIFIER, '[COLOR red]' + aEntry[0] + '[/COLOR]') else: sUrl2 = aEntry[1] sTitle = sMovieTitle if 'saison' in sUrl: sDisplayTitle = ('%s [COLOR coral]%s[/COLOR]') % (sMovieTitle, aEntry[2]) else: sDisplayTitle = ('%s [COLOR coral]%s[/COLOR]') % (sMovieTitle, str(aEntry[2])) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oGui.addLink(SITE_IDENTIFIER, 'RecapchaBypass', sDisplayTitle, sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory() def RecapchaBypass(): ADDON = addon() oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') Token_Alldebrid = ADDON.getSetting('token_alldebrid') if Token_Alldebrid != "": sUrl_Bypass = "https://api.alldebrid.com/v4/link/redirector?agent=service&version=1.0-&apikey=" + Token_Alldebrid + "&link=" + sUrl oRequestHandler = cRequestHandler(sUrl_Bypass) sHtmlContent = json.loads(oRequestHandler.request()) HostURL = sHtmlContent["data"]["links"] for sHosterUrl in HostURL: oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sMovieTitle) oHoster.setFileName(sMovieTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb) else: from resources.lib import librecaptcha test = librecaptcha.get_token( api_key="6LeH9lwUAAAAAGgg9ZVf7yOm0zb0LlcSai8t8-2o", site_url=sUrl, user_agent= UA, gui=False, debug=False, ) if test is None: oGui.addText(SITE_IDENTIFIER, '[COLOR red]Resolution du Recaptcha annulé[/COLOR]') else: #N'affiche pas directement le liens car sinon Kodi crash. sDisplayTitle = "Recaptcha passé avec succès, cliquez pour afficher les liens" oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('Token', test) oGui.addLink(SITE_IDENTIFIER, 'getHost', sDisplayTitle, sThumb, "", oOutputParameterHandler) oGui.setEndOfDirectory() def getHost(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') test = oInputParameterHandler.getValue('Token') data = 'g-recaptcha-response=' + test + '&submit_captcha=1' oRequestHandler = cRequestHandler(sUrl) oRequestHandler.setRequestType(1) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8') oRequestHandler.addHeaderEntry('Accept-Language', 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3') oRequestHandler.addHeaderEntry('Accept-Encoding', 'gzip') oRequestHandler.addHeaderEntry('Referer', sUrl) oRequestHandler.addHeaderEntry('Content-Type', 'application/x-www-form-urlencoded') oRequestHandler.addHeaderEntry('Content-Length', len(str(data))) oRequestHandler.addParametersLine(data) sHtmlContent = oRequestHandler.request() sPattern = '
' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: sHosterUrl = aEntry oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sMovieTitle) oHoster.setFileName(sMovieTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb) oGui.setEndOfDirectory() def CutQual(sHtmlContent): oParser = cParser() sPattern = 'Également disponible en :(.+?)
' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0]): return aResult[1][0] return '' def CutSais(sHtmlContent): oParser = cParser() sPattern = 'Autres saisons :(.+?)
' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0]): return aResult[1][0] return ''