def showEpisode(): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sThumb = oInputParameterHandler.getValue('sThumb') oRequestHandler = cRequestHandler(sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Referer', RandomReferer()) sHtmlContent = oRequestHandler.request() try: sDesc = oParser.parse(sHtmlContent, '</headline15>.+?<font style=.+?>([^"]+)</font')[1][0] except: sDesc = "" if 'HTML/JavaScript Encoder' in sHtmlContent: sHtmlContent = ICDecode(sHtmlContent) sPattern = '<headline11>(.+?)</headline11></a>|href="*([^"]+)"* title="([^"]+)"[^>]+style="*text-decoration:none;"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): isPython3 = isMatrix() oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: if not isPython3: sTitle = unicode(aEntry[2], 'iso-8859-1') sTitle = unicodedata.normalize('NFD', sTitle).encode('ascii', 'ignore') sTitle = sTitle.encode('ascii', 'ignore').decode('ascii').replace(' VF', '').replace(' VOSTFR', '') else: sTitle = aEntry[2] sTitle = cUtil().unescape(sTitle) sUrl2 = cUtil().unescape(aEntry[1]) if not sUrl2.startswith('http'): sUrl2 = URL_MAIN + sUrl2 if aEntry[0]: oGui.addText(SITE_IDENTIFIER, '[COLOR red]' + aEntry[0] + '[/COLOR]') else: oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oGui.addEpisode(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory()
def getEPG(EPG, sTitle): oParser = cParser() sTitle = sTitle.replace('+', 'plus') try: sTitle = cUtil().CleanName(sTitle) except: pass sTitle = re.sub('[^%s]' % (string.ascii_lowercase + string.digits), '', sTitle.lower()) sPattern = '(.+?)\/>(.+?)<' aResult = oParser.parse(EPG, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: sChannel = aEntry[0] sChannel = re.sub( '[^%s]' % (string.ascii_lowercase + string.digits), '', sChannel.lower()) if sChannel == sTitle: sDesc = aEntry[1].replace('[COLOR khaki]', '\r\n\t[COLOR khaki]') sDesc = sDesc.replace('[/COLOR]', '[/COLOR]\r\n') return sDesc return ''
def __getMediaLinkForGuest(self): v = self.getHostAndIdFromUrl(self.__sUrl) sId = v[1] sHost = v[0] web_url = 'http://' + sHost + '/videoembed/' + sId HEADERS = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' } req = urllib2.Request(web_url, headers=HEADERS) response = urllib2.urlopen(req) sHtmlContent = response.read() response.close() oParser = cParser() sHtmlContent = oParser.abParse(sHtmlContent, 'data-options=', '" data-player-container', 14) sHtmlContent = cUtil().removeHtmlTags(sHtmlContent) sHtmlContent = cUtil().unescape(sHtmlContent) # .decode('utf-8')) page = json.loads(sHtmlContent) page = json.loads(page['flashvars']['metadata']) if page: url = [] qua = [] for x in page['videos']: url.append(x['url']) qua.append(x['name']) # Si au moins 1 url if (url): # dialogue qualité api_call = dialog().VSselectqual(qua, url) if (api_call): api_call = '%s|User-Agent=%s&Accept=%s' % ( api_call, HEADERS['User-Agent'], HEADERS['Accept']) api_call = api_call + '&Referer=' + self.__sUrl + '&Origin=http://ok.ru' return True, api_call return False, False
def showMovies(sSearch=''): oGui = cGui() oParser = cParser() if sSearch: sUrl = sSearch.replace(' ', '+') else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sPattern = '<div class="video\s.+?href="([^"]+).+?class="izimg".+?src="([^"]+).+?title="([^"]+)' 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) oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sUrl = aEntry[0] sTitle = aEntry[2].replace(' Streaming', '') sThumb = aEntry[1] if not sThumb.startswith('http'): sThumb = URL_MAIN + sThumb # tris search if sSearch and total > 3: if cUtil().CheckOccurence(sSearch.replace(URL_SEARCH[0], ''), sTitle) == 0: continue oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oGui.addTV(SITE_IDENTIFIER, 'ShowEpisode', sTitle, '', sThumb, '', oOutputParameterHandler) progress_.VSclose(progress_) if not sSearch: sNextPage, sPaging = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) oGui.addNext(SITE_IDENTIFIER, 'showMovies', 'Page ' + sPaging, oOutputParameterHandler) oGui.setEndOfDirectory()
def __getMediaLinkForGuest(self): import requests v = self.getHostAndIdFromUrl(self.__sUrl) sId = v[1] sHost = v[0] web_url = 'http://' + sHost + '/videoembed/' + sId HEADERS = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' } St = requests.Session() sHtmlContent = St.get(web_url).content.decode('utf-8') oParser = cParser() sHtmlContent = oParser.abParse(sHtmlContent, 'data-options=', '" data-player-container', 14) sHtmlContent = cUtil().removeHtmlTags(sHtmlContent) sHtmlContent = cUtil().unescape(sHtmlContent) page = json.loads(sHtmlContent) page = json.loads(page['flashvars']['metadata']) if page: url = [] qua = [] for x in page['videos']: url.append(x['url']) qua.append(x['name']) # Si au moins 1 url if (url): # dialogue qualité api_call = dialog().VSselectqual(qua, url) if (api_call): api_call = api_call + '|Referer=' + self.__sUrl return True, api_call return False, False
def getChannelEpg(self, sChannel): oUtil = cUtil() oParser = cParser() info = {} info['title'] = '' info['year'] = '' info['duration'] = '' info['plot'] = '' info['media_type'] = '' info['cover_url'] = '' sChannel = sChannel.replace('+', 'plus') try: sChannel = oUtil.CleanName(sChannel) except: pass sChannel = sChannel.lower().replace(' ', '-') sUrl = 'https://playtv.fr/chaine-tv/en-direct/' + sChannel oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sPattern = 'class="program-title"> *<a href="(.+?)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sUrl = 'https://playtv.fr' + aResult[1][0] oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sPattern = '(<div class="program-img margin">.+?<img src="(.+?)".+?|)'+\ 'Genre du programme.+?<span>(.+?)</span>' + \ '.+?"program-more-infos"'+ \ '(.+?>Année</span> (.+?)</p>|)'+ \ '(.+?Durée</span> <span>(.+?)</span>|)'+ \ '.+?ProgrammeTitle-heading.+?title="(.+?)"' + \ '.+?program-summary.+?<p>(.+?)</div>' # >1h40 / 35 minutes # '.+?<span class="red">(.+?)<'+ \ aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): aEntry = aResult[1][0] info['title'] = aEntry[7] info['year'] = aEntry[4] info['duration'] = aEntry[6] sDesc = aEntry[8].replace('<p>', '\r\n').replace('</p>', '') sDesc = oUtil.removeHtmlTags(sDesc) info['plot'] = sDesc info['media_type'] = aEntry[2] info['cover_url'] = aEntry[1] return info
def showMovies(sSearch=''): oGui = cGui() oParser = cParser() if sSearch: sUrl = sSearch.replace(' ', '+') else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sPattern = 'class="post-thumbnail">.+?href="([^"]+)" *title="([^"]+)".+?src="([^"]+)"' 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) oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sUrl = aEntry[0] sThumb = aEntry[2] sTitle = aEntry[1] # Si recherche et trop de resultat, on nettoye if sSearch and total > 2: if cUtil().CheckOccurence(sSearch.replace(URL_SEARCH[0], ''), sTitle) == 0: continue oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oGui.addTV(SITE_IDENTIFIER, 'showEpisodes', sTitle, '', sThumb, '', oOutputParameterHandler) progress_.VSclose(progress_) if not sSearch: # une seule page par recherche sNextPage, sPaging = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) oGui.addNext(SITE_IDENTIFIER, 'showMovies', 'Page ' + sPaging, oOutputParameterHandler) oGui.setEndOfDirectory()
def __getMediaLinkForGuest(self): api_call = '' url = [] qua = [] sId = self.__getIdFromUrl(self.__sUrl) sUrl = 'https://api.tune.pk/v3/videos/' + sId oRequest = cRequestHandler(sUrl) oRequest.addHeaderEntry('User-Agent', UA) oRequest.addHeaderEntry('X-KEY', '777750fea4d3bd585bf47dc1873619fc') oRequest.addHeaderEntry('X-REQ-APP', 'web') #pour les mp4 oRequest.addHeaderEntry('Referer', self.__sUrl) #au cas ou sHtmlContent1 = oRequest.request() if (sHtmlContent1): sHtmlContent = cUtil().removeHtmlTags(sHtmlContent1) sHtmlContent = cUtil().unescape(sHtmlContent1) content = json.loads(sHtmlContent) content = content["data"]["videos"]["files"] if content: for x in content: if 'Auto' in str(content[x]['label']): continue url2 = str(content[x]['file']).replace('index', str(content[x]['label'])) url.append(url2) qua.append(repr(content[x]['label'])) api_call = dialog().VSselectqual(qua,url) if (api_call): return True, api_call + '|User-Agent=' + UA return False, False
def showSearchResult(sSearch=''): oGui = cGui() oParser = cParser() sUrl = sSearch oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sPattern = '<div class="thumbnail animation-2".+?href="([^"]+)".+?img src="([^"]+)" alt="([^"]+)".+?class="year">([^<]+)<.+?<p>(.+?)<' 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) oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sUrl = aEntry[0] sThumb = re.sub('/w\d+', '/w342', aEntry[1], 1) # meilleure qualité sTitle = aEntry[2] sYear = aEntry[3] sDesc = aEntry[4] # Filtrer les résultats if sSearch and total > 5: if cUtil().CheckOccurence(sSearch.replace(URL_SEARCH[0], ''), sTitle) == 0: continue oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter( 'sYear', sYear) # permet à addMovie d'afficher l'année dans le détail oGui.addMovie(SITE_IDENTIFIER, 'showLinks', sTitle, '', sThumb, sDesc, oOutputParameterHandler) progress_.VSclose(progress_)
def showGenres(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) sHtmlContent = oRequestHandler.request() if 'HTML/JavaScript Encoder' in sHtmlContent: sHtmlContent = ICDecode(sHtmlContent) if sHtmlContent.startswith('<script type="text/javascript">'): sHtmlContent = FullUnescape(sHtmlContent) sPattern = '<center><a href="(.+?)" onmouseover="this.style.color.+?>(.+?)</a>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) genres = [] if (aResult[0] == True): for aEntry in aResult[1]: sTitle = aEntry[1] sTitle = str(cUtil().unescape(sTitle)) # on filtre les genres if 'Ecchi' in sTitle: continue sUrl = URL_MAIN + aEntry[0] genres.append((sTitle, sUrl)) # Trie des genres par ordre alphabétique genres = sorted(genres, key=lambda genre: genre[0]) oOutputParameterHandler = cOutputParameterHandler() for sTitle, sUrl in genres: oOutputParameterHandler.addParameter('siteUrl', sUrl) oGui.addDir(SITE_IDENTIFIER, 'showMovies', sTitle, 'genres.png', oOutputParameterHandler) oGui.setEndOfDirectory()
def showHosters(): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMainUrl = oInputParameterHandler.getValue('sMainUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sYear = oInputParameterHandler.getValue('sYear') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sHtmlContent = sHtmlContent.replace('<br/>', '') # traitement de sDesc # Recuperation info film, com et image sThumb = '' sDesc = '' sPattern = '<p style="text-align: center;"><img src="([^"]+)".+?<p style="text-align: left;">(.+?)</p>' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sThumb = aResult[1][0][0] sDesc = cUtil().unescape(aResult[1][0][1]) sPattern = '<iframe src="([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0]): sMovieTitle = sMovieTitle.replace(' [HD]', '') sLink = aResult[1][0] if sLink.startswith('/'): sLink = URL_HOST[:-1] + sLink oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('sLink', sLink) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oGui.addLink(SITE_IDENTIFIER, 'showHostersLink3', sMovieTitle, sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory()
def extractLink(html): # Fake link fake1 = 'https://www.youtube.com' fake2 = '/api.js' final = '' oParser = cParser() sPattern = '(?i)src=(?:\'|")(.+?)(?:\'|")' aResult = re.findall(sPattern, html, re.DOTALL) if aResult: for a in aResult: if ('adnetworkperformance' in a) or ('jquery' in a): continue if fake1 not in a and fake2 not in a: final = a break sPattern = 'encodeURI\("(.+?)"\)' aResult = re.findall(sPattern, html) if aResult: if fake1 not in aResult[0] and fake2 not in aResult[0]: final = aResult[0] sPattern = "'file': '(.+?)'," aResult = oParser.parse(html, sPattern) if aResult[0] is True: if fake1 not in aResult[1][0] and fake2 not in aResult[1][0]: final = aResult[1][0] # nouveau codage if ';&#' in final: final = cUtil().unescape(final) if (not final.startswith('http')) and (len(final) > 2): final = URL_MAIN + final return final.replace(' ', '').replace('\n', '')
def showSeriesSaison(): oGui = cGui() grab = cTMDb() addons = addon() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sFanart = oInputParameterHandler.getValue('sFanart') sTmdbId = oInputParameterHandler.getValue('sTmdbId') sId = oInputParameterHandler.getValue('sId') if sId == False: sId = sUrl.split('/')[-1] if sFanart == False: sFanart = '' # recherche la serie complete oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sMovieTitle) # oOutputParameterHandler.addParameter('type', 'serie') # oOutputParameterHandler.addParameter('searchtext', sMovieTitle) if not isMatrix(): oOutputParameterHandler.addParameter('searchtext', cUtil().CleanName(sMovieTitle)) else: oOutputParameterHandler.addParameter('searchtext', sMovieTitle) oGuiElement = cGuiElement() oGuiElement.setSiteName('globalSearch') oGuiElement.setFunction('searchMovie') oGuiElement.setTitle(addons.VSlang(30414)) oGuiElement.setCat(2) oGuiElement.setIcon("searchtmdb.png") oGui.addFolder(oGuiElement, oOutputParameterHandler) result = grab.getUrl(sUrl) total = len(result) if (total > 0): total = len(result['seasons']) progress_ = progress().VScreate(SITE_NAME) oOutputParameterHandler = cOutputParameterHandler() for i in result['seasons']: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sNbreEp, SSeasonNum = i['episode_count'], i['season_number'] # Mise en forme des infos (au format meta imdb) i = grab._format(i, '') sTitle, sGenre, sThumb, sFanart, sDesc, sYear = i['title'], i[ 'genre'], i['cover_url'], i['backdrop_url'], i['plot'], i[ 'year'] sTitle = 'Saison ' + str(SSeasonNum) + ' (' + str(sNbreEp) + ')' sUrl = 'tv/' + str(sId) + '/season/' + str(SSeasonNum) oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sId', sId) oOutputParameterHandler.addParameter('sSeason', SSeasonNum) oOutputParameterHandler.addParameter('sFanart', sFanart) oOutputParameterHandler.addParameter('sTmdbId', sTmdbId) cGui.CONTENT = "tvshows" oGuiElement = cGuiElement() oGuiElement.setTmdbId(sTmdbId) oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('showSeriesEpisode') oGuiElement.setTitle(sTitle) oGuiElement.setFileName(sMovieTitle) oGuiElement.setIcon('series.png') oGuiElement.setMeta(2) oGuiElement.setThumbnail(sThumb) oGuiElement.setPoster(sThumb) oGuiElement.setFanart(sFanart) oGuiElement.setCat(7) oGuiElement.setDescription(sDesc) oGuiElement.setYear(sYear) oGuiElement.setGenre(sGenre) oGui.addFolder(oGuiElement, oOutputParameterHandler) progress_.VSclose(progress_) # changement mode view = addons.getSetting('visuel-view') oGui.setEndOfDirectory(view)
def showSeries(sSearch=''): grab = cTMDb() addons = addon() oInputParameterHandler = cInputParameterHandler() iPage = 1 term = '' if (oInputParameterHandler.exist('page')): iPage = oInputParameterHandler.getValue('page') if (oInputParameterHandler.exist('sSearch')): sSearch = oInputParameterHandler.getValue('sSearch') if sSearch: result = grab.getUrl('search/tv', iPage, 'query=' + sSearch) sUrl = '' else: sUrl = oInputParameterHandler.getValue('siteUrl') if (oInputParameterHandler.exist('genre')): term = 'with_genres=' + oInputParameterHandler.getValue('genre') if (oInputParameterHandler.exist('session_id')): term += 'session_id=' + oInputParameterHandler.getValue( 'session_id') result = grab.getUrl(sUrl, iPage, term) oGui = cGui() try: total = len(result) if (total > 0): total = len(result['results']) progress_ = progress().VScreate(SITE_NAME) for i in result['results']: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break # Mise en forme des infos (au format meta imdb) i = grab._format(i, '') sId, sTitle, sGenre, sThumb, sFanart, sDesc, sYear = i[ 'tmdb_id'], i['title'], i['genre'], i['cover_url'], i[ 'backdrop_url'], i['plot'], i['year'] if not isMatrix(): sTitle = sTitle.encode("utf-8") sSiteUrl = 'tv/' + str(sId) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sSiteUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sId', sId) oOutputParameterHandler.addParameter('sFanart', sFanart) oOutputParameterHandler.addParameter('sTmdbId', sId) if isMatrix(): oOutputParameterHandler.addParameter('searchtext', sTitle) else: oOutputParameterHandler.addParameter( 'searchtext', cUtil().CleanName(sTitle)) cGui.CONTENT = "tvshows" oGuiElement = cGuiElement() oGuiElement.setTmdbId(sId) oGuiElement.setSiteName( SITE_IDENTIFIER) # a activer pour saisons oGuiElement.setFunction('showSeriesSaison') oGuiElement.setTitle(sTitle) oGuiElement.setFileName(sTitle) oGuiElement.setIcon('series.png') oGuiElement.setMeta(2) oGuiElement.setThumbnail(sThumb) oGuiElement.setPoster(sThumb) oGuiElement.setFanart(sFanart) oGuiElement.setCat(2) oGuiElement.setDescription(sDesc) oGuiElement.setYear(sYear) oGuiElement.setGenre(sGenre) oGui.addFolder(oGuiElement, oOutputParameterHandler) progress_.VSclose(progress_) if (int(iPage) > 0): iNextPage = int(iPage) + 1 oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('page', iNextPage) if sSearch: oOutputParameterHandler.addParameter('sSearch', sSearch) if (oInputParameterHandler.exist('genre')): oOutputParameterHandler.addParameter( 'genre', oInputParameterHandler.getValue('genre')) oGui.addNext(SITE_IDENTIFIER, 'showSeries', 'Page ' + str(iNextPage), oOutputParameterHandler) except TypeError: oGui.addText(SITE_IDENTIFIER, '[COLOR red]Aucun résultat n\'a été trouvé.[/COLOR]') # changement mode view = addons.getSetting('visuel-view') oGui.setEndOfDirectory(view)
def showLists(): oGui = cGui() grab = cTMDb() addons = addon() oInputParameterHandler = cInputParameterHandler() iPage = 1 if (oInputParameterHandler.exist('page')): iPage = oInputParameterHandler.getValue('page') sUrl = oInputParameterHandler.getValue('siteUrl') result = grab.getUrl('list/' + sUrl, iPage, '') total = len(result) if (total > 0): total = len(result['items']) progress_ = progress().VScreate(SITE_NAME) oOutputParameterHandler = cOutputParameterHandler() for i in result['items']: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break # Mise en forme des infos (au format meta imdb) i = grab._format(i, '') sId, sTitle, sType, sThumb, sFanart, sVote, sDesc, sYear = i[ 'tmdb_id'], i['title'], i['media_type'], i['cover_url'], i[ 'backdrop_url'], i['rating'], i['plot'], i['year'] if not isMatrix(): sTitle = sTitle.encode("utf-8") sDisplayTitle = "%s (%s)" % (sTitle, sVote) oOutputParameterHandler.addParameter('siteUrl', 'http://tmdb/%s' % sId) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sId', sId) oOutputParameterHandler.addParameter('sFanart', sFanart) oOutputParameterHandler.addParameter('sTmdbId', sId) if isMatrix(): oOutputParameterHandler.addParameter('searchtext', sTitle) else: oOutputParameterHandler.addParameter('searchtext', cUtil().CleanName(sTitle)) cGui.CONTENT = "movies" oGuiElement = cGuiElement() oGuiElement.setTmdbId(sId) oGuiElement.setSiteName('globalSearch') oGuiElement.setFunction('showSearch') oGuiElement.setTitle(sDisplayTitle) oGuiElement.setFileName(sTitle) if sType == 'movie': oGuiElement.setIcon('films.png') oGuiElement.setMeta(1) oGuiElement.setCat(1) elif sType == 'tv': oGuiElement.setIcon('series.png') oGuiElement.setMeta(2) oGuiElement.setCat(2) oGuiElement.setThumbnail(sThumb) oGuiElement.setPoster(sThumb) oGuiElement.setFanart(sFanart) oGuiElement.setDescription(sDesc) oGuiElement.setYear(sYear) if 'genre' in i: oGuiElement.setGenre(i['genre']) oGui.addFolder(oGuiElement, oOutputParameterHandler) progress_.VSclose(progress_) view = addons.getSetting('visuel-view') oGui.setEndOfDirectory(view)
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 = '<a href="([^"]+)" data-url=".+?" class=".+?" title="([^"]+)"><img.+?src="([^"]*)"' 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) oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break # Pas sure que ce soit utile, fonctionne sans... # try: # encode/decode pour affichage des accents en python 2 # sTitle = unicode(aEntry[1], 'utf-8') # sTitle = unicodedata.normalize('NFD', sTitle).encode('ascii', 'ignore').decode('unicode_escape') # sTitle = sTitle.encode('latin-1') # except NameError: # sTitle = aEntry[1] # Nettoyage du titre sTitle = aEntry[1].replace(' en streaming', '').replace('- Saison ', ' S') if sTitle.startswith('Film'): sTitle = sTitle.replace('Film ', '') sUrl = URL_MAIN[:-1] + aEntry[0] sThumb = URL_MAIN[:-1] + aEntry[2] # filtre search if sSearch and total > 5: if cUtil().CheckOccurence(sSearch.replace(URL_SEARCH[0], ''), sTitle) == 0: continue 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, sPaging = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) oGui.addNext(SITE_IDENTIFIER, 'showMovies', 'Page ' + sPaging, oOutputParameterHandler) oGui.setEndOfDirectory()
def TraiteTitre(self, sTitle): # Format Obligatoire a traiter via le fichier source # ------------------------------------------------- # Episode 7 a 9 > Episode 7-9 # Saison 1 à ? > Saison 1-? # Format de date > 11/22/3333 ou 11-22-3333 # convertion unicode ne fonctionne pas avec les accents try: # traitement du titre pour les caracteres spéciaux déplacé dans parser plus global # traitement du titre pour retirer le - quand c'est une Saison. Tiret, tiret moyen et cadratin sTitle = sTitle.replace(' - Saison', ' Saison').replace( ' – Saison', ' Saison').replace(' — Saison', ' Saison') if not isMatrix(): sTitle = sTitle.decode('utf-8') except: pass # recherche l'année, uniquement si entre caractere special a cause de 2001 odysse de l'espace ou k2000 string = re.search('([^\w ][0-9]{4}[^\w ])', sTitle) if string: sTitle = sTitle.replace(string.group(0), '') self.__Year = str(string.group(0)[1:5]) self.addItemValues('year', self.__Year) # recherche une date string = re.search('([\d]{2}[\/|-]\d{2}[\/|-]\d{4})', sTitle) if string: sTitle = sTitle.replace(string.group(0), '') self.__Date = str(string.group(0)) sTitle = '%s (%s) ' % (sTitle, self.__Date) #~ #recherche Lang #~ index = {' vostfr': ' [VOSTFR]', ' vf': ' [VF]', ' truefrench': ' [TrueFrench]'} #~ for cle in index: #~ sTitle = sTitle.replace(cle.upper(), index[cle]).replace(cle, index[cle]).replace('(%s)' % (cle), index[cle]) #~ #recherche Qualité #~ index = {'1080i': '(1080)', '1080p': '(1080)', '1080I': '(1080)', '1080P': '(1080)', '720i': '(720)', '720p': '(720)', '720I': '(720)', '720P': '(720)'} #~ for cle in index: #~ sTitle = sTitle.replace(cle, index[cle]).replace('[%s]' % (cle), index[cle]) # Recherche saison et episode a faire pr serie uniquement if True: m = re.search( '(?i)(?:^|[^a-z])((?:E|(?:\wpisode\s?))([0-9]+(?:[\-\.][0-9\?]+)*))', sTitle, re.UNICODE) if m: # ok y a des episodes sTitle = sTitle.replace(m.group(1), '') ep = m.group(2) if len(ep) == 1: ep = '0' + ep self.__Episode = ep self.addItemValues('Episode', self.__Episode) # pour les saisons m = re.search('(?i)( s(?:aison +)*([0-9]+(?:\-[0-9\?]+)*))', sTitle, re.UNICODE) if m: sTitle = sTitle.replace(m.group(1), '') sa = m.group(2) if len(sa) == 1: sa = '0' + sa self.__Season = sa self.addItemValues('Season', self.__Season) else: # pas d'episode mais y a t il des saisons ? m = re.search('(?i)( s(?:aison +)*([0-9]+(?:\-[0-9\?]+)*))', sTitle, re.UNICODE) if m: sTitle = sTitle.replace(m.group(1), '') sa = m.group(2) if len(sa) == 1: sa = '0' + sa self.__Season = sa self.addItemValues('Season', self.__Season) # vire doubles espaces sTitle = re.sub(' +', ' ', sTitle) # enleve les crochets et les parentheses si elle sont vides sTitle = sTitle.replace('()', '').replace('[]', '').replace('- -', '-') # vire espace a la fin et les - (attention, il y a 2 tirets differents meme si invisible a l'oeil nu et un est en unicode) sTitle = re.sub('[- –]+$', '', sTitle) # et au debut if sTitle.startswith(' '): sTitle = sTitle[1:] # recherche les Tags restant : () ou [] sauf tag couleur sTitle = re.sub('([\(|\[](?!\/*COLOR)[^\)\(\]\[]+?[\]|\)])', '[COLOR ' + self.__sDecoColor + ']\\1[/COLOR]', sTitle) # on reformate SXXEXX Titre [tag] (Annee) sTitle2 = '' if self.__Season: sTitle2 = sTitle2 + 'S' + self.__Season if self.__Episode: sTitle2 = sTitle2 + 'E' + self.__Episode # Titre unique pour marquer VU (avec numéro de l'épisode pour les séries) self.__sTitleWatched = cUtil().titleWatched(sTitle).replace(' ', '') if sTitle2: self.addItemValues('tvshowtitle', cUtil().getSerieTitre(sTitle)) self.__sTitleWatched += '_' + sTitle2 self.addItemValues('originaltitle', self.__sTitleWatched) if sTitle2: sTitle2 = '[COLOR %s]%s[/COLOR] ' % (self.__sDecoColor, sTitle2) sTitle2 = sTitle2 + sTitle if self.__Year: sTitle2 = '%s [COLOR %s](%s)[/COLOR]' % ( sTitle2, self.__sDecoColor, self.__Year) # on repasse en utf-8 if not isMatrix(): return sTitle2.encode('utf-8') return sTitle2
def showMovies(sSearch=''): oGui = cGui() oParser = cParser() if sSearch: typeSearch, sSearch = sSearch.split('=') sSearch = Unquote(sSearch) sSearch = cUtil().CleanName(sSearch) sSearch = QuotePlus(sSearch).upper() # remplace espace par + et passe en majuscule sUrl = URL_SEARCH[0] + sSearch + '.html' oRequestHandler = cRequestHandler(sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Referer', URL_MAIN) sHtmlContent = oRequestHandler.request() sHtmlContent = cutSearch(sHtmlContent, typeSearch) else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Referer', RandomReferer()) sHtmlContent = oRequestHandler.request() # sHtmlContent = DecryptMangacity(sHtmlContent) if 'HTML/JavaScript Encoder' in sHtmlContent: sHtmlContent = ICDecode(sHtmlContent) if sHtmlContent.startswith('<script type="text/javascript">'): sHtmlContent = FullUnescape(sHtmlContent) if sSearch or 'categorie.php' in sUrl or 'categorie_' in sUrl or 'listing3.php?' in sUrl or 'drama.php' in sUrl: sPattern = '<center><div style="background: url\(\'([^\'].+?)\'\); background-size.+?alt="(.+?)" title.+?<a href=["\']*(.+?)[\'"]* class=.button' else: sPattern = '<center><div style="background: url\(\'([^\'].+?)\'\); background-size.+?<a href="([^"]+)".+?alt="(.+?)"' sHtmlContent = re.sub('<a\s*href=\"categorie.php\?watch=\"\s*class="genre\s*\"', '', sHtmlContent, re.DOTALL) 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) isPython3 = isMatrix() oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sThumb = aEntry[0] if not sThumb.startswith('http'): sThumb = URL_MAIN + sThumb if sSearch or 'categorie.php' in sUrl or 'categorie_' in sUrl or 'listing3.php?' in sUrl or 'drama.php' in sUrl: sTitle = aEntry[1] sUrl2 = aEntry[2] else: sTitle = str(aEntry[2]) sUrl2 = aEntry[1] if not sUrl2.startswith('http'): sUrl2 = URL_MAIN + sUrl2 # affichage de la langue sLang = '' if 'VF' in sTitle: sLang = 'VF' elif 'VOSTFR' in sTitle: sLang = 'VOSTFR' # affichage de la qualité -> NON, qualité fausse # sQual = '' # if 'DVDRIP' in sTitle: # sQual = 'DVDRIP' # Nettoyer le titre sTitle = sTitle.replace(' DVDRIP', '').replace('Visionnez ', '') sTitle = sTitle.replace('[Streaming] - ', '').replace('gratuitement maintenant', '') if ' - Episode' in sTitle: sTitle = sTitle.replace(' -', '') if not isPython3: sTitle = cUtil().CleanName(sTitle).capitalize() else: sTitle.capitalize() sDisplayTitle = ('%s (%s)') % (sTitle, sLang) oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) if 'drama.php' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'showEpisode', sDisplayTitle, 'animes.png', sThumb, '', oOutputParameterHandler) elif '?manga=' in sUrl2: oGui.addAnime(SITE_IDENTIFIER, 'showEpisode', sDisplayTitle, 'animes.png', sThumb, '', oOutputParameterHandler) elif '?serie=' in sUrl2: oGui.addTV(SITE_IDENTIFIER, 'showEpisode', sDisplayTitle, 'series.png', sThumb, '', oOutputParameterHandler) elif '?film=' in sUrl2: oGui.addMovie(SITE_IDENTIFIER, 'showMovies', sDisplayTitle, 'films.png', sThumb, '', oOutputParameterHandler) else: oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sDisplayTitle, 'films.png', sThumb, '', oOutputParameterHandler) progress_.VSclose(progress_) if not sSearch: # une seule page par recherche sNextPage = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) oGui.addNext(SITE_IDENTIFIER, 'showMovies', 'Suivant', oOutputParameterHandler) oGui.setEndOfDirectory()
def showMovies(sSearch=''): oGui = cGui() if sSearch: sUrl = sSearch.replace(' ', '+') else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sTypeYear = oInputParameterHandler.getValue('sTypeYear') if sTypeYear: sTypeYear = sTypeYear else: sTypeYear = '' sPattern = 'data-movie-id="\d+".+?href="([^"]+).+?oldtitle="([^"]+).+?data-original="([^ "]+).+?desc"><p>([^<]+)' oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() 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) utils = cUtil() oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break if sSearch: sUrl = aEntry[0] sTitle = aEntry[1] sThumb = aEntry[2] sDesc = aEntry[3] elif 'movie' in sTypeYear: sUrl = aEntry[0] if '/series' in sUrl: continue sTitle = aEntry[1] sThumb = aEntry[2] sDesc = aEntry[3] elif 'tvshows' in sTypeYear: sUrl = aEntry[0] if '/series' not in sUrl: continue sTitle = aEntry[1] sThumb = aEntry[2] sDesc = aEntry[3] else: sUrl = aEntry[0] sTitle = aEntry[1] sThumb = aEntry[2] sDesc = aEntry[3] sThumb = re.sub('/w\d+', '/w342', sThumb) try: sDesc = unicode(sDesc, 'utf-8') # converti en unicode sDesc = utils.unescape(sDesc).encode( 'utf-8') # retire les balises HTML except: pass oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) if '/serie' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'showSxE', sTitle, '', sThumb, sDesc, oOutputParameterHandler) else: oGui.addMovie(SITE_IDENTIFIER, 'showHosters', 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', 'Page ' + number, oOutputParameterHandler) oGui.setEndOfDirectory()
def showSeriesLinks(): # VSlog('mode serie') oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() if "zt-protect" in sUrl: # Dl Protect present aussi a cette étape. sHtmlContent = DecryptDlProtecte(sUrl) else: oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() # Affichage du texte oGui.addText(SITE_IDENTIFIER, '[COLOR olive]Qualités disponibles :[/COLOR]') # récupération du Synopsis sDesc = sMovieTitle # Ne pas laisser vide sinon un texte automatique faux va être calculé try: sPattern = 'synopsis.+(alt="">|<!--dle_image_end-->)(.+?)</div>' aResult = oParser.parse(sHtmlContent, sPattern) if aResult[0]: sDesc = cUtil().removeHtmlTags(aResult[1][0][1]) except: pass # on recherche d'abord la qualité courante sPattern = '</span> Qualité([^<]+)<.+?img src="([^"]+)".+?alt=.+?- Saison ([0-9]+)' aResult = oParser.parse(sHtmlContent, sPattern) sQual = '' sLang = '' if (aResult[1]): aEntry = aResult[1][0] sQual = aEntry[0].split('|')[0] sLang = aEntry[0].split('|')[1] sThumb = aEntry[ 1] # change pour chaque saison, il faut la rechercher si on navigue entre saisons sTitle = sMovieTitle + ' S' + aEntry[2] sDisplayTitle = ('%s [%s] (%s)') % (sTitle, sQual, sLang) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oGui.addSeason(SITE_IDENTIFIER, 'showSeriesHosters', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) # on regarde si dispo dans d'autres qualités sHtmlContent1 = CutQual(sHtmlContent) sPattern1 = 'href="([^"]+)"><span class="otherquality"><span style="color:#.{6}"><b>([^<]+)</b></span><span style="color:#.{6}"><b>([^<]+)' aResult1 = oParser.parse(sHtmlContent1, sPattern1) if (aResult1[0] == True): oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult1[1]: if 'animes' in sUrl: sUrl = URL_MAIN + 'animes' + aEntry[0] else: sUrl = URL_MAIN + 'telecharger-serie' + aEntry[0] sQual = aEntry[1] sLang = aEntry[2] sDisplayTitle = ('%s [%s] %s') % (sTitle, sQual, sLang) oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oGui.addSeason(SITE_IDENTIFIER, 'showSeriesLinks', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) # on regarde si dispo d'autres saisons # Une ligne par saison, pas besoin d'afficher les qualités ici saisons = [] sHtmlContent2 = CutSais(sHtmlContent) sPattern2 = 'href="([^"]+)"><span class="otherquality">([^<]+)<b>([^<]+)<span style="color:#.{6}">([^<]+)</span><span style="color:#.{6}">([^<]+)' aResult2 = oParser.parse(sHtmlContent2, sPattern2) # Affichage du texte if (aResult2[0] == True): oGui.addText(SITE_IDENTIFIER, '[COLOR olive]Autres saisons disponibles :[/COLOR]') oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult2[1]: sSaison = aEntry[2].strip() if sSaison in saisons: continue saisons.append(sSaison) if 'animes' in sUrl: sUrl = URL_MAIN + 'animes' + aEntry[0] else: sUrl = URL_MAIN + 'telecharger-serie' + aEntry[0] sTitle = sMovieTitle + ' ' + aEntry[1] + aEntry[2] oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oGui.addSeason(SITE_IDENTIFIER, 'showSeriesLinks', sTitle, 'series.png', sThumb, sMovieTitle, oOutputParameterHandler) oGui.setEndOfDirectory()
def showMovies(sSearch=''): oGui = cGui() if sSearch: sUrl = sSearch.replace(' ', '+') sPattern = '<div class="image">.+?<a href="([^"]+)".+?<img src="([^"]+)" alt="([^"]+)".+?<p>(.+?)</p>' else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sPattern = 'article id="post-\d+".+?img src="([^"]+)" alt="([^"]+).+?(?:|class="quality">([^<]+).+?)(?:|class="dtyearfr">([^<]+).+?)href="([^"]+).+?class="texto">(.*?)</div>' oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() 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) utils = cUtil() oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sLang = '' sYear = '' sDesc = '' if sSearch: sUrl = aEntry[0] sThumb = aEntry[1] sTitle = aEntry[2] sDesc = aEntry[3] else: sThumb = aEntry[0] sTitle = aEntry[1] if aEntry[2]: sLang = aEntry[2] if aEntry[3]: sYear = aEntry[3] sUrl = aEntry[4] if aEntry[5]: sDesc = aEntry[5] try: sDesc = unicode(sDesc, 'utf-8') # converti en unicode sDesc = utils.unescape(sDesc).encode( 'utf-8') # retire les balises HTML except: pass sDisplayTitle = ('%s (%s) (%s)') % (sTitle, sLang, sYear) oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) if '/serie' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'showSxE', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) else: oGui.addMovie(SITE_IDENTIFIER, 'showLink', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) progress_.VSclose(progress_) if not sSearch: sNextPage, sPaging = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) oGui.addNext(SITE_IDENTIFIER, 'showMovies', 'Page ' + sPaging, oOutputParameterHandler) oGui.setEndOfDirectory()
def showSearchResult(sSearch=''): oGui = cGui() oInputParameterHandler = cInputParameterHandler() loop = 2 if sSearch: SD = HD = 0 sUrl = sSearch else: SD = HD = -1 sUrl = oInputParameterHandler.getValue('siteUrl') oParser = cParser() aResult = [] NextPage = [] while (loop): oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() sHtmlContent = sHtmlContent.replace('<span style="background-color: yellow;"><font color="red">', '') sPattern = '<b><p style="font-size: 18px;"><A href="([^"]+)">(.+?)<\/A.+?<td align="center">\s*<img src="([^"]+)".+?<b>Description : (.+?)<br /><br />' aResult1 = oParser.parse(sHtmlContent, sPattern) if (aResult1[0] == False): oGui.addText(SITE_IDENTIFIER) if aResult1[0]: aResult = aResult + aResult1[1] sNextPage = __checkForNextPage(sHtmlContent) if (sNextPage != False): n = ' >>>' if sSearch: n = ' SD >>>' if loop == 2: n = ' HD >>>' NextPage.append((n, sNextPage)) loop = loop - 1 if (loop == 1): HD = len(aResult) if sUrl.find('=video') > 0: sUrl = sUrl.replace('=video', '=Films+HD') elif sUrl.find('=serie') > 0: sUrl = sUrl.replace('=serie', '=seriehd') else: loop = 0 if (aResult): i = 0 oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult: # titre ? if i == SD: oGui.addText(SITE_IDENTIFIER,'[COLOR olive]Qualitée SD[/COLOR]') if i == HD: oGui.addText(SITE_IDENTIFIER,'[COLOR olive]Qualitée HD[/COLOR]') i = i + 1 sQual = 'SD' if '-hd/' in aEntry[0] or 'bluray' in aEntry[0] or 'hdlight' in aEntry[0]: sQual = 'HD' if '-3d/' in aEntry[0]: sQual = '3D' sTitle = str(aEntry[1]).replace(' - Saison', ' Saison').replace(' - saison', ' Saison') sTitle = cUtil().removeHtmlTags(sTitle) sUrl2 = URL_MAIN + aEntry[0] sDesc = aEntry[3] sDesc = re.sub('<[^<]+?>', '', sDesc) # retrait des balises html sThumb = aEntry[2] sDisplayTitle = ('%s [%s]') % (sTitle, sQual) oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) if '/mangas' in sUrl: oGui.addAnime(SITE_IDENTIFIER, 'showHosters', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) elif 'series-' in sUrl or '-Saison' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'showHosters', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) elif '-Sagas' in sUrl: oGui.addMoviePack(SITE_IDENTIFIER, 'showHosters', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) else: oGui.addMovie(SITE_IDENTIFIER, 'showHosters', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) for n, u in NextPage: oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', u) sNumPage = re.search('/([0-9]+)/', u).group(1) oGui.addNext(SITE_IDENTIFIER, 'showSearchResult', 'Page ' + sNumPage + ' ' + n, oOutputParameterHandler) if not sSearch: oGui.setEndOfDirectory()
def showHosters(): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') oRequestHandler = cRequestHandler(sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Referer', RandomReferer()) sHtmlContent = oRequestHandler.request() if 'HTML/JavaScript Encoder' in sHtmlContent: sHtmlContent = ICDecode(sHtmlContent) sHtmlContent = sHtmlContent.replace('<iframe src="http://www.promoliens.net', '') sHtmlContent = sHtmlContent.replace("<iframe src='cache_vote.php", '') sPattern = '<iframe.+?src=\'([^<>"]+?)\'' aResult = oParser.parse(sHtmlContent, sPattern) sText = 'Animés dispo gratuitement et légalement sur :' if 'animedigitalnetwork.fr' in str(aResult[1]): oGui.addText(SITE_IDENTIFIER, "[COLOR red]" + sText + "[/COLOR][COLOR coral] anime digital network[/COLOR]") elif 'crunchyroll.com' in str(aResult[1]): oGui.addText(SITE_IDENTIFIER, "[COLOR red]" + sText + "[/COLOR][COLOR coral] crunchyroll[/COLOR]") elif 'wakanim.tv' in str(aResult[1]): oGui.addText(SITE_IDENTIFIER, "[COLOR red]" + sText + "[/COLOR][COLOR coral] wakanim[/COLOR]") else: list_url = [] # 1 er methode sPattern = '<div class="box"><iframe.+?src=[\'|"](.+?)[\'|"]' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: if re.match(".+?&#[0-9]+;", aEntry): # directe mais codé html sHosterUrl = cUtil().unescape(aEntry) else: # directe en clair sHosterUrl = str(aEntry) # Ces liens sont toujours des liens if (not sHosterUrl.startswith('http')) and (len(sHosterUrl) > 2): sHosterUrl = URL_MAIN + sHosterUrl list_url.append(sHosterUrl) # 2 eme methode sPattern = '<script>eval\(unescape\((.+?)\); eval\(unescape\((.+?)\);</script>' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: # si url cryptee mangacity algo sHosterUrl = DecryptMangacity(aEntry[1]) sHosterUrl = sHosterUrl.replace('\\', '') list_url.append(sHosterUrl) # 3 eme methode sPattern = 'document\.write\(unescape\("(%3c%.+?)"\)\);' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: tmp = Unquote(aEntry) sPattern2 = 'src=["\']([^"\']+)["\']' aResult = re.findall(sPattern2, tmp) if aResult: list_url.append(aResult[0]) if len(list_url) > 0: for aEntry in list_url: sHosterUrl = aEntry # Dans le cas ou l'adresse n'est pas directe,on cherche a l'extraire if not sHosterUrl[:4] == 'http': sHosterUrl = extractLink(sHosterUrl) # Si aucun lien on arrete ici if not sHosterUrl: continue # si openload code if 'openload2.php' in sHosterUrl: # on telecharge la page oRequestHandler = cRequestHandler(sHosterUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) sHtmlContent = oRequestHandler.request() # Et on remplace le code sHtmlContent = ICDecode(sHtmlContent) sHosterUrl = extractLink(sHtmlContent) # Passe par lien .asx ?? sPattern = '(https*:\/\/www.ianime[^\/\\]+\/[0-9a-zA-Z_-]+\.asx)' aResult = oParser.parse(sHosterUrl, sPattern) if aResult[0]: # on telecharge la page oRequestHandler = cRequestHandler(sHosterUrl) oRequestHandler.addHeaderEntry('Referer', sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) sHtmlContent = oRequestHandler.request() # Si c'est une redirection, on passe juste le vrai lien if 'ianime' not in oRequestHandler.getRealUrl().split('/')[2]: sHosterUrl = oRequestHandler.getRealUrl() else: # Sinon on remplace le code html = ICDecode(sHtmlContent) sHosterUrl = extractLink(html) # Passe par lien .vxm ?? # sPattern = 'http:\/\/www.ianime[^\/\\]+\/([0-9a-zA-Z_-]+)\.vxm' # aResult = oParser.parse(sHosterUrl, sPattern) # if aResult[0] : # sHosterUrl = 'http://embed.nowvideo.sx/embed.php?v=' + aResult[1][0] # redirection tinyurl if 'tinyurl' in sHosterUrl: sHosterUrl = GetTinyUrl(sHosterUrl) # test pr liens raccourcis if 'http://goo.gl' in sHosterUrl: try: oRequestHandler = cRequestHandler(sHosterUrl) oRequestHandler.addHeaderEntry('User-Agent', "Mozilla 5.10") oRequestHandler.addHeaderEntry('Host', "goo.gl") oRequestHandler.addHeaderEntry('Connection', 'keep-alive') sHtmlContent = oRequestHandler.request() sHosterUrl = oRequestHandler.getRealUrl() except: pass # Potection visio.php if '/visio.php?' in sHosterUrl: oRequestHandler = cRequestHandler(sHosterUrl) oRequestHandler.addHeaderEntry('Referer', sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) sHtmlContent = oRequestHandler.request() sHtmlContent = ICDecode(sHtmlContent) sPattern = 'src=[\'"]([^\'"]+)[\'"]' aResult = oParser.parse(sHtmlContent, sPattern) if aResult[0]: sHosterUrl = aResult[1][0] # Derniere en date sPattern = "(https*:\/\/www.ianime[^\/\\]+\/[^']+)" aResult = oParser.parse(sHosterUrl, sPattern) if aResult[0]: oRequestHandler = cRequestHandler(sHosterUrl) oRequestHandler.addHeaderEntry('Referer', sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) sHtmlContent = oRequestHandler.request() sHtmlContent = ICDecode(sHtmlContent) sHosterUrl2 = extractLink(sHtmlContent) if 'intern_player.png' in sHosterUrl2 or 'intern_player2.png' in sHosterUrl2: xx = str(random.randint(300, 350)) # 347 yy = str(random.randint(200, 255)) # 216 oRequestHandler = cRequestHandler(sHosterUrl) oRequestHandler.setRequestType(cRequestHandler.REQUEST_TYPE_POST) # Add params oRequestHandler.addParameters('submit.x', xx) oRequestHandler.addParameters('submit.y', yy) # look for hidden params p1 = re.search(r'name="valeur" value="([^"]+)"', sHtmlContent) if p1: oRequestHandler.addParameters('valeur', p1.group(1)) # Set headers oRequestHandler.addHeaderEntry('Referer', sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) sHtmlContent = oRequestHandler.request() sHosterUrl2 = extractLink(sHtmlContent) sHosterUrl = sHosterUrl2 if 'tinyurl' in sHosterUrl: sHosterUrl = GetTinyUrl(sHosterUrl) if '///' in sHosterUrl: sHosterUrl = 'https://' + '/'.join(sHosterUrl.split('/')[5:]) VSlog(sHosterUrl) oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sMovieTitle) oHoster.setFileName(sMovieTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb) oGui.setEndOfDirectory()
def showSeriesEpisode(): grab = cTMDb() addons = addon() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sFanart = oInputParameterHandler.getValue('sFanart') sTmdbId = oInputParameterHandler.getValue('sTmdbId') sSeason = oInputParameterHandler.getValue('sSeason') # sId = oInputParameterHandler.getValue('sId') if sSeason == False: sSeason = sUrl.split('/')[-1] if sFanart == False: sFanart = '' oGui = cGui() # recherche saison complete oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sMovieTitle) # oOutputParameterHandler.addParameter('type', 'serie') search = '%s S%02d' % (sMovieTitle, int(sSeason)) # oOutputParameterHandler.addParameter('searchtext', search) if not isMatrix(): oOutputParameterHandler.addParameter('searchtext', cUtil().CleanName(search)) else: oOutputParameterHandler.addParameter('searchtext', search) oGuiElement = cGuiElement() oGuiElement.setSiteName('globalSearch') oGuiElement.setFunction('searchMovie') oGuiElement.setTitle(addons.VSlang(30415)) oGuiElement.setCat(2) oGuiElement.setIcon("searchtmdb.png") oGui.addFolder(oGuiElement, oOutputParameterHandler) result = grab.getUrl(sUrl) total = len(result) if (total > 0 and 'episodes' in result): total = len(result['episodes']) progress_ = progress().VScreate(SITE_NAME) oOutputParameterHandler = cOutputParameterHandler() for i in result['episodes']: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break # sId, sTitle, sOtitle, sThumb, sFanart = i['id'], i['name'], i['original_name'], i['poster_path'], i['backdrop_path'] sEpNumber = i['episode_number'] # Mise en forme des infos (au format meta imdb) i = grab._format(i, '') sTitle, sGenre, sThumb, sFanart, sDesc, sYear = i['title'], i[ 'genre'], i['cover_url'], i['backdrop_url'], i['plot'], i[ 'year'] if not isMatrix(): sTitle = sTitle.encode("utf-8") sTitle = 'S%s E%s %s' % (sSeason, str(sEpNumber), sTitle) sExtraTitle = ' S' + "%02d" % int(sSeason) + 'E' + "%02d" % int( sEpNumber) oOutputParameterHandler.addParameter( 'siteUrl', sMovieTitle + '|' + sExtraTitle) # Pour compatibilite Favoris oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sTmdbId', sTmdbId) oOutputParameterHandler.addParameter('sSeason', sSeason) oOutputParameterHandler.addParameter('sEpisode', sEpNumber) oOutputParameterHandler.addParameter('type', 'serie') if not isMatrix(): oOutputParameterHandler.addParameter( 'searchtext', cUtil().CleanName(sMovieTitle)) else: oOutputParameterHandler.addParameter('searchtext', sMovieTitle) cGui.CONTENT = "tvshows" oGuiElement = cGuiElement() oGuiElement.setTmdbId(sTmdbId) oGuiElement.setSiteName('globalSearch') oGuiElement.setFunction('showSearch') oGuiElement.setTitle(sTitle) oGuiElement.setFileName(sMovieTitle) oGuiElement.setIcon('series.png') oGuiElement.setMeta(2) oGuiElement.setThumbnail(sThumb) oGuiElement.setFanart(sFanart) oGuiElement.setCat(2) oGuiElement.setDescription(sDesc) oGuiElement.setYear(sYear) oGuiElement.setGenre(sGenre) oGui.addFolder(oGuiElement, oOutputParameterHandler) progress_.VSclose(progress_) # tchnagement mode view = addons.getSetting('visuel-view') oGui.setEndOfDirectory(view)
def showAnimes(sSearch=''): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') if sSearch: sUrl = sSearch # On memorise le lien de base ce qui permet d'avoir un nextpage fonctionnel sans modif et peut importe la categorie if not sSearch: if 'scroll' not in sUrl: memorisedUrl = sUrl Page = 1 else: memorisedUrl = oInputParameterHandler.getValue('memorisedUrl') Page = oInputParameterHandler.getValue('Page') oRequestHandler = cRequestHandler(sUrl) oRequestHandler.disableSSL() sHtmlContent = oRequestHandler.request() oParser = cParser() if sSearch: sPattern = 'href="([^"]+)" class="liste_dl"><img src="([^"]+)".+?alt=".+?strong>([^<]+)<.+?all">([^<]+)</.+?>' else: sPattern = 'href="([^"]+)".+?><img src="([^"]+)".+?alt=".+?strong>([^<]+)<.+?all">([^<]+)<br.+?>' 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) oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sUrl2 = URL_MAIN + aEntry[0] sThumb = aEntry[1] sTitle = aEntry[2].replace('-...', '').replace('...', '').replace('!', ' !') sDesc = aEntry[3] # filtre search if sSearch and total > 5: if cUtil().CheckOccurence(sSearch, sTitle) == 0: continue oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oGui.addAnime(SITE_IDENTIFIER, 'showEpisodes', sTitle, '', sThumb, sDesc, oOutputParameterHandler) progress_.VSclose(progress_) if not sSearch: Page = int(Page) + 1 oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter( 'siteUrl', memorisedUrl + '?&scroll=' + str(Page)) # On renvoi l'url memoriser et le numero de page pour l'incrementer a chaque fois oOutputParameterHandler.addParameter('memorisedUrl', memorisedUrl) oOutputParameterHandler.addParameter('Page', Page) oGui.addNext(SITE_IDENTIFIER, 'showAnimes', 'Page ' + str(Page), oOutputParameterHandler) oGui.setEndOfDirectory()
def setFileName(self, sFileName): if isMatrix(): self.__sFileName = sFileName else: self.__sFileName = cUtil().titleWatched(sFileName)
def showHosters(): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sUrl = oInputParameterHandler.getValue('siteUrl') sThumb = oInputParameterHandler.getValue('sThumb') sDesc = oInputParameterHandler.getValue('sDesc') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() # parfois présent, plus sure que de réduire la regex sHtmlContent = re.sub('</font>', '', sHtmlContent) # recuperation nom de la release if 'elease :' in sHtmlContent: sPattern = 'elease :([^<]+)<' else: sPattern = '<br /> *([^<]+)</p></center>' aResult1 = oParser.parse(sHtmlContent, sPattern) # VSlog(aResult1) if (aResult1[0] == True): if 'Forced' in aResult1[1][0]: aResult1[1][0] = '' # cut de la zone des liens if 'Lien Premium' in sHtmlContent: sPattern = 'Lien Premium(.+?)</div>' aResult = oParser.parse(sHtmlContent, sPattern) if not aResult[0]: return sHtmlContent = aResult[1][0] if 'Interchangeables' in sHtmlContent: # cut de restes de liens non premiums sPattern = '--(.+?)Interchangeables' aResult = oParser.parse(sHtmlContent, sPattern) if not aResult[0]: return sHtmlContent = aResult[1][0] else: sPattern = '<div id="link">(.+?)</div>' aResult = oParser.parse(sHtmlContent, sPattern) if not aResult[0]: return sHtmlContent = aResult[1][0] sHtmlContent = sHtmlContent.replace(' ', '') if '-multi' in sHtmlContent: sPattern = 'target="_blank" href="([^"]+)"' else: sPattern = '<b> *([^<]+)</b> </br> <a href="([^"]+)" target="_blank" *><b><font color="#00aeef">Cliquer ici' aResult = oParser.parse(sHtmlContent, sPattern) # VSlog(aResult) if (aResult[0] == True): oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: if '-multi' in aEntry: sHostName = 'Liens Multi' else: if 'nitroflare' in aEntry[1] or 'turbo' in aEntry[1] or 'q.gs' in aEntry[1]: # hosters non géré continue if 'hitfile' in aEntry[1] or 'hil.to' in aEntry[1]: # hosters non géré continue if 'uplooad' in aEntry[1] or 'rapidgator' in aEntry[1]: # hoster non géré continue sHostName = aEntry[0] # on récupère le nom du hoster dans l'url # Sinon les hosters sont souvent affiché en temps que Free-telechargements if 'uptobox' in aEntry[1]: sHostName = 'UpToBox' if 'uploaded' in aEntry[1]: sHostName = 'Uploaded' if '1fichier' in aEntry[1]: sHostName = '1Fichier' sHostName = cUtil().removeHtmlTags(sHostName) sTitle = '[COLOR coral]' + sHostName + '[/COLOR]' if '-multi' in aEntry: oOutputParameterHandler.addParameter('siteUrl', aEntry) else: oOutputParameterHandler.addParameter('siteUrl', aEntry[1]) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oGui.addLink(SITE_IDENTIFIER, 'Display_protected_link', sTitle, sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory()
def showMovies(sSearch=''): oGui = cGui() oParser = cParser() if sSearch: sUrl = sSearch sPattern = '<img class="img-responsive" *src="([^"]+)".+?<div class="divtelecha.+?href="([^"]+)">([^<>]+)<' else: oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') if '/series' in sUrl: sPattern = '<div class="divtelecha.+?href="([^"]+)"><strong>([^<]+)</strong>.+?<img class="img-responsive".+?src="([^"]+).+?serie de (\d{4})<.+?Synopsis :([^<]+)' else: # films sPattern = '<h2 class="heading"> *<a href="[^"]+">([^<]+).+?<img class="img-responsive" *src="([^"]+)" *alt.+?(?:<font color="#.+?">([^<]+)</font>.+?).+?>film de (\d{4})<.+?Synopsis : ([^<]+).+?<div class="divtelecha.+?href="([^"]+)' oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() 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) oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sDesc = '' sYear = '' if sSearch: sQual = '' sThumb = URL_MAIN[:-1] + aEntry[0] sTitle = aEntry[2].replace('télécharger ', '').replace('en Streaming', '') sTitle = sTitle.replace(' TELECHARGEMENT GRATUIT', '').replace('gratuitement', '') sUrl2 = aEntry[1] elif '/series' in sUrl: sQual = '' sUrl2 = aEntry[0] sTitle = aEntry[1].replace('Regarder ', '').replace('en Streaming', '') sThumb = URL_MAIN[:-1] + aEntry[2] sYear = aEntry[3] try: sDesc = aEntry[4].decode('utf-8') except AttributeError: pass sDesc = cUtil().unescape(sDesc).encode('utf-8') else: sTitle = aEntry[0] sThumb = URL_MAIN[:-1] + aEntry[1] sYear = aEntry[3] try: sDesc = aEntry[4].decode('utf-8') except AttributeError: pass sDesc = cUtil().unescape(sDesc).encode('utf-8') sUrl2 = aEntry[5] sQual = aEntry[2] if sQual: try: sQual = sQual.decode("utf-8") except AttributeError: pass sQual = sQual.replace(u' qualit\u00E9', '').replace('et ', '/').replace('Haute', 'HD')\ .replace(' ', '').replace('Bonne', 'DVD').replace('Mauvaise', 'SD').encode("utf-8") if 'https' not in sUrl2: sUrl2 = URL_MAIN[:-1] + sUrl2 sUrl2 = sUrl2.replace('telecharger', 'streaming') try: sTitle = sTitle.decode("utf-8") except AttributeError: pass sTitle = sTitle.replace(u'T\u00E9l\u00E9charger ', '').encode("utf-8") # Remplace tout les decodage en python 3 try: sTitle = str(sTitle, 'utf-8') sQual = str(sQual, 'utf-8') sDesc = str(sDesc, 'utf-8') except: pass sDisplayTitle = ('%s [%s] (%s)') % (sTitle, sQual, sYear) oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oOutputParameterHandler.addParameter('sYear', sYear) if '/series/' in sUrl or '/series/' in sUrl2 or '/series_co/' in sThumb: oGui.addTV(SITE_IDENTIFIER, 'showSaisonsEpisodes', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) else: oGui.addMovie(SITE_IDENTIFIER, 'showLinks', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) progress_.VSclose(progress_) if not sSearch: sNextPage = __checkForNextPage(sHtmlContent) if (sNextPage != False): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sNextPage) number = re.findall('([0-9]+)', sNextPage)[-1] oGui.addNext(SITE_IDENTIFIER, 'showMovies', 'Page ' + number, oOutputParameterHandler) oGui.setEndOfDirectory()
def showMovies(sSearch=''): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oParser = cParser() if sSearch: sUrl = sSearch.replace(' ', '+') sPattern = 'class="image">.+?<a href="([^"]+).+?<img src="([^"]+)" alt="([^"]+).+?class="([^"]+).+?<p>(.+?)</p>' sType = oParser.parseSingleResult( sUrl, '\?post_types=(.+?)&') # pour filtrage entre film et série else: sTypeYear = oInputParameterHandler.getValue('sTypeYear') if sTypeYear: sPattern = '<article id="post-\d+".+?class="item ([^"]+).+?img src="([^"]+)" alt="([^"]+).+?(?:|class="quality">([^<]+)<.+?)(?:|class="dtyearfr">([^<]+)<.+?)<a href="([^"]+)">.+?<div class="texto">(.*?)</div>' else: sPattern = '<article id="post-\d+".+?img data-src="([^"]+)".+?alt="([^"]+).+?(?:|class="quality">([^<]+)<.+?)(?:|class="dtyearfr">([^<]+)<.+?)<a href="([^"]+)">.+?<div class="texto">(.*?)<\/div>' oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() 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) utils = cUtil() oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sQual = '' sYear = '' sDesc = '' if sSearch: sUrl = aEntry[0] sThumb = aEntry[1] sTitle = aEntry[2].replace('Streaming VF', '').replace( 'en', '').replace('Regarder', '') sType1 = aEntry[3] sDesc = aEntry[4] if sType1 != sType[ 1]: # pour differencier la recherche entre films et séries continue elif sTypeYear: sType1 = aEntry[0] if sType1 != sTypeYear: # pour differencier la recherche entre films et séries continue sThumb = aEntry[1] sTitle = aEntry[2] if aEntry[3]: sQual = aEntry[3] if aEntry[4]: sYear = aEntry[4] sUrl = aEntry[5] if aEntry[6]: sDesc = aEntry[6] else: sThumb = aEntry[0] sTitle = aEntry[1] if aEntry[2]: sQual = aEntry[2] if aEntry[3]: sYear = aEntry[3] sUrl = aEntry[4] if aEntry[5]: sDesc = aEntry[5] try: sDesc = unicode(sDesc, 'utf-8') # converti en unicode sDesc = utils.unescape(sDesc).encode( 'utf-8') # retire les balises HTML except: pass sDisplayTitle = ('%s [%s] (%s)') % (sTitle, sQual, sYear) oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) if '/serie' in sUrl: oGui.addTV(SITE_IDENTIFIER, 'showSxE', sDisplayTitle, '', sThumb, sDesc, oOutputParameterHandler) else: oGui.addMovie(SITE_IDENTIFIER, 'showLink', 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/([0-9]+)', sNextPage).group(1) oGui.addNext(SITE_IDENTIFIER, 'showMovies', 'Page ' + number, oOutputParameterHandler) oGui.setEndOfDirectory()
def showMoviesLinks(): # VSlog('mode film') oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sDisplayTitle = oInputParameterHandler.getValue('sDisplayTitle') if not sDisplayTitle: # Si on arrive par un marque-page sDisplayTitle = sMovieTitle sThumb = oInputParameterHandler.getValue('sThumb') sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() if "zt-protect" in sUrl: # Dl Protect present aussi a cette étape. sHtmlContent = DecryptDlProtecte(sUrl) else: oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() # Affichage du texte oGui.addText(SITE_IDENTIFIER, '[COLOR olive]Qualités disponibles :[/COLOR]') # récupération du Synopsis et de l'année sDesc = '' sYear = '' try: sPattern = '(<u>Date de .+</u>.+(\d{4}(-| *<))|<u>Critiques.+?</u>).+synopsis.+?>(.+?)</div>' aResult = oParser.parse(sHtmlContent, sPattern) if aResult[0]: aEntry = aResult[1][0] sYear = aEntry[1] sDesc = cUtil().removeHtmlTags(aEntry[3]) except: pass # la qualité courante est le lien en cours ici-même oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oOutputParameterHandler.addParameter('sYear', sYear) oGui.addLink(SITE_IDENTIFIER, 'showHosters', sDisplayTitle, sThumb, sDesc, oOutputParameterHandler) # on regarde si dispo dans d'autres qualités sPattern = '<a href="([^"]+)"><span class="otherquality"><span style="color:#.{6}"><b>([^<]+)</b></span><span style="color:#.{6}"><b>([^<]+)</b></span>' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: sUrl = URL_MAIN[:-1] + aEntry[0] sQual = aEntry[1] sLang = aEntry[2] sTitle = ('%s [%s] %s') % (sMovieTitle, sQual, sLang) oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sDisplayTitle', sTitle) oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) oOutputParameterHandler.addParameter('sYear', sYear) oGui.addLink(SITE_IDENTIFIER, 'showMoviesLinks', sTitle, sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory()