# -*- coding: utf-8 -*- # vStream https://github.com/Kodi-vStream/venom-xbmc-addons # source 26 https://dpstream.ch/ creation 18/10/2020 # update 22/11/2020 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.comaddon import progress #,VSlog SITE_IDENTIFIER = 'dpstream' SITE_NAME = 'Dpstream' SITE_DESC = 'Series et Films en VF ou VOSTFR ' URL_MAIN = 'https://dpstream.ch/' MOVIE_NEWS = (URL_MAIN + 'film-en-streaming', 'showMovies') MOVIE_GENRES = (True, 'showGenres') MOVIE_VIEWS = (URL_MAIN + 'film-box-office', 'showMovies') SERIE_NEWS = (URL_MAIN + 'series-en-streming', 'showMovies') key_search_movies = '#searchsomemovies' key_search_series = '#searchsomeseries' URL_SEARCH = ('', 'showMovies') URL_SEARCH_MOVIES = (URL_SEARCH[0] + key_search_movies, 'showMovies') URL_SEARCH_SERIES = (URL_SEARCH[0] + key_search_series, 'showMovies') # recherche utilisé quand on n'utilise pas le globale MY_SEARCH_MOVIES = ( key_search_movies , 'MyshowSearchMovie') MY_SEARCH_SERIES = ( key_search_series, 'MyshowSearchSerie') FUNCTION_SEARCH = 'showMovies' # Menu GLOBALE HOME MOVIE_MOVIE = (True, 'showMoviesSource') SERIE_SERIES = (True, 'showTvshowSource') def load(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', 'http://venom/') oGui.addDir(SITE_IDENTIFIER, 'showSearch', 'Recherche Films & Series', 'search.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MY_SEARCH_MOVIES[0] ) oGui.addDir(SITE_IDENTIFIER, MY_SEARCH_MOVIES[1], 'Recherche Films', '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_GENRES[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_GENRES[1], 'Films (Genres)', 'genres.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MY_SEARCH_SERIES[0] ) oGui.addDir(SITE_IDENTIFIER, MY_SEARCH_SERIES[1], 'Recherche Series ', 'search.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_NEWS[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_NEWS[1], 'Series (Derniers ajouts)', 'news.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showMoviesSource(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MY_SEARCH_MOVIES[0] ) oGui.addDir(SITE_IDENTIFIER, MY_SEARCH_MOVIES[1], 'Recherche Films ', '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_GENRES[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_GENRES[1], 'Films (Genres)', 'genres.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showTvshowSource(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MY_SEARCH_SERIES[0] ) oGui.addDir(SITE_IDENTIFIER, MY_SEARCH_SERIES[1], 'Recherche Series ', 'search.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_NEWS[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_NEWS[1], 'Series (Derniers ajouts)', 'news.png', oOutputParameterHandler) oGui.setEndOfDirectory() def MyshowSearchSerie(): oGui = cGui() sSearchText = oGui.showKeyBoard() if (sSearchText != False): sUrl = MY_SEARCH_SERIES[0] + sSearchText showMovies(sUrl) oGui.setEndOfDirectory() return def MyshowSearchMovie(): oGui = cGui() sSearchText = oGui.showKeyBoard() if (sSearchText != False): sUrl = MY_SEARCH_MOVIES[0] + sSearchText showMovies(sUrl) oGui.setEndOfDirectory() return def showSearch(): oGui = cGui() sSearchText = oGui.showKeyBoard() if (sSearchText != False): sUrl = sSearchText showMovies(sUrl) oGui.setEndOfDirectory() return def showGenres(): oGui = cGui() liste = [] # recherche science-fiction-fantastique listegenre = ['action ', 'action-adventure ', 'animation', 'aventure' , 'comedie', 'crime', 'documentaire', 'drame ', 'familial' , 'fantastique', 'guerre' , 'histoire', 'horreur', 'kids ', 'musique' , 'mystere ', 'news', 'reality', 'romance' , 'science-fiction' , 'soap' , 'science-fiction-fantastique' , 'talk', 'telefilm', 'thriller' , 'politics', 'western'] url1g = URL_MAIN + 'categories/' for igenre in listegenre: liste.append([igenre.capitalize(), url1g + igenre]) for sTitle, sUrl in liste: oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oGui.addDir(SITE_IDENTIFIER, 'showMovies', sTitle, 'genres.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showMovies(sSearch=''): oGui = cGui() oParser = cParser() bSearchMovie = False bSearchSerie = False if sSearch: sSearch = sSearch.replace(' ', '+').replace('%20', '+') if key_search_movies in sSearch: sSearch = sSearch.replace( key_search_movies , '') bSearchMovie = True if key_search_series in sSearch: sSearch = sSearch.replace( key_search_series , '') bSearchSerie = True bvalid, stoken, scookie = GetTokens() if bvalid: pdata = '_token=' + stoken + '&search=' + sSearch sUrl = URL_MAIN + 'search' oRequestHandler = cRequestHandler(sUrl ) oRequestHandler.setRequestType(1) oRequestHandler.addHeaderEntry('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:70.0) Gecko/20100101 Firefox/70.0') oRequestHandler.addHeaderEntry('Referer', URL_MAIN) oRequestHandler.addHeaderEntry('Cookie', scookie) oRequestHandler.addParametersLine(pdata) sHtmlContent = oRequestHandler.request() else: oGui.addText(SITE_IDENTIFIER) return else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() # ref thumb title year sPattern = 'class="item mb-4">.+?ref="([^"]*).+?src=([^\s]*).+?alt="([^"]*).+?muted">([^<]*).*?type">([^<]*)' 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 = '' sUrl2 = aEntry[0] sThumb = aEntry[1] sTitle = aEntry[2] sYear = aEntry[3] Stype = aEntry[4].lower() if bSearchMovie: if Stype == 'serie': continue if bSearchSerie: if Stype == 'film': continue sDisplayTitle = sTitle + '(' + sYear +')' if 'http' not in sUrl2: # search sUrl2 = URL_MAIN[:-1] + sUrl2 if sSearch and not bSearchMovie and not bSearchSerie: sDisplayTitle = sDisplayTitle + ' [' + aEntry[4] + ']' oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oOutputParameterHandler.addParameter('sYear', sYear) if sSearch: oGui.addLink(SITE_IDENTIFIER, 'showSelectType', sDisplayTitle, sThumb, sDesc, oOutputParameterHandler) elif SERIE_NEWS[0] not in sUrl: oGui.addMovie(SITE_IDENTIFIER, 'showLink', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) else: oGui.addTV(SITE_IDENTIFIER, 'showSaisons', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) progress_.VSclose(progress_) if not sSearch: bNextPage,urlNextpage,pagination = __checkForNextPage(sHtmlContent) if (bNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', urlNextpage) oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal] ' + pagination + ' >>>[/COLOR]', oOutputParameterHandler) oGui.setEndOfDirectory() def __checkForNextPage(sHtmlContent): oParser = cParser() urlNextpage = '' snumberNext = '' pagination = '' sPattern = '<.li>
  • (?!\d).+?footer' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): urlNextpage = aResult[1][0] try: snumberNext = re.search('page.([0-9]+)', urlNextpage).group(1) except: pass if snumberNext: pagination = 'Page ' + str(snumberNext) if urlNextpage: return True, urlNextpage, pagination return False, 'none', 'none' def showSelectType(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') sDesc = oInputParameterHandler.getValue('sDesc') sYear = oInputParameterHandler.getValue('sYear') oRequest = cRequestHandler(sUrl) sHtmlContent = oRequest.request() sDesc = '' oParser = cParser() sPattern = 'mb-3 d-block">([^<]+)' aResult = oParser.parse(sHtmlContent, sPattern) sDesc = 'no description' oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oOutputParameterHandler.addParameter('sYear', sYear) sDisplayTitle = sMovieTitle + '(' + str(sYear) +')' # (a modifier car ce n'est plus la ces ) # dans le cas d'une recherche on ne sait pas si c'est un film ou une serie #class="description">.*?
    ([^<]+) if (aResult[0] == True): sDesc = ('[I][COLOR grey]%s[/COLOR][/I] %s') % ('Synopsis :', aResult[1][0]) if '([^<]+)' aResult = oParser.parse(sHtmlContent, sPattern) sDesc = 'no description' if (aResult[0] == True): sDesc = ('[I][COLOR grey]%s[/COLOR][/I] %s') % ('Synopsis :', aResult[1][0]) sPattern = 'data-url="([^"]+).+?class="p-.+?alt="([^"]+).+?alt="([^"]+)' #p-1 movie p-2 serie aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == False): oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): for aEntry in aResult[1]: skey = aEntry[0] sHost = aEntry[1] vSlang = aEntry[2].upper() sUrl2 = URL_MAIN + 'll/captcha?hash=' + skey sTitle = sMovieTitle if sYear: sTitle = sTitle + '(' + sYear + ')' sTitle = ('%s %s [COLOR coral]%s[/COLOR]') % (sTitle,'[' + vSlang + ']', sHost ) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('referer', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oGui.addLink(SITE_IDENTIFIER, 'showHosters', sTitle, sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory() def showHosters(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sPattern = '