# -*- coding: utf-8 -*- # vStream https://github.com/Kodi-vStream/venom-xbmc-addons import re import xbmc import xbmcgui from resources.lib.gui.hoster import cHosterGui from resources.lib.gui.gui import cGui 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, Quote from resources.lib.config import GestionCookie from resources.lib.comaddon import progress, dialog, VSlog UA = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de-DE; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3' SITE_IDENTIFIER = 'free_telechargement_org' SITE_NAME = '[COLOR violet]Free-Téléchargement[/COLOR]' SITE_DESC = 'Fichiers en DDL, HD, Films, Séries, Mangas Etc...' URL_MAIN = 'http://www.free-telecharger.org/' URL_PROTECT = 'liens.free-telecharg' # ne pas mettre 'er' ou 'ement' à la fin, perte de hosters FUNCTION_SEARCH = 'showSearchResult' URL_SEARCH = (URL_MAIN + '1/recherche/1.html?rech_fiche=', FUNCTION_SEARCH) URL_SEARCH_MOVIES = (URL_MAIN + '1/recherche/1.html?rech_cat=video&rech_fiche=', FUNCTION_SEARCH) URL_SEARCH_SERIES = (URL_MAIN + '1/recherche/1.html?rech_cat=serie&rech_fiche=', FUNCTION_SEARCH) URL_SEARCH_ANIMES = (URL_MAIN + '1/recherche/1.html?rech_cat=Animations&rech_fiche=', FUNCTION_SEARCH) URL_SEARCH_MISC = (URL_MAIN + '1/recherche/1.html?rech_cat=videos&rech_fiche=', FUNCTION_SEARCH) MOVIE_SD_DVDRIP = (URL_MAIN + '1/categorie-Films+DVDRiP+et+BDRiP/1.html', 'showMovies') MOVIE_SD_CAM = (URL_MAIN + '1/categorie-Films+CAM+TS+R5+et+DVDSCR/1.html', 'showMovies') MOVIE_SD_VOSTFR = (URL_MAIN + '1/categorie-Films+VOSTFR+et+VO/1.html', 'showMovies') MOVIE_SD_CLASSIQUE = (URL_MAIN + '1/categorie-Films+Classiques/1.html', 'showMovies') MOVIE_SD_VIEWS = (URL_MAIN + '1/films/affichage', 'showMovies') MOVIE_GENRES_SD = (True, 'showGenreMoviesSD') MOVIE_HD = (URL_MAIN + '1/categorie-Films+BluRay+720p+et+1080p/1.html', 'showMovies') MOVIE_4K = (URL_MAIN + '1/categorie-Films+Bluray+4K/1.html', 'showMovies') MOVIE_HDLIGHT = (URL_MAIN + '1/films-hdlight/1.html', 'showMovies') MOVIE_3D = (URL_MAIN + '1/categorie-Films+BluRay+3D/1.html', 'showMovies') MOVIE_HD_VIEWS = (URL_MAIN + '1/films-bluray/affichage', 'showMovies') MOVIE_GENRES_HD = (True, 'showGenreMoviesHD') MOVIE_ANNEES = (True, 'showMovieYears') MOVIE_SAGA = (URL_MAIN + '1/categorie-Sagas+Films/1.html', 'showMovies') SERIE_SD_EN_COURS_VF = (URL_MAIN + '1/categorie-Saisons+en+cours+VF+/1.html', 'showMovies') SERIE_SD_EN_COURS_VOSTFR = (URL_MAIN + '1/categorie-Saisons+en+cours+VOST/1.html', 'showMovies') SERIE_SD_TERMINE_VF = (URL_MAIN + '1/categorie-Saison+Termin%E9e+VF/1.html', 'showMovies') SERIE_SD_TERMINE_VOSTFR = (URL_MAIN + '1/categorie-Saison+Termin%E9e+VOST/1.html', 'showMovies') SERIE_HD_EN_COURS_VF = (URL_MAIN + '1/categorie-Saisons+en+cours+VF+HD/1.html', 'showMovies') SERIE_HD_EN_COURS_VOSTFR = (URL_MAIN + '1/categorie-Saisons+en+cours+VOST+HD/1.html', 'showMovies') SERIE_HD_TERMINE_VF = (URL_MAIN + '1/categorie-Saison+Termin%E9e+VF+HD/1.html', 'showMovies') SERIE_HD_TERMINE_VOSTFR = (URL_MAIN + '1/categorie-Saison+Termin%E9e+VOST+HD/1.html', 'showMovies') ANIM_ANIMS = (URL_MAIN + '1/animations/1', 'showMovies') ANIM_VFS = (URL_MAIN + '1/categorie-Mangas+VF/1.html', 'showMovies') ANIM_VOSTFRS = (URL_MAIN + '1/categorie-Mangas+VOST/1.html', 'showMovies') EMISSIONS_TV = (URL_MAIN + '1/categorie-Emissions/1.html', 'showMovies') SPECTACLES = (URL_MAIN + '1/categorie-Spectacles/1.html', 'showMovies') def load(): 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', 'Mangas', 'animes.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', 'http://venom/') oGui.addDir(SITE_IDENTIFIER, 'showMenuSpectacles', 'Spectacles', 'tv.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', 'http://venom/') oGui.addDir(SITE_IDENTIFIER, 'showMenuEmissionsTV', 'Emissions TV', 'tv.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showMenuFilms(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_SEARCH_MOVIES[0]) oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche de films', 'search.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_SD_VIEWS[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_SD_VIEWS[1], 'Films SD (Les plus vus)', 'views.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_SD_DVDRIP[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_SD_DVDRIP[1], 'Films SD DVDRIP & BDRIP (Derniers ajouts)', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_SD_CAM[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_SD_CAM[1], 'Films SD CAM & DVDScr (Derniers ajouts)', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_SD_VOSTFR[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_SD_VOSTFR[1], 'Films SD VOSTFR (Derniers ajouts)', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_SD_CLASSIQUE[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_SD_CLASSIQUE[1], 'Films SD Classiques (Derniers ajouts)', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_HD[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_HD[1], 'Films HD 720p & 1080p (Derniers ajouts)', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_4K[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_4K[1], 'Films UHD 4K (Derniers ajouts)', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_HDLIGHT[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_HD[1], 'Films HDLight (Derniers ajouts)', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_3D[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_3D[1], 'Films 3D (Derniers ajouts)', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_HD_VIEWS[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_HD_VIEWS[1], 'Films HD (Les plus vus)', 'views.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_GENRES_SD[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_GENRES_SD[1], 'Films SD (Genres)', 'genres.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_GENRES_HD[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_GENRES_HD[1], 'Films HD (Genres)', 'genres.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_SAGA[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_SAGA[1], 'Films (Sagas)', 'genres.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_ANNEES[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_ANNEES[1], 'Films (Par années)', 'annees.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showMenuSeries(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_SEARCH_SERIES[0]) oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche de séries', 'search.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_SD_EN_COURS_VF[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_SD_EN_COURS_VF[1], 'Séries SD VF en cours', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_SD_EN_COURS_VOSTFR[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_SD_EN_COURS_VOSTFR[1], 'Séries SD VOSTFR en cours', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_SD_TERMINE_VF[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_SD_TERMINE_VF[1], 'Séries SD VF terminées', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_SD_TERMINE_VOSTFR[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_SD_TERMINE_VOSTFR[1], 'Séries SD VOSTFR terminées', 'vostfr.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_HD_EN_COURS_VF[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_HD_EN_COURS_VF[1], 'Séries HD VF en cours', 'vf.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_HD_EN_COURS_VOSTFR[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_HD_EN_COURS_VOSTFR[1], 'Séries HD VOSTFR en cours', 'vostfr.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_HD_TERMINE_VF[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_HD_TERMINE_VF[1], 'Séries HD VF terminées', 'vf.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_HD_TERMINE_VOSTFR[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_HD_TERMINE_VOSTFR[1], 'Séries HD VOSTFR terminées', 'vostfr.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showMenuMangas(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_SEARCH_ANIMES[0]) oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche d\'animés', 'search.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', ANIM_ANIMS[0]) oGui.addDir(SITE_IDENTIFIER, ANIM_ANIMS[1], 'Dessins Animés (Derniers ajouts)', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', ANIM_VFS[0]) oGui.addDir(SITE_IDENTIFIER, ANIM_VFS[1], 'Mangas VF (Derniers ajouts)', 'vf.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', ANIM_VOSTFRS[0]) oGui.addDir(SITE_IDENTIFIER, ANIM_VOSTFRS[1], 'Mangas VOSTFR (Derniers ajouts)', 'vostfr.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showMenuSpectacles(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_SEARCH_MISC[0]) oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche de Spectacles', 'search.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SPECTACLES[0]) oGui.addDir(SITE_IDENTIFIER, SPECTACLES[1], 'Spectacles (Derniers ajouts)', 'news.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showMenuEmissionsTV(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_SEARCH_MISC[0]) oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche émissions TV', 'search.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', EMISSIONS_TV[0]) oGui.addDir(SITE_IDENTIFIER, EMISSIONS_TV[1], 'Dernières émissions TV', 'tv.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showSearch(): oGui = cGui() sSearchText = oGui.showKeyBoard() if (sSearchText != False): sSearchText = Quote(sSearchText) oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sUrl = sUrl + sSearchText showSearchResult(sUrl) oGui.setEndOfDirectory() return def showGenreMoviesSD(): showGenre("films+dvdrip+et+bdrip/") def showGenreMoviesHD(): showGenre("Films+BluRay+720p+et+1080p/") def showMovieYears(): oGui = cGui() for i in reversed(range(1950, 2021)): Year = str(i) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_MAIN + '1/annee/?rech_year=' + Year) oGui.addDir(SITE_IDENTIFIER, 'showMovies', Year, 'annees.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showGenre(basePath): oGui = cGui() liste = [] liste.append(['Action', URL_MAIN + '1/genre-Action/' + basePath]) liste.append(['Animation', URL_MAIN + '1/genre-Animation/' + basePath]) liste.append(['Arts Martiaux', URL_MAIN + '1/genre-Arts%20Martiaux/' + basePath]) liste.append(['Aventure', URL_MAIN + '1/genre-Aventure/' + basePath]) liste.append(['Biographies', URL_MAIN + '1/genre-Biographies/' + basePath]) liste.append(['Comédie', URL_MAIN + '1/genre-Comedie/' + basePath]) liste.append(['Comédie dramatique', URL_MAIN + '1/genre-Comedie+Dramatique/' + basePath]) liste.append(['Comédie musicale', URL_MAIN + '1/genre-Comedie+Musicale/' + basePath]) liste.append(['Divers', URL_MAIN + '1/genre-Divers/' + basePath]) liste.append(['Drame', URL_MAIN + '1/genre-Drame/' + basePath]) liste.append(['Espionnage', URL_MAIN + '1/genre-Espionnage/' + basePath]) liste.append(['Famille', URL_MAIN + '1/genre-Famille/' + basePath]) liste.append(['Fantastique', URL_MAIN + '1/genre-Fantastique/' + basePath]) liste.append(['Guerre', URL_MAIN + '1/genre-Guerre/' + basePath]) liste.append(['Historique', URL_MAIN + '1/Historique/' + basePath]) liste.append(['Horreur', URL_MAIN + '1/genre-Horreur-Epouvante/' + basePath]) liste.append(['Péplum', URL_MAIN + '1/genre-Peplum/' + basePath]) liste.append(['Policier', URL_MAIN + '1/genre-Policiers/' + basePath]) liste.append(['Romance', URL_MAIN + '1/genre-Romance/' + basePath]) liste.append(['Science fiction', URL_MAIN + '1/genre-Science-Fiction/' + basePath]) liste.append(['Thriller', URL_MAIN + '1/genre-Thriller/' + basePath]) liste.append(['Western', URL_MAIN + '1/genre-Westerns/' + basePath]) for sTitle, sUrl in liste: oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oGui.addDir(SITE_IDENTIFIER, 'showMovies', sTitle, 'genres.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showSearchResult(sSearch=''): oGui = cGui() oInputParameterHandler = cInputParameterHandler() loop = 2 if sSearch: SD = HD = 0 sUrl = sSearch else: SD = HD = -1 sUrl = oInputParameterHandler.getValue('siteUrl') oParser = cParser() aResult = [] NextPage = [] while (loop): oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sHtmlContent = sHtmlContent.replace('', '') sPattern = '

