# -*- 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 = ' (.+?) ' elif 'Annee/' in sUrl or '/ABC' in sUrl: sPattern = '
.([^<]+)' elif 'genre/' in sUrl: sPattern = 'film-uno.+?href="([^"]+)".+?data-src="([^"]+)".+?alt="([^"]+)' else: sPattern = '([^<]+)' 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()