# -*- coding: utf-8 -*- # vStream https://github.com/Kodi-vStream/venom-xbmc-addons # source 33 date created 24/11/2020 return False # CF depuis le 26/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 = 'filmoflix' SITE_NAME = 'Filmoflix' SITE_DESC = ' films et series' URL_MAIN = 'https://www.filmoflix.net/' MOVIE_NEWS = (URL_MAIN + '/filmsenstreaming/', 'showMovies') SERIE_NEWS = (URL_MAIN + 'seriesenstreaming/', 'showMovies') MOVIE_GENRES = (True, 'showMovieGenres') SERIE_GENRES = (True, 'showSerieGenres') SERIE_VF = (URL_MAIN + 'seriesenstreaming/series-vf/', 'showMovies') SERIE_VOSTFR = (URL_MAIN + 'seriesenstreaming/series-vostfr/', 'showMovies') key_search_movies = '#searchsomemovies' key_search_series = '#searchsomeseries' URL_SEARCH = (URL_MAIN + '/index.php?do=search', 'showMovies') URL_SEARCH_MOVIES = (key_search_movies, 'showMovies') URL_SEARCH_SERIES= ( key_search_series, 'showMovies') # recherche utilisé quand on n'utilise pas le globale MY_SEARCH_MOVIES = ( True, 'MyshowSearchMovie') MY_SEARCH_SERIES = ( True, 'MyshowSearchSerie') # Menu GLOBALE HOME MOVIE_MOVIE = (True, 'showMoviesSource') SERIE_SERIES = (True, 'showTvshowSource') def load(): oGui = cGui() oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', URL_SEARCH[0]) 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_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) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl',SERIE_GENRES[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_GENRES[1], 'Serie (Genres)', 'genres.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_VF[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_VF[1], 'Series (VF)', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl',SERIE_VOSTFR[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_VOSTFR[1], 'Serie (VOST)', 'genres.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_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) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl',SERIE_GENRES[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_GENRES[1], 'Serie(Genres)', 'genres.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_VF[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_VF[1], 'Series (VF)', 'news.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl',SERIE_VOSTFR[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_VOSTFR[1], 'Serie(VOST)', 'genres.png', oOutputParameterHandler) oGui.setEndOfDirectory() def MyshowSearchSerie(): oGui = cGui() sSearchText = oGui.showKeyBoard() if (sSearchText != False): sUrl = key_search_movies + sSearchText showMovies(sUrl) oGui.setEndOfDirectory() return def MyshowSearchMovie(): oGui = cGui() sSearchText = oGui.showKeyBoard() if (sSearchText != False): sUrl = key_search_series + sSearchText showMovies(sUrl) oGui.setEndOfDirectory() return def showSearch(): oGui = cGui() sSearchText = oGui.showKeyBoard() if (sSearchText != False): sUrl = sSearchText showMovies(sUrl) oGui.setEndOfDirectory() return def showMovieGenres(): showGenres(URL_MAIN + 'filmsenstreaming/', '') def showSerieGenres(): showGenres(URL_MAIN + 'seriesenstreaming/', '-s') def showGenres(urltype,s): oGui = cGui() liste = [] listegenre = ['action', 'animation', 'aventure', 'biopic', 'comedie' ,'drame', 'documentaire' , 'epouvante-horreur', 'espionnage' ,'famille', 'fantastique' , 'guerre', 'historique' , 'policier' , 'romance' , 'science-fiction', 'thriller', 'western'] #https://www.filmoflix.net/filmsenstreaming/action/ #https://www.filmoflix.net/seriesenstreaming/action-s/ for igenre in listegenre: liste.append([igenre.capitalize(), urltype + igenre + s + '/']) 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: sUrl = URL_SEARCH[0] # sert a rien 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 pdata = 'do=search&subaction=search&search_start=0&full_search=0&result_from=1&story=' + sSearch oRequest = cRequestHandler(URL_SEARCH[0]) oRequest.setRequestType(1) oRequest.addHeaderEntry('Referer', URL_MAIN) oRequest.addHeaderEntry('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8') 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() else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() # ref thum title yeras sPattern = 'class="th-item".+?.+?ref="([^"]*).+?src="([^"]*).+?alt="([^"]*).+?Date.+?<.span>([^<]+)' 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 sUrl2 = aEntry[0] sThumb = aEntry[1] sTitle = aEntry[2] sYear = aEntry[3].strip() if bSearchMovie: if '/serie' in sUrl2: continue if bSearchSerie: if not '/serie' in sUrl2: continue sDisplayTitle = sTitle if sSearch and not bSearchMovie and not bSearchSerie: if '/serie' in sUrl2: sDisplayTitle = sDisplayTitle + ' [serie]' else: sDisplayTitle = sDisplayTitle + ' [film]' #VSlog(sUrl2 );VSlog(sTitle);VSlog(sThumb );VSlog(sYear ) sDisplayTitle = sDisplayTitle + ' (' + sYear + ')' if 'http' not in sThumb: sThumb = URL_MAIN[:-1] + sThumb oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sYear', sYear) if '/series' not in sUrl2: oGui.addMovie(SITE_IDENTIFIER, 'showMovieLinks', sDisplayTitle, '', sThumb,'' , oOutputParameterHandler) else: oGui.addTV(SITE_IDENTIFIER, 'showSaisons', sDisplayTitle, '', sThumb, '', 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 = '' sNumberMax = '' pagination = '' if '
' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sNumberMax= aResult[1][0] sPattern = '
.+?href="([^"]*)' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): urlNextpage = aResult[1][0] # minimum requis try: snumberNext = re.search('page.([0-9]+)', urlNextpage).group(1) except: pass if snumberNext: pagination = 'Page ' + str(snumberNext) if sNumberMax: pagination = pagination + '/' + sNumberMax if urlNextpage: return True, urlNextpage, pagination return False, 'none', 'none' def showSaisons(): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sThumb = oInputParameterHandler.getValue('sThumb') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sYear = oInputParameterHandler.getValue('sYear') sDesc = oInputParameterHandler.getValue('sDesc') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sPattern = 'property="og:description".+?content="([^"]+)' aResult = oParser.parse(sHtmlContent, sPattern) sDesc = 'FilmoFlix' if (aResult[0] == True): sDesc = ('[I][COLOR grey]%s[/COLOR][/I] %s') % ('Synopsis :', aResult[1][0]) sPattern = 'th-item">.+?href="([^"]*).+?src="([^"]*).+?title.+?>([^<]*)' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == False): oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): for aEntry in reversed(aResult[1]): sUrl2 = aEntry[0] sThumb = aEntry[1] sSaison = aEntry[2] # SAISON 2 if 'http' not in sThumb: sThumb = URL_MAIN[:-1] + sThumb sTitle = ("%s %s %s") % (sMovieTitle , sSaison , '(' + sYear + ')') oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sYear', sYear) oOutputParameterHandler.addParameter('sSaison', sSaison) oGui.addEpisode(SITE_IDENTIFIER, 'ShowEpisodes', sTitle, '', sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory() def ShowEpisodes(): 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') sSaison = oInputParameterHandler.getValue('sSaison') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sPattern = '(?:class="saisontab">.+?|<.a>)([^<]*)' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == False): oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): for aEntry in aResult[1]: sUrl2 = aEntry[0] sEpisode = aEntry[1].replace('é', 'e').strip() #épisode 2 if 'http' not in sUrl2: sUrl2 = URL_MAIN[:-1] + sUrl2 sTitle = sMovieTitle + ' ' + sSaison + ' ' + sEpisode + ' (' + sYear + ')' oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sYear', sYear) oOutputParameterHandler.addParameter('sDesc', sDesc) oGui.addEpisode(SITE_IDENTIFIER, 'showSerieLinks', sTitle, '', sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory() def showSerieLinks(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') sDesc = oInputParameterHandler.getValue('sDesc') sYear= oInputParameterHandler.getValue('sYear') oParser = cParser() oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() cook = oRequestHandler.GetCookies() sPattern = "class=\"lien.+?playEpisode.+?\'([^\']*).+?'([^\']*)" aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: id = aEntry[0] xfield= aEntry[1] hostename = xfield.replace('_', ' ').replace('vf', 'VF') postdata = 'id=' + id + '&xfield=' + xfield + '&action=playEpisode' sUrl2 = URL_MAIN +'engine/inc/serial/app/ajax/Season.php' sDisplayTitle = ('%s [COLOR coral]%s[/COLOR]') % (sTitle + ' (' + sYear + ')', hostename) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sDesc', sDesc) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('referer', sUrl) oOutputParameterHandler.addParameter('cook', cook) oOutputParameterHandler.addParameter('postdata', postdata) oGui.addLink(SITE_IDENTIFIER, 'showSerieHosters', sDisplayTitle, sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory() def showSerieHosters(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') referer = oInputParameterHandler.getValue('referer') cook = oInputParameterHandler.getValue('cook') postdata = oInputParameterHandler.getValue('postdata') oRequest = cRequestHandler(sUrl) oRequest.setRequestType(1) oRequest.addHeaderEntry('Referer', referer) oRequest.addHeaderEntry('Content-Type', 'application/x-www-form-urlencoded') #oRequest.addHeaderEntry('Cookie', cook) # pas besoin ici mais besoin pour les films oRequest.addParametersLine(postdata) shtml=oRequest.request() oParser = cParser() sPattern = '