(.+?)<\/A.+?\s*Description : (.+?)

' aResult1 = oParser.parse(sHtmlContent, sPattern) if (aResult1[0] == False): oGui.addText(SITE_IDENTIFIER) if aResult1[0]: aResult = aResult + aResult1[1] sNextPage = __checkForNextPage(sHtmlContent) if (sNextPage != False): n = '[COLOR teal] >>>[/COLOR]' if sSearch: n = '[COLOR teal] SD >>>[/COLOR]' if loop == 2: n = '[COLOR teal] HD >>>[/COLOR]' NextPage.append((n, sNextPage)) loop = loop - 1 if (loop == 1): HD = len(aResult) if sUrl.find('=video') > 0: sUrl = sUrl.replace('=video', '=Films+HD') elif sUrl.find('=serie') > 0: sUrl = sUrl.replace('=serie', '=seriehd') else: loop = 0 if (aResult): i = 0 for aEntry in aResult: # titre ? if i == SD: oGui.addText(SITE_IDENTIFIER,'[COLOR olive]Qualitée SD[/COLOR]') if i == HD: oGui.addText(SITE_IDENTIFIER,'[COLOR olive]Qualitée HD[/COLOR]') i = i + 1 sQual = 'SD' if '-hd/' in aEntry[0] or 'bluray' in aEntry[0] or 'hdlight' in aEntry[0]: sQual = 'HD' if '-3d/' in aEntry[0]: sQual = '3D' sTitle = str(aEntry[1]).replace(' - Saison', ' Saison').replace(' - saison', ' Saison') sTitle = cUtil().removeHtmlTags(sTitle) sUrl2 = URL_MAIN + aEntry[0] sDesc = aEntry[3] sDesc = re.sub('<[^<]+?>', '', sDesc) # retrait des balises html sThumb = aEntry[2] sDisplayTitle = ('%s [%s]') % (sTitle, sQual) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) if '/mangas' in sUrl: oGui.addAnime(SITE_IDENTIFIER, 'showHosters', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) elif 'series-' in sUrl or '-Saison' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'showHosters', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) elif '-Sagas' in sUrl: oGui.addMoviePack(SITE_IDENTIFIER, 'showHosters', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) else: oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) for n, u in NextPage: oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', u) number = re.search('/([0-9]+)/', u).group(1) oGui.addNext(SITE_IDENTIFIER, 'showSearchResult', '[COLOR teal]Page ' + number + ' ' + n + '[/COLOR]', oOutputParameterHandler) # oGui.addNext(SITE_IDENTIFIER, 'showSearchResult', n, oOutputParameterHandler) if not sSearch: oGui.setEndOfDirectory() def showMovies(): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sPattern = ' *
*
*.+?Description : ([^<]+?)<.+?>>[/COLOR]', oOutputParameterHandler) oGui.setEndOfDirectory() def __checkForNextPage(sHtmlContent): oParser = cParser() sPattern = '[^<]+ ' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): return URL_MAIN + aResult[1][0] return False def showHosters(): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sUrl = oInputParameterHandler.getValue('siteUrl') sThumb = oInputParameterHandler.getValue('sThumb') sDesc = oInputParameterHandler.getValue('sDesc') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() # parfois présent, plus sure que de réduire la regex sHtmlContent = re.sub('', '', sHtmlContent) # recuperation nom de la release if 'elease :' in sHtmlContent: sPattern = 'elease :([^<]+)<' else: sPattern = '
*([^<]+)

