astrXbian/.install/.kodi/addons/plugin.video.vstream/resources/sites/free_telechargement_org.py

880 lines
37 KiB
Python

# -*- 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('<span style="background-color: yellow;"><font color="red">', '')
sPattern = '<b><p style="font-size: 18px;"><A href="([^"]+)">(.+?)<\/A.+?<td align="center">\s*<img src="([^"]+)".+?<b>Description : (.+?)<br \/><br \/>'
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 = '<table style="float:left;padding-left:8px"> *<td> *<div align="left"> *<a href="([^"]+)" onmouseover="Tip\(\'<b>([^"]+?)<\/b>.+?Description :</b> <i>([^<]+?)<.+?<img src="([^"]+?)"'
aResult = oParser.parse(sHtmlContent, sPattern)
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
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'
sUrl2 = URL_MAIN + aEntry[0]
sTitle = aEntry[1].replace(' - Saison', ' Saison').replace(' - saison', ' Saison')
sDesc = aEntry[2]
sDesc = sDesc.decode("unicode_escape").encode("latin-1")
sThumb = aEntry[3]
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)
progress_.VSclose(progress_)
sNextPage = __checkForNextPage(sHtmlContent)
if (sNextPage != False):
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sNextPage)
number = re.search('/([0-9]+)/', sNextPage).group(1)
oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Page ' + number + ' >>>[/COLOR]', oOutputParameterHandler)
oGui.setEndOfDirectory()
def __checkForNextPage(sHtmlContent):
oParser = cParser()
sPattern = '<span class="courante">[^<]+</span> <a href="(.+?)">'
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('</font>', '', sHtmlContent)
# recuperation nom de la release
if 'elease :' in sHtmlContent:
sPattern = 'elease :([^<]+)<'
else:
sPattern = '<br /> *([^<]+)</p></center>'
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(.+?)</div>'
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 = '<div id="link">(.+?)</div>'
aResult = oParser.parse(sHtmlContent, sPattern)
if not aResult[0]:
return
sHtmlContent = aResult[1][0]
sHtmlContent = sHtmlContent.replace('&nbsp;', '')
if '-multi' in sHtmlContent:
sPattern = 'target="_blank" href="([^"]+)"'
else:
sPattern = '<b> *([^<]+)</b> </br> <a href="([^"]+)" target="_blank" *><b><font color="#00aeef">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('</font>', '', sHtmlContent)
oParser = cParser()
# recuperation nom de la release
sPattern = '</span> ([^<]+)</strong> :.'
aResult1 = oParser.parse(sHtmlContent, sPattern)
# cut de la zone des liens
if 'Lien Premium' in sHtmlContent:
sPattern = 'Lien Premium *--(.+?)</div>'
else:
sPattern = '<div id="link">(.+?)</div>'
aResult = oParser.parse(sHtmlContent, sPattern)
sHtmlContent = aResult[1][0]
sHtmlContent = re.sub('<font color="[^"]+">', '', sHtmlContent)
sHtmlContent = re.sub('</font>', '', sHtmlContent)
# sHtmlContent = re.sub('link.php\?lien\=', '', sHtmlContent)
if '-multi' in sHtmlContent:
sPattern = 'target="_blank" href="([^"]+)"'
else:
sPattern = '<b> *([^<]+)</b> </br> <a href="([^"]+)" target="_blank" *><b><font color="#00aeef">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