def decoder(data, fn): data = base64.b64decode(data) secretKey = {} url = '' temp = '' tempData = '' for i in xrange(len(data)): if isMatrix(): tempData += ("%" + format(data[i], '02x')) else: tempData += ("%" + format(ord(data[i]), '02x')) data = Unquote(tempData) x = 0 while x < 256: secretKey[x] = x x += 1 y = 0 x = 0 while x < 256: y = (y + secretKey[x] + ord(fn[x % len(fn)])) % 256 temp = secretKey[x] secretKey[x] = secretKey[y] secretKey[y] = temp x += 1 x = 0 y = 0 i = 0 if not isMatrix(): data = data.decode('utf-8') while i < len(data): x = (x + 1) % 256 y = (y + secretKey[x]) % 256 temp = secretKey[x] secretKey[x] = secretKey[y] secretKey[y] = temp url += (chr(ord(data[i]) ^ secretKey[(secretKey[x] + secretKey[y]) % 256])) i += 1 return url
def showGenre(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') oRequestHandler = cRequestHandler(sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) sHtmlContent = oRequestHandler.request(jsonDecode=True) sID = 1 if sHtmlContent: oOutputParameterHandler = cOutputParameterHandler() for aEntry in sHtmlContent["categories"]: sTitle = aEntry["name"] if not isMatrix(): sTitle = sTitle.encode('utf8') oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sID', int(sID)) sID = sID + 1 oGui.addDir(SITE_IDENTIFIER, 'showVOD', sTitle, 'genres.png', oOutputParameterHandler) oGui.setEndOfDirectory()
def showTV(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') clientID, deviceID, sid = getData() oRequestHandler = cRequestHandler(sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) sHtmlContent = oRequestHandler.request(jsonDecode=True) if sHtmlContent: oOutputParameterHandler = cOutputParameterHandler() for aEntry in sHtmlContent: sThumb = aEntry["featuredImage"]["path"] sTitle = aEntry["name"] if not isMatrix(): sTitle = sTitle.encode('utf8') sUrl2 = "https://boot.pluto.tv/v4/start?deviceId=" + deviceID sUrl2 += "&deviceMake=Firefox&deviceType=web&deviceVersion=87.0&deviceModel=web&DNT=0&appName=web" sUrl2 += "&appVersion=5.14.0-0f5ca04c21649b8c8aad4e56266a23b96d73b83a&serverSideAds=true&channelSlug=" sUrl2 += aEntry[ "slug"] + "&episodeSlugs=&clientID=" + clientID + "&clientModelNumber=na" oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oGui.addMisc(SITE_IDENTIFIER, 'showHosters', sTitle, 'tv.png', sThumb, '', oOutputParameterHandler) oGui.setEndOfDirectory()
def titleWatched(self, title): if not isMatrix(): if isinstance(title, str): # Must be encoded in UTF-8 try: title = title.decode('utf8') except AttributeError: pass title = unicodedata.normalize('NFKD', title).encode('ascii', 'ignore') # cherche la saison et episode puis les balises [color]titre[/color] # title, saison = self.getSaisonTitre(title) # title, episode = self.getEpisodeTitre(title) # supprimer les balises title = re.sub(r'\[.*\]|\(.*\)', r'', str(title)) title = title.replace('VF', '').replace('VOSTFR', '').replace('FR', '') # title = re.sub(r'[0-9]+?', r'', str(title)) title = title.replace( '-', ' ' ) # on garde un espace pour que Orient-express ne devienne pas Orientexpress pour la recherche tmdb title = title.replace('Saison', '').replace('saison', '').replace( 'Season', '').replace('Episode', '').replace('episode', '') title = re.sub('[^%s]' % (string.ascii_lowercase + string.digits), ' ', title.lower()) # title = QuotePlus(title) # title = title.decode('string-escape') return title
def sDecode(r, o): t = [] e = [] n = 0 a = "" for f in range(256): e.append(f) for f in range(256): n = (n + e[f] + ord(r[f % len(r)])) % 256 t = e[f] e[f] = e[n] e[n] = t f = 0 n = 0 for h in range(len(o)): f = f + 1 n = (n + e[f % 256]) % 256 if not f in e: f = 0 t = e[f] e[f] = e[n] e[n] = t if isMatrix(): a += chr(o[h] ^ e[(e[f] + e[n]) % 256]) else: a += chr(ord(o[h]) ^ e[(e[f] + e[n]) % 256]) return a
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 notifyUpnext(self, data): try: next_data = json.dumps(data) # if not isinstance(next_data, bytes): next_data = next_data.encode('utf-8') data = b64encode(next_data) if isMatrix(): data = data.decode('ascii') jsonrpc_request = { "jsonrpc": "2.0", "id": 1, "method": "JSONRPC.NotifyAll", "params": { "sender": "%s.SIGNAL" % 'plugin.video.vStream', "message": 'upnext_data', "data": [data], } } request = json.dumps(jsonrpc_request) response = xbmc.executeJSONRPC(request) response = json.loads(response) return response['result'] == 'OK' except Exception as e: import traceback traceback.print_exc() return False
def str_conv(self, data): # Pas d'autre solution pour le moment que de faire comme ca. if not isMatrix(): if isinstance(data, str): # Must be encoded in UTF-8 try: data = data.decode('utf8') except AttributeError: pass data = unicodedata.normalize('NFKD', data).encode('ascii', 'ignore') # cherche la saison et episode puis les balises [color]titre[/color] # data, saison = self.getSaisonTitre(data) # data, episode = self.getEpisodeTitre(data) # supprimer les balises data = re.sub(r'\[.*\]|\(.*\)', r'', str(data)) data = data.replace('VF', '').replace('VOSTFR', '').replace('FR', '') # data = re.sub(r'[0-9]+?', r'', str(data)) data = data.replace( '-', ' ' ) # on garde un espace pour que Orient-express ne devienne pas Orientexpress pour la recherche tmdb data = data.replace('Saison', '').replace('saison', '').replace( 'Season', '').replace('Episode', '').replace('episode', '') data = re.sub('[^%s]' % (string.ascii_lowercase + string.digits), ' ', data.lower()) # data = QuotePlus(data) # data = data.decode('string-escape') return data
def decodex(x): from itertools import chain import base64 x = x.replace('https://www.youtube.com/embed/', '') missing_padding = len(x) % 4 if missing_padding: x += '=' * (4 - missing_padding) VSlog(x) try: e = base64.b64decode(x) t = '' r = "ETEfazefzeaZa13MnZEe" a = 0 px = chain(e) for y in list(px): if isMatrix(): t += chr(int(175 ^ y) - ord(r[a])) else: t += chr(int(175 ^ ord(y[0])) - ord(r[a])) a = 0 if a > len(r) - 2 else a + 1 return t except: return '' return ''
def loadTypelist(typemovie, typelist): # typelist genre ou year # <select name="genre" # <select name="year" sUrl = URL_MAIN + 'series-0-1/' + typemovie oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() oParser = cParser() sPattern = '<select name="([^"]+)|<option value=\'([^\']+).*?>([^<]+)' aResult = oParser.parse(sHtmlContent, sPattern) list_typelist = {} if (aResult[0] == True): for aEntry in aResult[1]: if aEntry[0]: if aEntry[0] == typelist: bfind = True else: bfind = False if bfind and aEntry[1]: if not isMatrix(): title = aEntry[2].decode('iso-8859-1').encode('utf8') else: title = aEntry[2] title = title.replace('e', 'E').strip() list_typelist[title] = aEntry[1] list_typelist = sorted(list_typelist.items(), key=lambda typeList: typeList[0]) return list_typelist
def showVOD(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sID = oInputParameterHandler.getValue('sID') oRequestHandler = cRequestHandler(sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) sHtmlContent = oRequestHandler.request(jsonDecode=True) if sHtmlContent: items = sHtmlContent["categories"][int(sID) - 1]["items"] total = len(items) progress_ = progress().VScreate(SITE_NAME) oOutputParameterHandler = cOutputParameterHandler() for aEntry in items: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sThumb = aEntry["featuredImage"]["path"] sTitle = aEntry["name"] # /!\ ces replace sont différent sTitle = sTitle.replace(' : Saison', ' Saison').replace(' : Saison', ' Saison') ids = aEntry["_id"] sDesc = aEntry["description"] if not isMatrix(): sTitle = sTitle.encode('utf8') sDesc = sDesc.encode('utf8') oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) VOD_SERIES = "https://service-vod.clusters.pluto.tv/v3/vod/series/" if aEntry["type"] == "series": sUrl = VOD_SERIES + ids + "/seasons?includeItems=true&deviceType=web" oOutputParameterHandler.addParameter('siteUrl', sUrl) oGui.addTV(SITE_IDENTIFIER, 'showSerieSxE', sTitle, '', sThumb, sDesc, oOutputParameterHandler) elif aEntry["type"] == "Anime": sUrl = VOD_SERIES + ids + "/seasons?includeItems=true&deviceType=web" oOutputParameterHandler.addParameter('siteUrl', sUrl) oGui.addAnime(SITE_IDENTIFIER, 'showSerieSxE', sTitle, '', sThumb, sDesc, oOutputParameterHandler) else: siteUrl = "https://service-stitcher.clusters.pluto.tv/stitch/hls/episode/" + ids + "/master.m3u8" oOutputParameterHandler.addParameter('siteUrl', siteUrl) oGui.addMovie(SITE_IDENTIFIER, 'seriesHosters', sTitle, '', sThumb, sDesc, oOutputParameterHandler) progress_.VSclose(progress_) oGui.setEndOfDirectory()
def do_GET(self): p = urlparse(self.path) q = dict(parse_qsl(p.query)) url = q['u'] if '?msKey=' in url: # Remove the PNG header res = requests.get(url).content[8:] else: # Redirect play list to proxy res = requests.get(url).content if isMatrix(): res = res.decode() res = res.replace('http', 'http://127.0.0.1:2424?u=http') if isMatrix(): res = res.encode() ret = res self.send_response_only(200) self.send_header('Content-Length', len(ret)) self.send_header('Content-Type', 'application/vnd.apple.mpegurl') self.end_headers() self.wfile.write(ret)
def showEpisodes(): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') sDesc = oInputParameterHandler.getValue('sDesc') oRequestHandler = cRequestHandler(sUrl) oRequestHandler.disableSSL() sHtmlContent = oRequestHandler.request() # On recupere l'id de l'anime dans l'url serieID = re.search('fiche-.+?-(\d+)-.+?.html', sUrl).group(1) sPattern = 'class="(?:download cell_impaire|download)" id="([^"]+)".+?(\d+).+?class="cell".+?>([^<]+)</td' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == False): oGui.addText(SITE_IDENTIFIER) if (aResult[0] == True): oOutputParameterHandler = cOutputParameterHandler() for aEntry in sorted(aResult[1], key=lambda aResult: aResult[1]): sQual = aEntry[2] if isMatrix(): sQual = sQual.encode('latin-1').decode() # Changemement de formats ...x... -> ....P if '1920×' in sQual or '1440×' in sQual or '1904×' in sQual: sQual = re.sub('(\d+×\d+)px', '[1080P]', sQual) elif '1728×' in sQual: sQual = re.sub('(\d+×\d+)px', '[800P]', sQual) elif '1280×' in sQual: # VSlog(sQual) sQual = re.sub('(\d+×\d+)px', '[720P]', sQual) elif '1024×' in sQual: sQual = re.sub('(\d+×\d+)px', '[600P]', sQual) elif '480×' in sQual: sQual = re.sub('(\d+×\d+)px', '[360P]', sQual) else: sQual = re.sub('(\d+×\d+)px', '[480P]', sQual) sTitle = 'E' + aEntry[1] + ' ' + sMovieTitle + ' ' + sQual idEpisode = aEntry[0] oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('serieID', serieID) oOutputParameterHandler.addParameter('idEpisode', idEpisode) oGui.addEpisode(SITE_IDENTIFIER, 'showHosters', sTitle, '', sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory()
def showMovies(): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sFiltre = oInputParameterHandler.getValue('sFiltre') bAdulte = oInputParameterHandler.getValue('bAdulte') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() if isMatrix(): sHtmlContent = sHtmlContent.replace('î', 'î').replace('é', 'é') sHtmlContent = oParser.abParse(sHtmlContent, sFiltre, '<!-- Type Chaîne -->') sPattern = 'location.href = \'\.(.+?)\'.+?src=\'(.+?)\'.+?<div align="center">(.+?)</div>' aResult = oParser.parse(sHtmlContent, sPattern) try: EPG = cePg().get_epg('', 'direct') except: EPG = "" if (aResult[0] == True): oOutputParameterHandler = cOutputParameterHandler() for aEntry in aResult[1]: # Trie des chaines adultes if "+18" in str(aEntry[2]): if not bAdulte: continue elif bAdulte: continue sTitle = aEntry[2] if "<" in sTitle: sTitle = sTitle.split('<')[0] if 'Canal + Série' in sTitle: sTitle = 'Canal + Séries' sUrl2 = URL_MAIN + aEntry[0] sThumb = URL_MAIN + '/' + aEntry[1] sDesc = getEPG(EPG, sTitle) oOutputParameterHandler.addParameter('siteUrl', sUrl2) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oGui.addMisc(SITE_IDENTIFIER, 'showHoster', sTitle, sThumb, sThumb, sDesc, oOutputParameterHandler) oGui.setEndOfDirectory()
def setDescription(self, sDescription): #Py3 if isMatrix(): try: self.__sDescription = str(sDescription.encode('latin-1'), 'utf-8') except: pass else: self.__sDescription = sDescription
def getSerieTitre(self, sTitle): serieTitle = re.sub(r'\[.*\]|\(.*\)', r'', sTitle) serieTitle = re.sub('[- –]+$', '', serieTitle) if '|' in serieTitle: serieTitle = serieTitle[:serieTitle.index('|')] # on repasse en utf-8 if not isMatrix(): return serieTitle.encode('utf-8') return serieTitle
def setDescription(self, sDescription): #Py3 if isMatrix(): try: if 'Ã' in sDescription or '\\xc' in sDescription: self.__sDescription = str(sDescription.encode('latin-1'),'utf-8') else: self.__sDescription = sDescription except: self.__sDescription = sDescription else: self.__sDescription = sDescription
def do_GET(self): url = self.parseUrl() res = requests.get(url, headers=ProxyHTTPRequestHandler.headers) if '?msKey=' in url: ret = res.content[8:] else: if isMatrix(): res = res.content.decode() res = res.replace('http', 'http://127.0.0.1:2424?u=http') if res.endswith("=="): ret = base64.b64decode(res) else: if isMatrix(): ret = res.encode() self.send_response_only(200) self.send_header('Content-Length', len(ret)) self.send_header('Content-Type', 'application/vnd.apple.mpegurl') self.end_headers() self.wfile.write(ret)
def showVOD(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sID = oInputParameterHandler.getValue('sID') oRequestHandler = cRequestHandler(sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) sHtmlContent = oRequestHandler.request(jsonDecode=True) if sHtmlContent: items = sHtmlContent["categories"][int(sID) - 1]["items"] total = len(items) progress_ = progress().VScreate(SITE_NAME) oOutputParameterHandler = cOutputParameterHandler() for aEntry in items: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sThumb = aEntry["featuredImage"]["path"] sTitle = aEntry["name"] ids = aEntry["_id"] sDesc = aEntry["description"] if not isMatrix(): sTitle = sTitle.encode('utf8') sDesc = sDesc.encode('utf8') oOutputParameterHandler.addParameter('sID', ids) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumb', sThumb) oOutputParameterHandler.addParameter('sDesc', sDesc) if aEntry["type"] == "series": oGui.addTV(SITE_IDENTIFIER, 'ShowSerieSaisonEpisodes', sTitle, '', sThumb, sDesc, oOutputParameterHandler) elif aEntry["type"] == "Anime": oGui.addAnime(SITE_IDENTIFIER, 'ShowSerieSaisonEpisodes', sTitle, '', sThumb, sDesc, oOutputParameterHandler) else: oGui.addMovie(SITE_IDENTIFIER, 'seriesHosters', sTitle, '', sThumb, sDesc, oOutputParameterHandler) progress_.VSclose(progress_) oGui.setEndOfDirectory()
def _clean_title(self, title): # vire accent try: title = unicode(title, 'utf-8') title = unicodedata.normalize('NFD', title).encode( 'ascii', 'ignore').decode('unicode_escape') if not isMatrix(): title = title.encode('utf-8') # on repasse en utf-8 except Exception as e: pass # Vire tous les caracteres non alphabetiques title = re.sub('[^%s]' % (string.ascii_lowercase + string.digits), '', title.lower()) return title
def __getMediaLinkForGuest(self): api_call = '' url = self.__sUrl oRequest = cRequestHandler(url) oRequest.addHeaderEntry('User-Agent', UA) 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') sHtmlContent = oRequest.request() oParser = cParser() sPattern = '<script type="text/javascript" src="(.+?)"' aResult = oParser.parse(sHtmlContent, sPattern)[1][1] oRequest = cRequestHandler(aResult) oRequest.addHeaderEntry('User-Agent', UA) 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') sHtmlContent = oRequest.request() sPattern = '(?:parseJSON|atob).+?ey(.+?)"' code = oParser.parse(sHtmlContent, sPattern) for i in code[1]: try: if isMatrix(): code = base64.b64decode("ey" + i).decode('ascii') else: code = base64.b64decode("ey" + i) break except: pass api_call = json.loads(code)['url'] if (api_call): return True, api_call + '|' + urlEncode(headers) return False, False
def __randy_boundary(length=10, reshuffle=False): import string import random if isMatrix(): character_string = string.ascii_letters + string.digits else: character_string = string.letters + string.digits boundary_string = [] for i in range(0, length): rand_index = random.randint(0, len(character_string) - 1) boundary_string.append(character_string[rand_index]) if reshuffle: random.shuffle(boundary_string) else: pass return ''.join(boundary_string)
def CleanName(self, name): if not isMatrix(): # vire accent et '\' try: name = unicode( name, 'utf-8') # converti en unicode pour aider aux convertions except: pass try: name = unicodedata.normalize('NFD', name).encode( 'ascii', 'ignore').decode('unicode_escape') name = name.encode('utf-8') # on repasse en utf-8 except TypeError: # name = unicodedata.normalize('NFKD', name.decode("utf-8")).encode('ASCII', 'ignore') pass # on cherche l'annee annee = '' m = re.search('(\([0-9]{4}\))', name) if m: annee = str(m.group(0)) name = name.replace(annee, '') # vire tag name = re.sub('[\(\[].+?[\)\]]', '', name) # les apostrophes remplacer par des espaces name = name.replace("'", " ") # vire caractere special # name = re.sub('[^a-zA-Z0-9 ]', '', name) name = re.sub('[^a-zA-Z0-9 : -]', '', name) # tout en minuscule name = name.lower() # vire espace debut et fin name = name.strip() # vire espace double au milieu name = re.sub(' +', ' ', name) # on remet l'annee if annee: name = name + ' ' + annee return name
def str_conv(self, data): if not isMatrix(): if isinstance(data, str): # Must be encoded in UTF-8 try: data = data.decode('utf8') except AttributeError: pass import unicodedata data = unicodedata.normalize('NFKD', data).encode('ascii', 'ignore') try: data = data.decode('string-escape') # ATTENTION: provoque des bugs pour les chemins a cause du caractere '/' except: pass else: data = data.encode().decode() return data
def setTitle(self, sTitle): #Convertie les bytes en strs pour le replace. self.__sCleanTitle = sTitle.replace('[]', '').replace('()', '').strip() if isMatrix(): #Python 3 decode sTitle try: sTitle = str(sTitle.encode('latin-1'), 'utf-8') except: pass else: try: sTitle = sTitle.strip().decode('utf-8') except: pass if not sTitle.startswith('[COLOR'): self.__sTitle = self.TraiteTitre(sTitle) else: self.__sTitle = sTitle
def __getMediaLinkForGuest(self): api_call = False oParser = cParser() sPattern = 'return decodeURIComponent\(escape\(r\)\)}\("([^,]+)",([^,]+),"([^,]+)",([^,]+),([^,]+),([^,\))]+)\)' oRequest = cRequestHandler(self.__sUrl) oRequest.addHeaderEntry('Cookie', 'popads2=opened') sHtmlContent = oRequest.request() aResult = oParser.parse(sHtmlContent, sPattern) #Get decode page #oRequest = cRequestHandler("https://upvideo.to/assets/js/tabber.js") #oRequest.addHeaderEntry('Referer', self.__sUrl) #sHtmlContent2 = oRequest.request() #aResult2 = oParser.parse(sHtmlContent2, sPattern) #if (aResult2[0] == True): # j = aResult2[1][0] # decoder = hunter(j[0],int(j[1]),j[2],int(j[3]),int(j[4]),int(j[5])) # VSlog("Decoder ok") if (aResult[0] == True): l = aResult[1] for j in l: data = hunter(j[0],int(j[1]),j[2],int(j[3]),int(j[4]),int(j[5])) if "fcbbbdddebad" in data: r = re.search('var fcbbbdddebad *= *"([^"]+)" *;', data) if not r: VSlog('er2') v2 = r.group(1).split('aHR0')[1].split('YTk0NT')[0] if isMatrix(): api_call = "htt" + (base64.b64decode(v2).decode()) else: api_call = "htt" + base64.b64decode(v2) if (api_call): return True, api_call return False, False
def showGenreMovie(): oGui = cGui() grab = cTMDb() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') result = grab.getUrl(sUrl) total = len(result) if (total > 0): oOutputParameterHandler = cOutputParameterHandler() for i in result['genres']: sId, sTitle = i['id'], i['name'] if not isMatrix(): sTitle = sTitle.encode("utf-8") sUrl = 'genre/' + str(sId) + '/movies' oOutputParameterHandler.addParameter('siteUrl', sUrl) oGui.addDir(SITE_IDENTIFIER, 'showMovies', str(sTitle), 'genres.png', oOutputParameterHandler) oGui.setEndOfDirectory()
def setTitle(self, sTitle): # Nom en clair sans les langues, qualités, et autres décorations self.__sCleanTitle = re.sub('\[.*\]|\(.*\)','', sTitle) if not self.__sCleanTitle: self.__sCleanTitle = re.sub('\[.+?\]|\(.+?\)','', sTitle) if isMatrix(): #Python 3 decode sTitle try: sTitle = str(sTitle.encode('latin-1'),'utf-8') except: pass else: try: sTitle = str(sTitle.strip().decode('utf-8')) except: pass if not sTitle.startswith('[COLOR'): self.__sTitle = self.TraiteTitre(sTitle) else: self.__sTitle = sTitle
def new_getaddrinfo(self, *args): try: import sys import dns.resolver if isMatrix(): path = VSPath( 'special://home/addons/script.module.dnspython/lib/') else: path = VSPath( 'special://home/addons/script.module.dnspython/lib/' ).decode('utf-8') if path not in sys.path: sys.path.append(path) host = args[0] port = args[1] # Keep the domain only: http://example.com/foo/bar => example.com if "//" in host: host = host[host.find("//"):] if "/" in host: host = host[:host.find("/")] resolver = dns.resolver.Resolver(configure=False) # Résolveurs DNS ouverts: https://www.fdn.fr/actions/dns/ resolver.nameservers = [ '80.67.169.12', '2001:910:800::12', '80.67.169.40', '2001:910:800::40' ] answer = resolver.query(host, 'a') host_found = str(answer[0]) VSlog("new_getaddrinfo found host %s" % host_found) # Keep same return schema as socket.getaddrinfo (family, type, proto, canonname, sockaddr) return [(2, 1, 0, '', (host_found, port)), (2, 1, 0, '', (host_found, port))] except Exception as e: VSlog("new_getaddrinfo ERROR: {0}".format(e)) return self.save_getaddrinfo(*args)
def getFav(self): oGui = cGui() oInputParameterHandler = cInputParameterHandler() row = cDb().get_bookmark() if (oInputParameterHandler.exist('sCat')): sCat = oInputParameterHandler.getValue('sCat') # Série, Animes, Saison et Episodes sont visibles dans les marques-page "Séries" catList = ('2', '3', '4', '8') if sCat in catList: sCat = 2 cGui.CONTENT = 'tvshows' else: catList = ('1', '7') # films, saga cGui.CONTENT = 'movies' if sCat in catList: sCat = 1 else: catList = sCat cGui.CONTENT = 'videos' gen = (x for x in row if x['cat'] in catList) else: oGui.setEndOfDirectory() return for data in gen: try: title = data['title'].encode('utf-8') except: title = data['title'] try: thumbnail = data['icon'].encode('utf-8') except: thumbnail = data['icon'] try: try: siteurl = data['siteurl'].encode('utf-8') except: siteurl = data['siteurl'] if isMatrix(): siteurl = UnquotePlus(siteurl.decode('utf-8')) title = str(title, 'utf-8') else: siteurl = UnquotePlus(siteurl) site = data['site'] function = data['fav'] cat = data['cat'] fanart = data['fanart'] if thumbnail == '': thumbnail = 'False' oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', siteurl) oOutputParameterHandler.addParameter('sMovieTitle', title) oOutputParameterHandler.addParameter('searchtext', title) oOutputParameterHandler.addParameter('sThumbnail', thumbnail) # Dans ajouter source c'est bien sThumb donc... oOutputParameterHandler.addParameter('sThumb', thumbnail) if (function == 'play'): oHoster = cHosterGui().checkHoster(siteurl) oOutputParameterHandler.addParameter( 'sHosterIdentifier', oHoster.getPluginIdentifier()) oOutputParameterHandler.addParameter( 'sFileName', oHoster.getFileName()) oOutputParameterHandler.addParameter('sMediaUrl', siteurl) oGuiElement = cGuiElement() oGuiElement.setSiteName(site) oGuiElement.setFunction(function) oGuiElement.setTitle(title) oGuiElement.setFileName(title) oGuiElement.setIcon("mark.png") if (cat == '1'): # Films oGuiElement.setMeta(1) oGuiElement.setCat(1) elif (cat == '2'): # Séries oGuiElement.setMeta(2) oGuiElement.setCat(2) elif (cat == '3'): # Anime oGuiElement.setMeta(4) oGuiElement.setCat(3) elif (cat == '4'): # Saisons oGuiElement.setMeta(5) oGuiElement.setCat(4) elif (cat == '5'): # Divers oGuiElement.setMeta(0) oGuiElement.setCat(5) elif (cat == '6'): # TV (Officiel) oGuiElement.setMeta(0) oGuiElement.setCat(6) elif (cat == '7'): # Saga oGuiElement.setMeta(3) oGuiElement.setCat(7) elif (cat == '8'): # Episodes oGuiElement.setMeta(6) oGuiElement.setCat(8) else: oGuiElement.setMeta(0) oGuiElement.setCat(cat) oGuiElement.setThumbnail(thumbnail) oGuiElement.setFanart(fanart) oGuiElement.addItemProperties('isBookmark', True) oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, 'cFav', 'cFav', 'delBookmark', self.ADDON.VSlang(30412)) if (function == 'play'): oGui.addHost(oGuiElement, oOutputParameterHandler) else: oGui.addFolder(oGuiElement, oOutputParameterHandler) except: oOutputParameterHandler = cOutputParameterHandler() oGui.addDir(SITE_IDENTIFIER, 'DoNothing', '[COLOR red]ERROR[/COLOR]', 'films.png', oOutputParameterHandler) # La suppression n'est pas accessible lors de l'utilisation en Widget if not xbmc.getCondVisibility('Window.IsActive(home)'): oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('sCat', sCat) oGui.addDir(SITE_IDENTIFIER, 'delBookmark', self.ADDON.VSlang(30211), 'trash.png', oOutputParameterHandler) oGui.setEndOfDirectory() return