' aResult1 = oParser.parse(sHtmlContent, sPattern) # VSlog(aResult1) if (aResult1[0] == True): if 'Forced' in aResult1[1][0]: aResult1[1][0] = '' # cut de la zone des liens if 'Lien Premium' in sHtmlContent: sPattern = 'Lien Premium(.+?)
' aResult = oParser.parse(sHtmlContent, sPattern) if not aResult[0]: return sHtmlContent = aResult[1][0] if 'Interchangeables' in sHtmlContent: # cut de restes de liens non premiums sPattern = '--(.+?)Interchangeables' aResult = oParser.parse(sHtmlContent, sPattern) if not aResult[0]: return sHtmlContent = aResult[1][0] else: sPattern = '' aResult = oParser.parse(sHtmlContent, sPattern) if not aResult[0]: return sHtmlContent = aResult[1][0] sHtmlContent = sHtmlContent.replace(' ', '') if '-multi' in sHtmlContent: sPattern = 'target="_blank" href="([^"]+)"' else: sPattern = ' *([^<]+)
Cliquer ici' aResult = oParser.parse(sHtmlContent, sPattern) # VSlog(aResult) if (aResult[0] == True): for aEntry in aResult[1]: if '-multi' in aEntry: sHostName = 'Liens Multi' else: if 'nitroflare' in aEntry[1] or 'turbo' in aEntry[1] or 'q.gs' in aEntry[1]: # hosters non géré continue if 'hitfile' in aEntry[1] or 'hil.to' in aEntry[1]: # hosters non géré continue if 'uplooad' in aEntry[1] or 'rapidgator' in aEntry[1]: # hoster non géré continue sHostName = aEntry[0] # on récupère le nom du hoster dans l'url # Sinon les hosters sont souvent affiché en temps que Free-telechargements if 'uptobox' in aEntry[1]: sHostName = 'UpToBox' if 'uploaded' in aEntry[1]: sHostName = 'Uploaded' if '1fichier' in aEntry[1]: sHostName = '1Fichier' sHostName = cUtil().removeHtmlTags(sHostName) oOutputParameterHandler = cOutputParameterHandler() sTitle = '[COLOR coral]' + sHostName + '[/COLOR]' if '-multi' in aEntry: oOutputParameterHandler.addParameter('siteUrl', aEntry) else: oOutputParameterHandler.addParameter('siteUrl', aEntry[1]) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oGui.addLink(SITE_IDENTIFIER, 'Display_protected_link', sTitle, sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory() def showSeriesHosters(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sUrl = oInputParameterHandler.getValue('siteUrl') sThumb = oInputParameterHandler.getValue('sThumb') sDesc = oInputParameterHandler.getValue('sDesc') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() # parfois présent, plus sure que de réduire la regex sHtmlContent = re.sub('', '', sHtmlContent) oParser = cParser() # recuperation nom de la release sPattern = ' ([^<]+) :.' aResult1 = oParser.parse(sHtmlContent, sPattern) # cut de la zone des liens if 'Lien Premium' in sHtmlContent: sPattern = 'Lien Premium *--(.+?)' else: sPattern = '' aResult = oParser.parse(sHtmlContent, sPattern) sHtmlContent = aResult[1][0] sHtmlContent = re.sub('', '', sHtmlContent) sHtmlContent = re.sub('', '', sHtmlContent) # sHtmlContent = re.sub('link.php\?lien\=', '', sHtmlContent) if '-multi' in sHtmlContent: sPattern = 'target="_blank" href="([^"]+)"' else: sPattern = ' *([^<]+)
Cliquer ici' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): total = len(aResult[1]) oGui.addText(SITE_IDENTIFIER, sMovieTitle + aResult1[1][0]) for aEntry in aResult[1]: oOutputParameterHandler = cOutputParameterHandler() if total == 1: sTitle = '[COLOR coral]' + 'Liens Premium' + '[/COLOR]' oOutputParameterHandler.addParameter('siteUrl', aEntry) else: sTitle = '[COLOR coral]' + aEntry[0] + '[/COLOR]' oOutputParameterHandler.addParameter('siteUrl', aEntry[1]) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oGui.addLink(SITE_IDENTIFIER, 'Display_protected_link', sTitle, sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory() def Display_protected_link(): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sUrl = oInputParameterHandler.getValue('siteUrl') sThumb = oInputParameterHandler.getValue('sThumb') # Est ce un lien dl-protect ? if URL_PROTECT in sUrl: if "lien=" in sUrl: sUrl = sUrl.split('lien=')[1] sHtmlContent = DecryptddlProtect(sUrl) if sHtmlContent: # Si redirection if sHtmlContent.startswith('http'): aResult_dlprotect = (True, [sHtmlContent]) else: sPattern_dlprotect = 'target=_blank>([^<]+)<' aResult_dlprotect = oParser.parse(sHtmlContent, sPattern_dlprotect) else: dialog().VSok('Désolé, problème de captcha.') aResult_dlprotect = (False, False) # Si lien normal else: if not sUrl.startswith('http'): sUrl = 'http://' + sUrl aResult_dlprotect = (True, [sUrl]) if (aResult_dlprotect[0]): for aEntry in aResult_dlprotect[1]: sHosterUrl = aEntry sTitle = sMovieTitle oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sTitle) oHoster.setFileName(sTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb) oGui.setEndOfDirectory() def DecryptddlProtect(url): # VSlog('entering DecryptddlProtect') if not (url): return '' # Get host tmp = url.split('/') host = tmp[0] + '//' + tmp[2] + '/' dialogs = dialog() # try to get previous cookie cookies = GestionCookie().Readcookie('liens_free-telechargement_org') oRequestHandler = cRequestHandler(url) if cookies: oRequestHandler.addHeaderEntry('Cookie', cookies) sHtmlContent = oRequestHandler.request() # A partir de la on a les bon cookies pr la protection cloudflare # Si ca demande le captcha if 'Veuillez recopier le captcha ci-dessus' in sHtmlContent: if cookies: GestionCookie().DeleteCookie('liens_free-telechargement_org') oRequestHandler = cRequestHandler(url) sHtmlContent = oRequestHandler.request() s = re.findall('src=".\/([^<>"]+?)" alt="CAPTCHA Image"', sHtmlContent) if host in s[0]: image = s[0] else: image = host + s[0] captcha, cookies2 = get_response(image, cookies) cookies = cookies + '; ' + cookies2 oRequestHandler = cRequestHandler(url) oRequestHandler.setRequestType(1) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Accept-Language', 'fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4') oRequestHandler.addHeaderEntry('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8') oRequestHandler.addHeaderEntry('Cookie', cookies) oRequestHandler.addHeaderEntry('Referer', url) oRequestHandler.addParameters('do', 'contact') oRequestHandler.addParameters('ct_captcha', captcha) sHtmlContent = oRequestHandler.request() if 'Code de securite incorrect' in sHtmlContent: dialogs.VSinfo("Mauvais Captcha") return 'rate' if 'Veuillez recopier le captcha ci-dessus' in sHtmlContent: dialogs.VSinfo("Rattage") return 'rate' # si captcha reussi # save cookies GestionCookie().SaveCookie('liens_free-telechargement_org', cookies) return sHtmlContent def get_response(img, cookie): # on telecharge l'image import xbmcvfs dialogs = dialog() filename = "special://home/userdata/addon_data/plugin.video.vstream/Captcha.raw" # PathCache = xbmc.translatePath(xbmcaddon.Addon('plugin.video.vstream').getAddonInfo("profile")) # filename = os.path.join(PathCache, 'Captcha.raw') # hostComplet = re.sub(r'(https*:\/\/[^/]+)(\/*.*)', '\\1', img) # host = re.sub(r'https*:\/\/', '', hostComplet) url = img oRequestHandler = cRequestHandler(url) oRequestHandler.addHeaderEntry('User-Agent', UA) # oRequestHandler.addHeaderEntry('Referer', url) oRequestHandler.addHeaderEntry('Cookie', cookie) htmlcontent = oRequestHandler.request() NewCookie = oRequestHandler.GetCookies() downloaded_image = xbmcvfs.File(filename, 'wb') # downloaded_image = file(filename, "wb") downloaded_image.write(htmlcontent) downloaded_image.close() # on affiche le dialogue solution = '' if (True): # nouveau captcha try: # affichage du dialog perso class XMLDialog(xbmcgui.WindowXMLDialog): # """ # Dialog class for captcha # """ def __init__(self, *args, **kwargs): xbmcgui.WindowXMLDialog.__init__(self) pass def onInit(self): # image background captcha self.getControl(1).setImage(filename.encode("utf-8"), False) # image petit captcha memory fail self.getControl(2).setImage(filename.encode("utf-8"), False) self.getControl(2).setVisible(False) # Focus clavier self.setFocus(self.getControl(21)) def onClick(self, controlId): if controlId == 20: # button Valider solution = self.getControl(5000).getLabel() xbmcgui.Window(10101).setProperty('captcha', solution) self.close() return elif controlId == 30: # button fermer self.close() return elif controlId == 21: # button clavier self.getControl(2).setVisible(True) kb = xbmc.Keyboard(self.getControl(5000).getLabel(), '', False) kb.doModal() if (kb.isConfirmed()): self.getControl(5000).setLabel(kb.getText()) self.getControl(2).setVisible(False) else: self.getControl(2).setVisible(False) def onFocus(self, controlId): self.controlId = controlId def _close_dialog(self): self.close() def onAction(self, action): # touche return 61448 if action.getId() in (9, 10, 11, 30, 92, 216, 247, 257, 275, 61467, 61448): self.close() path = "special://home/addons/plugin.video.vstream" wd = XMLDialog('DialogCaptcha.xml', path, 'default', '720p') wd.doModal() del wd finally: solution = xbmcgui.Window(10101).getProperty('captcha') if solution == '': dialogs.VSinfo("Vous devez taper le captcha") else: # ancien Captcha try: img = xbmcgui.ControlImage(450, 0, 400, 130, filename.encode("utf-8")) wdlg = xbmcgui.WindowDialog() wdlg.addControl(img) wdlg.show() # xbmc.sleep(3000) kb = xbmc.Keyboard("", "Tapez les Lettres/chiffres de l'image", False) kb.doModal() if (kb.isConfirmed()): solution = kb.getText() if solution == '': dialogs.VSinfo("Vous devez taper le captcha") else: dialogs.VSinfo("Vous devez taper le captcha") finally: wdlg.removeControl(img) wdlg.close() return solution, NewCookie