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

529 lines
21 KiB
Python

# -*- coding: utf-8 -*-
# vStream https://github.com/Kodi-vStream/venom-xbmc-addons
import re
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
from resources.lib.comaddon import progress
SITE_IDENTIFIER = 'libertyland_tv'
SITE_NAME = 'Libertyland'
SITE_DESC = 'Les films et séries récentes en streaming et en téléchargement'
URL_MAIN = 'https://www.libertyvf.one/'
URL_SEARCH = (URL_MAIN + 'v2/recherche/', 'showMovies')
URL_SEARCH_MOVIES = (URL_MAIN + 'v2/recherche/categorie=films&mot_search=', 'showMovies')
URL_SEARCH_SERIES = (URL_MAIN + 'v2/recherche/categorie=series&mot_search=', 'showMovies')
FUNCTION_SEARCH = 'showMovies'
MOVIE_MOVIE = (True, 'showMenuMovies')
MOVIE_NEWS = (URL_MAIN + 'films/nouveautes/', 'showMovies')
MOVIE_VIEWS = (URL_MAIN + 'films/plus-vus-mois/', 'showMovies')
MOVIE_NOTES = (URL_MAIN + 'films/les-mieux-notes/', 'showMovies')
MOVIE_GENRES = (True, 'showMovieGenres')
MOVIE_ANNEES = (True, 'showMovieAnnees')
MOVIE_VOSTFR = (URL_MAIN + 'films/films-vostfr/', 'showMovies')
SERIE_SERIES = (True, 'showMenuSeries')
SERIE_NEWS = (URL_MAIN + 'series/', 'showMovies')
SERIE_GENRES = (True, 'showSerieGenres')
SERIE_ANNEES = (True, 'showSerieAnnees')
def load():
oGui = cGui()
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', 'http://venom/')
oGui.addDir(SITE_IDENTIFIER, 'showMenuMovies', 'Films', 'films.png', oOutputParameterHandler)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', 'http://venom/')
oGui.addDir(SITE_IDENTIFIER, 'showMenuSeries', 'Séries', 'series.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showMenuMovies():
oGui = cGui()
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', URL_SEARCH_MOVIES[0])
oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche film', 'search.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_VIEWS[0])
oGui.addDir(SITE_IDENTIFIER, MOVIE_VIEWS[1], 'Films (Les plus vus)', 'views.png', oOutputParameterHandler)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', MOVIE_NOTES[0])
oGui.addDir(SITE_IDENTIFIER, MOVIE_NOTES[1], 'Films (Les mieux notés)', 'notes.png', oOutputParameterHandler)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', MOVIE_GENRES[0])
oGui.addDir(SITE_IDENTIFIER, MOVIE_GENRES[1], 'Films (Genres)', '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 série', 'search.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_GENRES[0])
oGui.addDir(SITE_IDENTIFIER, SERIE_GENRES[1], 'Séries (Genres)', 'genres.png', oOutputParameterHandler)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', SERIE_ANNEES[0])
oGui.addDir(SITE_IDENTIFIER, SERIE_ANNEES[1], 'Séries (Par années)', 'annees.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showSearch():
oGui = cGui()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
sSearchText = oGui.showKeyBoard()
if (sSearchText != False):
sUrl = sUrl + sSearchText.replace(' ', '+')
showMovies(sUrl)
oGui.setEndOfDirectory()
return
def showMovieGenres():
oGui = cGui()
sUrl = URL_MAIN + 'films/genre/'
liste = []
liste.append(['Action', sUrl + 'action.html'])
liste.append(['Animation', sUrl + 'animation.html'])
liste.append(['Arts martiaux', sUrl + 'arts-martiaux.html'])
liste.append(['Aventure', sUrl + 'aventure.html'])
liste.append(['Biographie', sUrl + 'biographie.html'])
liste.append(['Biopic', sUrl + 'biopic.html'])
liste.append(['Comédie', sUrl + 'comedie.html'])
liste.append(['Comédie Dramatique', sUrl + 'comedie-dramatique.html'])
liste.append(['Comédie Musicale', sUrl + 'comedie-musicale.html'])
liste.append(['Crime', sUrl + 'crime.html'])
liste.append(['Drame', sUrl + 'drame.html'])
liste.append(['Espionnage', sUrl + 'espionnage.html'])
liste.append(['Famille', sUrl + 'famille.html'])
liste.append(['Fantastique', sUrl + 'fantastique.html'])
liste.append(['Guerre', sUrl + 'guerre.html'])
liste.append(['Histoire', sUrl + 'histoire.html'])
liste.append(['Historique', sUrl + 'historique.html'])
liste.append(['Horreur', sUrl + 'horreur.html'])
liste.append(['Judiciaire', sUrl + 'judiciaire.html'])
liste.append(['Médical', sUrl + 'medical.html'])
liste.append(['Musical', sUrl + 'musical.html'])
liste.append(['Péplum', sUrl + 'peplum.html'])
liste.append(['Policier', sUrl + 'policier.html'])
liste.append(['Romance', sUrl + 'romance.html'])
liste.append(['Science-Fiction', sUrl + 'science-fiction.html'])
liste.append(['Sport', sUrl + 'sport.html'])
liste.append(['Thriller', sUrl + 'thriller.html'])
liste.append(['Western', sUrl + 'western.html'])
for sTitle, sUrl in liste:
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl)
oGui.addDir(SITE_IDENTIFIER, 'showMovies', sTitle, 'genres.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showSerieGenres():
oGui = cGui()
sUrl = URL_MAIN + 'v2/series/genre/'
liste = []
liste.append(['Action', sUrl + 'action/'])
liste.append(['Animé', sUrl + 'anime/'])
liste.append(['Aventure', sUrl + 'aventure/'])
liste.append(['Comédie', sUrl + 'comedie/'])
liste.append(['DC Comics', sUrl + 'dc-comics/'])
liste.append(['Documentaire', sUrl + 'documentaire/'])
liste.append(['Drama', sUrl + 'drama/'])
liste.append(['Drame', sUrl + 'drame/'])
liste.append(['Emission TV', sUrl + 'emission-tv/'])
liste.append(['Epouvante-Horreur', sUrl + 'epouvante-horreur/'])
liste.append(['Fantastique', sUrl + 'fantastique/'])
liste.append(['Gore', sUrl + 'gore/'])
liste.append(['Guerre', sUrl + 'guerre/'])
liste.append(['Historique', sUrl + 'historique/'])
liste.append(['Mystère', sUrl + 'mystere/'])
liste.append(['Policier', sUrl + 'policier/'])
liste.append(['Romance', sUrl + 'romance/'])
liste.append(['Science-Fiction', sUrl + 'science-fiction/'])
liste.append(['Série TV', sUrl + 'serie-tv/'])
liste.append(['Thriller', sUrl + 'thriller/'])
liste.append(['Télé-réalité', sUrl + 'tele-realite/'])
for sTitle, sUrl in liste:
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl)
oGui.addDir(SITE_IDENTIFIER, 'showMovies', sTitle, 'genres.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showMovieAnnees():
oGui = cGui()
for i in reversed(range(1914, 2021)):
Year = str(i)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', URL_MAIN + 'films/annee/' + Year + '.html')
oGui.addDir(SITE_IDENTIFIER, 'showMovies', Year, 'annees.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showSerieAnnees():
oGui = cGui()
for i in reversed(range(1989, 2021)):
Year = str(i)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', URL_MAIN + 'v2/series/annee/' + Year + '/')
oGui.addDir(SITE_IDENTIFIER, 'showMovies', Year, 'annees.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showMovies(sSearch=''):
oGui = cGui()
oParser = cParser()
if sSearch:
sUrl = sSearch
sPattern = '<img class="img-responsive" *src="([^"]+)".+?<div class="divtelecha.+?href="([^"]+)">([^<>]+)<'
else:
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
if '/series' in sUrl:
sPattern = '<div class="divtelecha.+?href="([^"]+)"><strong>([^<]+)<\/strong>.+?<img class="img-responsive".+?src="([^"]+)".+?serie de (\d{4})<.+?Synopsis :([^<]+)<'
else: # films
sPattern = '<h2 class="heading"> *<a href="[^"]+">([^<]+)<.+?<img class="img-responsive" *src="([^"]+)" *alt.+?(?:<font color="#.+?">([^<]+)<\/font>.+?).+?>film de (\d{4})<.+?Synopsis : ([^<]+)<.+?<div class="divtelecha.+?href="([^"]+)"'
oRequestHandler = cRequestHandler(sUrl)
sHtmlContent = oRequestHandler.request()
aResult = oParser.parse(sHtmlContent, sPattern)
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
sDesc = ''
sYear = ''
if sSearch:
sQual = ''
sThumb = URL_MAIN[:-1] + aEntry[0]
sTitle = aEntry[2].replace('télécharger ', '').replace('en Streaming', '')
sTitle = sTitle.replace(' TELECHARGEMENT GRATUIT', '').replace('gratuitement', '')
sUrl2 = aEntry[1]
elif '/series' in sUrl:
sQual = ''
sUrl2 = aEntry[0]
sTitle = aEntry[1].replace('Regarder ', '').replace('en Streaming', '')
sThumb = URL_MAIN[:-1] + aEntry[2]
sYear = aEntry[3]
try:
sDesc = aEntry[4].decode('utf-8')
except AttributeError:
pass
sDesc = cUtil().unescape(sDesc).encode('utf-8')
else:
sTitle = aEntry[0]
sThumb = URL_MAIN[:-1] + aEntry[1]
sYear = aEntry[3]
try:
sDesc = aEntry[4].decode('utf-8')
except AttributeError:
pass
sDesc = cUtil().unescape(sDesc).encode('utf-8')
sUrl2 = aEntry[5]
sQual = aEntry[2]
if sQual:
try:
sQual = sQual.decode("utf-8")
except AttributeError:
pass
sQual = sQual.replace(u' qualit\u00E9', '').replace('et ', '/').replace('Haute', 'HD')\
.replace(' ', '').replace('Bonne', 'DVD').replace('Mauvaise', 'SD').encode("utf-8")
if 'https' not in sUrl2:
sUrl2 = URL_MAIN[:-1] + sUrl2
sUrl2 = sUrl2.replace('telecharger', 'streaming')
try:
sTitle = sTitle.decode("utf-8")
except AttributeError:
pass
sTitle = sTitle.replace(u'T\u00E9l\u00E9charger ', '').encode("utf-8")
# Remplace tout les decodage en python 3
try:
sTitle = str(sTitle, 'utf-8')
sQual = str(sQual, 'utf-8')
sDesc = str(sDesc, 'utf-8')
except:
pass
sDisplayTitle = ('%s [%s] (%s)') % (sTitle, sQual, sYear)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl2)
oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
oOutputParameterHandler.addParameter('sThumb', sThumb)
oOutputParameterHandler.addParameter('sDesc', sDesc)
oOutputParameterHandler.addParameter('sYear', sYear)
if '/series/' in sUrl or '/series/' in sUrl2 or '/series_co/' in sThumb:
oGui.addTV(SITE_IDENTIFIER, 'showSaisonsEpisodes', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler)
else:
oGui.addMovie(SITE_IDENTIFIER, 'showLinks', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler)
progress_.VSclose(progress_)
if not sSearch:
sNextPage = __checkForNextPage(sHtmlContent)
if (sNextPage != False):
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sNextPage)
number = re.findall('([0-9]+)', sNextPage)[-1]
oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Page ' + number + ' >>>[/COLOR]', oOutputParameterHandler)
oGui.setEndOfDirectory()
def __checkForNextPage(sHtmlContent):
oParser = cParser()
sPattern = '<li><a href="([^"]+)" class="next">Suivant'
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == True):
return URL_MAIN[:-1] + aResult[1][0]
return False
def ReformatUrl(link):
if '/v2/mangas' in link:
return link
if '/telecharger/' in link:
return link.replace('telecharger', 'streaming')
if '-telecharger-' in link:
f = link.split('/')[-1]
return '/'.join(link.split('/')[:-1]) + '/streaming/' + f.replace('-telecharger', '')
# if ('/v2/' in link) and ('/streaming/' in link):
# return link.replace('/v2/', '/')
# if ('/v2/' in link) and ('/genre/' in link):
# return link
# if '/v2/' in link:
# return link.replace('/v2/', '/streaming/')
return link
def showSaisonsEpisodes():
oGui = cGui()
oParser = cParser()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
sThumb = oInputParameterHandler.getValue('sThumb')
sDesc = oInputParameterHandler.getValue('sDesc')
sYear = oInputParameterHandler.getValue('sYear')
oRequestHandler = cRequestHandler(sUrl)
sHtmlContent = oRequestHandler.request()
sPattern = '(?:<h2 class="heading-small">(Saison .+?)<)|(?:<li><a title=".+? \| (.+?)" class="num_episode" href="([^"]+)")'
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == False):
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:
ePisode = aEntry[1].replace(',', '')
sTitle = sMovieTitle + ' ' + ePisode
sUrl = aEntry[2]
if 'https' not in sUrl:
sUrl = URL_MAIN[:-1] + sUrl
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl)
oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
oOutputParameterHandler.addParameter('sThumb', sThumb)
oOutputParameterHandler.addParameter('sDesc', sDesc)
oOutputParameterHandler.addParameter('sYear', sYear) # utilisé par le skin
oGui.addEpisode(SITE_IDENTIFIER, 'showLinks', sTitle, '', sThumb, sDesc, oOutputParameterHandler)
oGui.setEndOfDirectory()
def showLinks():
oGui = cGui()
oParser = cParser()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
sThumb = oInputParameterHandler.getValue('sThumb')
sDesc = oInputParameterHandler.getValue('sDesc')
# refomatage url
sUrl = ReformatUrl(sUrl)
oRequestHandler = cRequestHandler(sUrl)
sHtmlContent = oRequestHandler.request()
if '/films' in sUrl:
sType = 'films'
elif 'saison' in sUrl or 'episode' in sUrl:
sType = 'series'
sUrl2 = sUrl.rsplit('/', 1)[1]
idMov = re.sub('-.+', '', sUrl2)
sPattern = '<div title="([^"]+)".+?streaming="([^"]+)" heberger="([^"]+)"'
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == True):
for aEntry in aResult[1]:
if 'VF' in aEntry[0]:
sLang = 'VF'
elif 'VOSTFR' in aEntry[0]:
sLang = 'VOSTFR'
else:
sLang = 'VO'
idHeb = aEntry[1]
sHost = aEntry[2].capitalize()
sTitle = ('%s (%s) [COLOR coral]%s[/COLOR]') % (sMovieTitle, sLang, sHost)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl)
oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle)
oOutputParameterHandler.addParameter('sThumb', sThumb)
oOutputParameterHandler.addParameter('sType', sType)
oOutputParameterHandler.addParameter('idMov', idMov)
oOutputParameterHandler.addParameter('idHeb', idHeb)
oGui.addLink(SITE_IDENTIFIER, 'showHosters', sTitle, sThumb, sDesc, oOutputParameterHandler)
oGui.setEndOfDirectory()
def showHosters():
oGui = cGui()
oParser = cParser()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
sThumb = oInputParameterHandler.getValue('sThumb')
sType = oInputParameterHandler.getValue('sType')
idHeb = oInputParameterHandler.getValue('idHeb')
# film
if (oInputParameterHandler.exist('idMov')):
idMov = oInputParameterHandler.getValue('idMov')
pdata = 'id=' + idHeb + '&id_movie=' + idMov + '&type=' + sType
pUrl = URL_MAIN + 'v2/video.php'
else:
# serie pas d'idmov
pdata = 'id=' + idHeb + '&type=' + sType
pUrl = URL_MAIN + 'v2/video.php'
pUrl = pUrl + '?' + pdata
oRequest = cRequestHandler(pUrl)
oRequest.addHeaderEntry('Referer', sUrl)
sHtmlContent = oRequest.request()
sHtmlContent = sHtmlContent.replace('\\', '')
sPattern = '<iframe.+?src="([^"]+)".+?"qualite":"([^"]+)"'
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == True):
for aEntry in aResult[1]:
sHosterUrl = aEntry[0]
if sHosterUrl.startswith('//'):
sHosterUrl = 'http:' + sHosterUrl
sQual = aEntry[1]
oHoster = cHosterGui().checkHoster(sHosterUrl)
if (oHoster != False):
sDisplayTitle = ('%s [%s]') % (sMovieTitle, sQual)
oHoster.setDisplayName(sDisplayTitle)
oHoster.setFileName(sMovieTitle)
cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb)
else:
# au cas où pas de qualité
sPattern = '<iframe.+?src="([^"]+)"'
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == True):
for aEntry in aResult[1]:
sHosterUrl = aEntry
if sHosterUrl.startswith('//'):
sHosterUrl = 'http:' + sHosterUrl
oHoster = cHosterGui().checkHoster(sHosterUrl)
if (oHoster != False):
oHoster.setDisplayName(sMovieTitle)
oHoster.setFileName(sMovieTitle)
cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb)
oGui.setEndOfDirectory()