# -*- 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 = 'filmstreamvk_com' SITE_NAME = 'Filmstreamvk' SITE_DESC = 'Films, Séries & Mangas en Streaming' URL_MAIN = 'https://filmstreamvk.bz/' MOVIE_MOVIE = (True, 'showMenuFilms') MOVIE_NEWS = (URL_MAIN , 'showMovies') MOVIE_GENRES = (True, 'showGenres') MOVIE_EXCLUS = (URL_MAIN + 'tendance/', 'showMovies') SERIE_SERIES = (True, 'showMenuSeries') SERIE_NEWS = (URL_MAIN + 'series/', 'showMovies') SERIE_EPISODES = (URL_MAIN + 'episodes/', 'showMovies') SERIE_NETFLIX = (URL_MAIN + 'network/netflix/', 'showMovies') SERIE_AMAZON = (URL_MAIN + 'network/amazon/', 'showMovies') SERIE_DISNEY = (URL_MAIN + 'network/disney/', 'showMovies') SERIE_APPLE = (URL_MAIN + 'network/apple-tv/', 'showMovies') SERIE_CANAL = (URL_MAIN + 'network/canal/', 'showMovies') SERIE_YOUTUBE = (URL_MAIN + 'network/youtube-premium/', 'showMovies') URL_SEARCH = (URL_MAIN + '?s=', 'showMovies') URL_SEARCH_MOVIES = (URL_SEARCH[0], 'showMovies') URL_SEARCH_SERIES = (URL_SEARCH[0], 'showMovies') FUNCTION_SEARCH = 'showMovies' 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', '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) oGui.setEndOfDirectory() def showMenuFilms(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', MOVIE_EXCLUS[0]) oGui.addDir(SITE_IDENTIFIER, MOVIE_EXCLUS[1], 'Films (Populaire)', 'views.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) oGui.setEndOfDirectory() def showMenuSeries(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_NEWS[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_NEWS[1], 'Séries (Derniers ajouts)', 'news.png', oOutputParameterHandler) # Inutilisable # oOutputParameterHandler = cOutputParameterHandler() # oOutputParameterHandler.addParameter('siteUrl', SERIE_EPISODES[0]) # oGui.addDir(SITE_IDENTIFIER, SERIE_EPISODES[1], 'Séries (Episodes)', 'series.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_NETFLIX[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_NETFLIX[1], 'Séries (Netflix)', 'series.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_AMAZON[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_AMAZON[1], 'Séries (Amazon Prime)', 'series.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_CANAL[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_CANAL[1], 'Séries (Canal+)', 'series.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_DISNEY[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_DISNEY[1], 'Séries (Disney+)', 'series.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_APPLE[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_APPLE[1], 'Séries (Apple TV+)', 'series.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_YOUTUBE[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_YOUTUBE[1], 'Séries (Youtube Originals)', 'series.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showSearch(): oGui = cGui() sSearchText = oGui.showKeyBoard() if (sSearchText != False): sUrl = URL_SEARCH[0] + sSearchText.replace(' ', '+') showMovies(sUrl) 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(['Comédie', URL_MAIN + 'genre/comedie/']) liste.append(['Crime', URL_MAIN + 'genre/crime/']) liste.append(['Drame', URL_MAIN + 'genre/drame/']) liste.append(['Familial', URL_MAIN + 'genre/familial/']) liste.append(['Fantastique', URL_MAIN + 'genre/fantastique/']) liste.append(['Guerre', URL_MAIN + 'genre/guerre/']) liste.append(['Horreur', URL_MAIN + 'genre/horreur/']) liste.append(['Histoire', URL_MAIN + 'genre/histoire/']) liste.append(['Romance', URL_MAIN + 'genre/romance/']) liste.append(['Thriller', URL_MAIN + 'genre/thriller/']) liste.append(['Science-Fiction', URL_MAIN + 'genre/science-fiction/']) 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 showMovies(sSearch=''): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') if sSearch: sUrl = sSearch sPattern = 'class="image">.*?\s*([^([^<]*)' elif 'episodes' in sUrl: sPattern = 'class="poster">.*?([^ 5: if cUtil().CheckOccurence(sSearch.replace(URL_SEARCH[0], ''), aEntry[2]) == 0: continue if sSearch: sUrl = aEntry[0] sThumb = aEntry[1] sTitle = aEntry[2] sDesc = aEntry[3] elif 'episodes' in sUrl: sThumb = aEntry[0] sTitle = aEntry[1] sUrl = aEntry[2] sDesc = '' else: sThumb = aEntry[0] sUrl = aEntry[1] sTitle = aEntry[2].replace('streaming', ' ') sDesc = aEntry[3] # si utile il faut retirer oOutputParameterHandler.addParameter(sDesc) # if sDesc: # désactivé le 17/06/2020, # try: # sDesc = cUtil().unescape(sDesc.decode('utf8')) # except AttributeError: # sDesc = cUtil().unescape(sDesc) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) if 'series' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'showSxE', sTitle, '', sThumb, sDesc, oOutputParameterHandler) elif 'episodes' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'showLinks', sTitle, '', sThumb, sDesc, oOutputParameterHandler) else: oGui.addMovie(SITE_IDENTIFIER, 'showLinks', sTitle, '', 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/([0-9]+)', sNextPage).group(1) oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Page ' + number + ' >>>[/COLOR]', oOutputParameterHandler) if not sSearch: oGui.setEndOfDirectory() def __checkForNextPage(sHtmlContent): sPattern = '\'arrow_pag\' *href="([^"]+)"> Episode \g<2>', aEntry[1]) sTitle = sMovieTitle + ' ' + SxE sDisplaytitle = sMovieTitle + ' ' + re.sub('saison \d+ ', '', SxE) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oGui.addEpisode(SITE_IDENTIFIER, 'showLinks', sDisplaytitle, '', sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory() def showLinks(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') sDesc = oInputParameterHandler.getValue('sDesc') oRequest = cRequestHandler(sUrl) sHtmlContent = oRequest.request() if 'episodes' in sUrl: sPattern = 'dooplay_player_option.+?data-post="(\d+)".+?data-nume="(.+?)">.+?"title">(.+?)<' else: sPattern = "dooplay_player_option.+?data-post='(\d+)'.+?data-nume='(.+?)'>.+?'title'>(.+?)<" oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: if ('trailer' in aEntry[1]): continue sUrl2 = URL_MAIN + 'wp-admin/admin-ajax.php' if 'episodes' in sUrl: dtype = 'tv' else: dtype = 'movie' dpost = aEntry[0] dnum = aEntry[1] pdata = 'action=doo_player_ajax&post=' + dpost + '&nume=' + dnum + '&type=' + dtype sHoster = aEntry[2].capitalize() # trie des hosters #oHoster = cHosterGui().checkHoster(sHoster) #if not oHoster: #continue sDisplaytitle = '%s [COLOR coral]%s[/COLOR]' % (sMovieTitle, sHoster) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('referer', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oOutputParameterHandler.addParameter('pdata', pdata) oGui.addLink(SITE_IDENTIFIER, 'showHosters', sDisplaytitle, sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory() def showHosters(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') referer = oInputParameterHandler.getValue('referer') pdata = oInputParameterHandler.getValue('pdata') oRequest = cRequestHandler(sUrl) oRequest.setRequestType(1) oRequest.addHeaderEntry('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:70.0) Gecko/20100101 Firefox/70.0') oRequest.addHeaderEntry('Referer', referer) oRequest.addHeaderEntry('Accept', '*/*') oRequest.addHeaderEntry('Accept-Language', 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3') oRequest.addHeaderEntry('Content-Type', 'application/x-www-form-urlencoded') oRequest.addParametersLine(pdata) sHtmlContent = oRequest.request() sPattern = "