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

333 lines
12 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 Unquote
from resources.lib.comaddon import progress, VSlog, xbmc
SITE_IDENTIFIER = 'enstream'
SITE_NAME = 'Enstream'
SITE_DESC = 'Regarder tous vos films streaming complets, gratuit et illimité'
URL_MAIN = 'https://enstream.to/'
FUNCTION_SEARCH = 'showMovies'
URL_SEARCH = ('', FUNCTION_SEARCH)
URL_SEARCH_MOVIES = (URL_SEARCH[0], FUNCTION_SEARCH)
MOVIE_MOVIE = (True, 'load')
MOVIE_NEWS = (URL_MAIN + 'films-streaming/', 'showMovies')
MOVIE_GENRES = (True, 'showGenres')
MOVIE_ANNEES = (True, 'showYears')
MOVIE_LIST = (True, 'showAlpha')
def load():
oGui = cGui()
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', URL_SEARCH[0])
oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche', '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_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)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', MOVIE_LIST[0])
oGui.addDir(SITE_IDENTIFIER, MOVIE_LIST[1], 'Films (Ordre alphabétique)', 'listes.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showSearch():
oGui = cGui()
sSearchText = oGui.showKeyBoard()
if (sSearchText != False):
showMovies(sSearchText)
oGui.setEndOfDirectory()
return
def showGenres():
oGui = cGui()
liste = []
liste.append(['Action', URL_MAIN + 'genre/action/'])
liste.append(['Animation', URL_MAIN + 'genre/animation/'])
liste.append(['Aventure', URL_MAIN + 'genre/aventure/'])
liste.append(['Biopic', URL_MAIN + 'genre/biopic/'])
liste.append(['Comédie', URL_MAIN + 'genre/comedie/'])
liste.append(['Comédie Dramatique', URL_MAIN + 'genre/comedie-dramatique/'])
liste.append(['Comédie Musicale', URL_MAIN + 'genre/comedie-musical/'])
liste.append(['Drame', URL_MAIN + 'genre/drame/'])
liste.append(['Epouvante Horreur', URL_MAIN + 'genre/epouvante-horreur/'])
liste.append(['Espionnage', URL_MAIN + 'genre/espionnage/'])
liste.append(['Famille', URL_MAIN + 'genre/famille/'])
liste.append(['Fantastique', URL_MAIN + 'genre/fantastique/'])
liste.append(['Guerre', URL_MAIN + 'genre/guerre/'])
liste.append(['Historique', URL_MAIN + 'genre/historique/'])
liste.append(['Judiciaire', URL_MAIN + 'genre/judiciaire/'])
liste.append(['Musical', URL_MAIN + 'genre/musical/'])
liste.append(['Péplum', URL_MAIN + 'genre/peplum/'])
liste.append(['Policier', URL_MAIN + 'genre/policier/'])
liste.append(['Romance', URL_MAIN + 'genre/romance/'])
liste.append(['Science Fiction', URL_MAIN + 'genre/science-fiction/'])
liste.append(['Thriller', URL_MAIN + 'genre/thriller/'])
liste.append(['Western', URL_MAIN + 'genre/western/'])
for sTitle, sUrl in liste:
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl)
oGui.addDir(SITE_IDENTIFIER, 'showMovies', sTitle, 'genres.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showYears():
oGui = cGui()
for i in reversed(range(1942, 2021)):
Year = str(i)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', URL_MAIN + 'Annee/' + Year)
oGui.addDir(SITE_IDENTIFIER, 'showMovies', Year, 'annees.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showAlpha():
oGui = cGui()
sUrl = URL_MAIN + 'ABC/'
liste = []
liste.append(['0-9', sUrl])
liste.append(['A', sUrl + 'A'])
liste.append(['B', sUrl + 'B'])
liste.append(['C', sUrl + 'C'])
liste.append(['D', sUrl + 'D'])
liste.append(['E', sUrl + 'E'])
liste.append(['F', sUrl + 'F'])
liste.append(['G', sUrl + 'G'])
liste.append(['H', sUrl + 'H'])
liste.append(['I', sUrl + 'I'])
liste.append(['J', sUrl + 'J'])
liste.append(['K', sUrl + 'K'])
liste.append(['L', sUrl + 'L'])
liste.append(['M', sUrl + 'M'])
liste.append(['N', sUrl + 'N'])
liste.append(['O', sUrl + 'O'])
liste.append(['P', sUrl + 'P'])
liste.append(['Q', sUrl + 'Q'])
liste.append(['R', sUrl + 'R'])
liste.append(['S', sUrl + 'S'])
liste.append(['T', sUrl + 'T'])
liste.append(['U', sUrl + 'U'])
liste.append(['V', sUrl + 'V'])
liste.append(['W', sUrl + 'W'])
liste.append(['X', sUrl + 'X'])
liste.append(['Y', sUrl + 'Y'])
liste.append(['Z', sUrl + 'Z'])
for sTitle, sUrl in liste:
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl)
oGui.addDir(SITE_IDENTIFIER, 'showMovies', 'Lettre [COLOR coral]' + sTitle + '[/COLOR]', 'listes.png', oOutputParameterHandler)
oGui.setEndOfDirectory()
def showMovies(sSearch=''):
oGui = cGui()
if sSearch:
sUrl = URL_MAIN + 'search.php'
oRequestHandler = cRequestHandler(sUrl)
oRequestHandler.setRequestType(cRequestHandler.REQUEST_TYPE_POST)
oRequestHandler.addParameters('q', Unquote(sSearch))
else:
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
oRequestHandler = cRequestHandler(sUrl)
oRequestHandler.addHeaderEntry('Referer', URL_MAIN)
sHtmlContent = oRequestHandler.request()
if sSearch:
sPattern = '<a href="([^"]+)".+?url\((.+?)\).+?<div class="title"> (.+?) </div>'
elif 'Annee/' in sUrl or '/ABC' in sUrl:
sPattern = '<div class="table-movies-content.+?href="([^"]+)".+?url\((.+?)\).+?<.i>.([^<]+)'
elif 'genre/' in sUrl:
sPattern = 'film-uno.+?href="([^"]+)".+?data-src="([^"]+)".+?alt="([^"]+)'
else:
sPattern = '<a href="([^"]+)".+?data-src="([^"]+)".+?alt="([^"]+)".+?min.+?·([^<]+).+?short-story">([^<]+)'
oParser = cParser()
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
sUrl = aEntry[0]
sThumb = aEntry[1]
sTitle = aEntry[2]
sDesc = ''
if len(aEntry) > 3:
if xbmc.getInfoLabel('system.buildversion')[0:2] >= '19':
sQual = aEntry[3].split('·')[1].replace('Â','').strip()
sLang = aEntry[3].split('·')[2].strip()
else:
sQual = aEntry[3].split('·')[1].strip()
sLang = aEntry[3].split('·')[2].strip()
sDesc = aEntry[4]
sDisplayTitle = ('%s [%s] (%s)') % (sTitle, sQual, sLang)
else:
sDisplayTitle = sTitle
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sUrl)
oOutputParameterHandler.addParameter('sMovieTitle', sTitle)
oOutputParameterHandler.addParameter('sThumb', sThumb)
oOutputParameterHandler.addParameter('sDesc', sDesc)
oGui.addMovie(SITE_IDENTIFIER, 'showHoster', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler)
progress_.VSclose(progress_)
if not sSearch:
sNextPage = __checkForNextPage(sHtmlContent)
if (sNextPage != False):
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('siteUrl', sNextPage)
number = re.search('(page|genre).*?[-=\/]([0-9]+)', sNextPage).group(2) # ou replace'.html',''; '([0-9]+)$'
oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Page ' + number + ' >>>[/COLOR]', oOutputParameterHandler)
oGui.setEndOfDirectory()
def __checkForNextPage(sHtmlContent):
oParser = cParser()
sPattern = 'class=\'Paginaactual\'.+?a href=\'([^"]+?)\''
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == True):
return URL_MAIN[:-1] + aResult[1][0]
return False
def showHoster():
oGui = cGui()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
sThumb = oInputParameterHandler.getValue('sThumb')
sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
sDesc = oInputParameterHandler.getValue('sDesc')
oParser = cParser()
oRequestHandler = cRequestHandler(sUrl)
sHtmlContent = oRequestHandler.request()
sPattern = 'data-url="([^"]+)".+?data-code="([^"]+)".+?mobile">([^<]+)'
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == False):
oGui.addText(SITE_IDENTIFIER)
if (aResult[0] == True):
for aEntry in aResult[1]:
sDataUrl = aEntry[0]
sDataCode = aEntry[1]
sHost = aEntry[2].capitalize()
# filtrage des hosters
oHoster = cHosterGui().checkHoster(sHost)
if not oHoster:
continue
sTitle = ('%s [COLOR coral]%s[/COLOR]') % (sMovieTitle, sHost)
lien = URL_MAIN + 'video/' + sDataCode + '/recaptcha/' + sDataUrl
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle)
oOutputParameterHandler.addParameter('sThumb', sThumb)
oOutputParameterHandler.addParameter('siteUrl', lien)
oOutputParameterHandler.addParameter('referer', sUrl)
oGui.addLink(SITE_IDENTIFIER, 'showHostersLinks', sTitle, sThumb, sDesc, oOutputParameterHandler)
sPattern = "class=.download.+?href='/([^']*).+?mobile.>([^<]+)"
aResult = oParser.parse(sHtmlContent, sPattern)
if (aResult[0] == False):
oGui.addText(SITE_IDENTIFIER)
if (aResult[0] == True):
for aEntry in aResult[1]:
lien = URL_MAIN + aEntry[0]
sHost = aEntry[1].capitalize()
oHoster = cHosterGui().checkHoster(sHost)
if not oHoster:
continue
sTitle = ('%s [COLOR coral]%s[/COLOR]') % (sMovieTitle, sHost)
oOutputParameterHandler = cOutputParameterHandler()
oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle)
oOutputParameterHandler.addParameter('sThumb', sThumb)
oOutputParameterHandler.addParameter('siteUrl', lien)
oOutputParameterHandler.addParameter('referer', sUrl)
oGui.addLink(SITE_IDENTIFIER, 'showHostersLinks', sTitle, sThumb, sDesc, oOutputParameterHandler)
oGui.setEndOfDirectory()
def showHostersLinks():
oGui = cGui()
oInputParameterHandler = cInputParameterHandler()
sUrl = oInputParameterHandler.getValue('siteUrl')
sMovieTitle = oInputParameterHandler.getValue('sMovieTitle')
sThumb = oInputParameterHandler.getValue('sThumb')
referer = oInputParameterHandler.getValue('referer')
oRequestHandler = cRequestHandler(sUrl)
oRequestHandler.addHeaderEntry('Referer', referer)
oRequestHandler.request()
sHosterUrl = oRequestHandler.getRealUrl()
oHoster = cHosterGui().checkHoster(sHosterUrl)
if (oHoster != False):
oHoster.setDisplayName(sMovieTitle)
oHoster.setFileName(sMovieTitle)
cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb)
oGui.setEndOfDirectory()