# -*- coding: utf-8 -*- # vStream https://github.com/Kodi-vStream/venom-xbmc-addons import re # import unicodedata from resources.lib.comaddon import progress from resources.lib.gui.gui import cGui from resources.lib.gui.hoster import cHosterGui 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 UA = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0' SITE_IDENTIFIER = 'cinemay_com' SITE_NAME = 'Cinemay' SITE_DESC = 'Films & Séries en streaming' URL_MAIN = 'https://www.cinemay.li/' MOVIE_NEWS = (URL_MAIN + 'film-vf-streaming/', 'showMovies') MOVIE_MOVIE = (URL_MAIN + 'film-vf-streaming/', 'showMovies') MOVIE_GENRES = (True, 'showGenres') SERIE_NEWS = (URL_MAIN + 'serie-streaming/', 'showMovies') SERIE_SERIES = (URL_MAIN + 'serie-streaming/', 'showMovies') # SERIE_LIST = (URL_MAIN + 'serie-streaming/', 'showSeriesList') URL_SEARCH = (URL_MAIN + '?keyword=', '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', 'http://venom/') 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 & Séries (Genres)', 'genres.png', oOutputParameterHandler) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', SERIE_NEWS[0]) oGui.addDir(SITE_IDENTIFIER, SERIE_NEWS[1], 'Séries (Derniers ajouts)', 'news.png', oOutputParameterHandler) # oOutputParameterHandler = cOutputParameterHandler() # oOutputParameterHandler.addParameter('siteUrl', SERIE_LIST[0]) # oGui.addDir(SITE_IDENTIFIER, SERIE_LIST[1], 'Séries (Liste)', 'az.png', oOutputParameterHandler) oGui.setEndOfDirectory() def showSearch(): oGui = cGui() sSearchText = oGui.showKeyBoard() if (sSearchText != False): sUrl = URL_SEARCH[0] + sSearchText 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/comédie/']) liste.append(['Crime', URL_MAIN + 'genre/crime/']) liste.append(['Documentaire', URL_MAIN + 'genre/documentaire/']) 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(['Guerre & politics', URL_MAIN + 'genre/war-politics/']) liste.append(['Histoire', URL_MAIN + 'genre/histoire/']) liste.append(['Horreur', URL_MAIN + 'genre/horreur/']) liste.append(['Enfants', URL_MAIN + 'genre/kids/']) liste.append(['Musique', URL_MAIN + 'genre/musique/']) liste.append(['Mystère', URL_MAIN + 'genre/mystère/']) liste.append(['Téléfilm', URL_MAIN + 'genre/telefilm/']) liste.append(['Romance', URL_MAIN + 'genre/romance/']) liste.append(['Science-Fiction', URL_MAIN + 'genre/science_fiction/']) liste.append(['Soap', URL_MAIN + 'genre/soap/']) 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 showMovies(sSearch=''): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') if sSearch: sUrl = sSearch.replace(' ', '+') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sPattern = ' 5: if cUtil().CheckOccurence(sSearch.replace(URL_SEARCH[0], ''), sTitle) == 0: continue oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) if '/serie' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'showSeries', sTitle, '', sThumb, '', oOutputParameterHandler) else: oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumb, '', oOutputParameterHandler) progress_.VSclose(progress_) if not sSearch: sNextPage = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) number = re.search('/([0-9]+)', sNextPage).group(1) oGui.addNext(SITE_IDENTIFIER, 'showMovies', '[COLOR teal]Page ' + number + ' >>>[/COLOR]', oOutputParameterHandler) oGui.setEndOfDirectory() def __checkForNextPage(sHtmlContent): sPattern = 'href="([^"]+)">>><' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): return URL_MAIN[:-1] + aResult[1][0] return False def showSeriesNews(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sPattern = '
([^<]+)' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) 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] sTitle = re.sub('(\d+)×(\d+)', 'S\g<1>E\g<2>', aEntry[1]) sTitle = sTitle.replace(':', '') cCleantitle = re.sub('S\d+E\d+', '', sTitle) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', cCleantitle) oGui.addTV(SITE_IDENTIFIER, 'showSeries', sTitle, '', '', '', oOutputParameterHandler) progress_.VSclose(progress_) oGui.setEndOfDirectory() def showSeriesList(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sPattern = '
  • ([^<]+)

    |
  • .+?href="([^"]+)">([^<]+)' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) 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 if aEntry[0]: oGui.addText(SITE_IDENTIFIER, '[COLOR red]' + aEntry[0] + '[/COLOR]') else: sUrl = aEntry[1] sTitle = aEntry[2] oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oGui.addTV(SITE_IDENTIFIER, 'showSeries', sTitle, '', '', '', oOutputParameterHandler) progress_.VSclose(progress_) oGui.setEndOfDirectory() def showSeries(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() # on remplace pour afficher la langue sHtmlContent = sHtmlContent.replace('width: 50%;float: left;', 'VF') sHtmlContent = sHtmlContent.replace('width: 50%;float: right;', 'VOSTFR') oParser = cParser() sDesc = '' try: sPattern = '

    Résumé.+?treaming : (.+?)

    ' aResult = oParser.parse(sHtmlContent, sPattern) if aResult[0]: sDesc = aResult[1][0] except: pass sPattern = 'class="episodios" style="([^"]+)">|class="numerando" style="margin: 0">([^<]+)<.+?data-target="([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == False): oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): for aEntry in aResult[1]: if aEntry[0]: # Affichage de la langue oGui.addText(SITE_IDENTIFIER, '[COLOR crimson]' + aEntry[0] + '[/COLOR]') else: # on vire le double affichage de la saison sMovieTitle = re.sub('- Saison \d+', '', sMovieTitle) sTitle = sMovieTitle + ' ' + aEntry[1].replace(' x ', '').replace(' ', '') sData = aEntry[2] oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sData', sData) oGui.addEpisode(SITE_IDENTIFIER, 'showSeriesHosters', sTitle, '', sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory() def showLinks(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sRefUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') oRequestHandler = cRequestHandler(sRefUrl) sHtmlContent = oRequestHandler.request() oParser = cParser() sDesc = '' try: sPattern = '

    ([^<>"]+)

    ' aResult = oParser.parse(sHtmlContent, sPattern) if aResult[0]: sDesc = aResult[1][0] except: pass sPattern = 'var movie.+?id.+?"(.+?)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): MovieUrl = URL_MAIN + 'playery/?id=' + aResult[1][0] oRequestHandler = cRequestHandler(MovieUrl) oRequestHandler.addHeaderEntry("User-Agent", UA) oRequestHandler.addHeaderEntry("Referer", sRefUrl) sHtmlContent = oRequestHandler.request() head = oRequestHandler.getResponseHeader() cookies = getcookie(head) sPattern = 'hidden" name="videov" id="videov" value="([^"]+).+?([^<]+).+?/flags/(.+?)\.' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: sHost = aEntry[1].replace(' ', '').replace('.ok.ru', 'ok.ru') sHost = re.sub('\.\w+', '', sHost) if 'nowvideo' in sHost: continue sHost = sHost.capitalize() sLang = aEntry[2].upper() sTitle = ('%s (%s) [COLOR coral]%s[/COLOR]') % (sMovieTitle, sLang, sHost) sUrl = URL_MAIN[:-1] + aEntry[0] oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sRefUrl', sRefUrl) oOutputParameterHandler.addParameter('cookies', cookies) 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() oParser = cParser() sPattern = 'id="videov" value="([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: sHosterUrl = aEntry if 'opsktp' in aEntry: # redirection vers ==> fsimg oRequestHandler = cRequestHandler(aEntry) 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() def showSeriesHosters(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') sData = oInputParameterHandler.getValue('sData') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() oParser = cParser() # Decoupage pour cibler l'épisode sPattern = sData + '">(.+?)' sHtmlContent = oParser.parse(sHtmlContent, sPattern) sPattern = 'id="videov" value="([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: sHosterUrl = aEntry oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sMovieTitle) oHoster.setFileName(sMovieTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb) oGui.setEndOfDirectory() def showHostersOld(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') sRefUrl = oInputParameterHandler.getValue('sRefUrl') sCookie = oInputParameterHandler.getValue('cookies') # validation oRequestHandler = cRequestHandler(URL_MAIN + 'image/logo.png') oRequestHandler.addHeaderEntry("User-Agent", UA) oRequestHandler.addHeaderEntry("Referer", sRefUrl) oRequestHandler.addHeaderEntry("Cookie", sCookie) sHtmlContent = oRequestHandler.request() # final oRequestHandler = cRequestHandler(sUrl) oRequestHandler.addHeaderEntry("User-Agent", UA) oRequestHandler.addHeaderEntry("Referer", sRefUrl) oRequestHandler.addHeaderEntry("Cookie", sCookie) sHtmlContent = oRequestHandler.request() sPattern = '