def showTitle(sMovieTitle, sUrl): sExtraTitle = '' # si c'est une serie if sUrl != 'none': sExtraTitle = sUrl.split('|')[1] sMovieTitle = sUrl.split('|')[0] # ancien decodage sMovieTitle = unicode( sMovieTitle, 'utf-8') # converti en unicode pour aider aux convertions sMovieTitle = unicodedata.normalize('NFD', sMovieTitle).encode( 'ascii', 'ignore').decode("unicode_escape") # vire accent et '\' sMovieTitle = sMovieTitle.encode("utf-8").lower() # on repasse en utf-8 sMovieTitle = Quote(sMovieTitle) sMovieTitle = re.sub('\(.+?\)', ' ', sMovieTitle) # vire les tags entre parentheses # modif venom si le titre comporte un - il doit le chercher sMovieTitle = re.sub( r'[^a-z -]', ' ', sMovieTitle) # vire les caracteres a la con qui peuvent trainer # sMovieTitle = re.sub('( |^)(le|la|les|du|au|a|l)( |$)', ' ', sMovieTitle) # vire les articles # vire les espaces multiples et on laisse les espaces sans modifs car certains codent avec %20 d'autres avec + sMovieTitle = re.sub(' +', ' ', sMovieTitle) # modif ici if sExtraTitle: sMovieTitle = sMovieTitle.replace('%C3%A9', 'e').replace('%C3%A0', 'a') sMovieTitle = sMovieTitle + sExtraTitle else: sMovieTitle = sMovieTitle return sMovieTitle
def searchGlobal(): oGui = cGui() addons = addon() oInputParameterHandler = cInputParameterHandler() sSearchText = oInputParameterHandler.getValue('searchtext') sCat = oInputParameterHandler.getValue('sCat') oHandler = cRechercheHandler() oHandler.setText(sSearchText) oHandler.setCat(sCat) aPlugins = oHandler.getAvailablePlugins() if not aPlugins: return True total = len(aPlugins) progress_ = progress().VScreate() # kodi 17 vire la fenetre busy qui se pose au dessus de la barre de Progress try: xbmc.executebuiltin('Dialog.Close(busydialog)') except: pass oGui.addText('globalSearch', addons.VSlang(30081) % sSearchText, 'search.png') sSearchText = Quote(sSearchText) count = 0 for plugin in aPlugins: progress_.VSupdate(progress_, total, plugin['name'], True) if progress_.iscanceled(): progress_.close() break oGui.searchResults[:] = [ ] # vider le tableau de résultats pour les récupérer par source _pluginSearch(plugin, sSearchText) if len(oGui.searchResults) > 0: # Au moins un résultat count += 1 # nom du site oGui.addText( plugin['identifier'], '%s. [COLOR olive]%s[/COLOR]' % (count, plugin['name']), 'sites/%s.png' % (plugin['identifier'])) for result in oGui.searchResults: oGui.addFolder(result['guiElement'], result['params']) if not count: # aucune source ne retourne de résultats oGui.addText('globalSearch') # "Aucune information" progress_.VSclose(progress_) cGui.CONTENT = 'files' oGui.setEndOfDirectory() return True
def Hoster_Telerium(url, referer): oRequestHandler = cRequestHandler(url) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Referer', referer) sHtmlContent = oRequestHandler.request() urlrederict = oRequestHandler.getRealUrl() urlmain = 'https://' + urlrederict.split('/')[ 2] # ex https://telerium.club sPattern = 'var\s+cid[^\'"]+[\'"]{1}([0-9]+)' aResult = re.findall(sPattern, sHtmlContent) if aResult: str2 = aResult[0] datetoken = int(getTimer()) * 1000 jsonUrl = urlmain + '/streams/' + str2 + '/' + str(datetoken) + '.json' tokens = getRealTokenJson(jsonUrl, urlrederict) m3url = tokens['url'] nxturl = urlmain + tokens['tokenurl'] realtoken = getRealTokenJson(nxturl, urlrederict)[10][::-1] try: m3url = m3url.decode("utf-8") except: pass sHosterUrl = 'https:' + m3url + realtoken sHosterUrl += '|User-Agent=' + UA + '&Referer=' + Quote( urlrederict) # + '&Sec-F' return True, sHosterUrl return False, False
def showSearch(): oGui = cGui() sSearchText = oGui.showKeyBoard() if (sSearchText != False): sUrl = URL_SEARCH[0] + Quote(sSearchText) showSearchResult(sUrl) oGui.setEndOfDirectory() return
def __handle_escape(self, key): while True: start_js = self.js offset = self.js.find(key) + len(key) if self.js[offset] == '(' and self.js[offset + 2] == ')': c = self.js[offset + 1] self.js = self.js.replace('%s(%s)' % (key, c), Quote(c)) if start_js == self.js: break
def showSearch(): oGui = cGui() sSearchText = oGui.showKeyBoard() if (sSearchText != False): oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sUrl = sUrl + Quote(sSearchText) showAnimes(sUrl) oGui.setEndOfDirectory() return
def showSearch(): oGui = cGui() sSearchText = oGui.showKeyBoard() if (sSearchText != False): sSearchText = Quote(sSearchText) sUrl = URL_SEARCH[0] + sSearchText + '¬e=0&art=0&AiffchageMode=0&inputTirePar=0&cstart=0' showMovies(sUrl) oGui.setEndOfDirectory() return
def __getMediaLinkForGuest2(self): api_call = '' oRequest = cRequestHandler('https://ytoffline.net/fr1') oRequest.addHeaderEntry( 'User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:70.0) Gecko/20100101 Firefox/70.0' ) 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() tok = re.search('id="token" value="(.+?)"', sHtmlContent).group(1) UA = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:70.0) Gecko/20100101 Firefox/70.0' oParser = cParser() pdata = 'url=' + Quote(self.__sUrl) + '&token=' + tok oRequest = cRequestHandler('https://ytoffline.net/fr1/download/') oRequest.setRequestType(1) oRequest.addHeaderEntry('User-Agent', UA) oRequest.addHeaderEntry('Accept-Encoding', 'gzip, deflate') oRequest.addHeaderEntry( 'Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8') oRequest.addHeaderEntry('Content-Length', len(pdata)) oRequest.addHeaderEntry('Referer', 'https://ytoffline.net/fr1/') oRequest.addParametersLine(pdata) sHtmlContent = oRequest.request() sStart = '<div id="mp4" class="display-block tabcontent">' sEnd = '<div id="audio" class="tabcontent">' sHtmlContent1 = oParser.abParse(sHtmlContent, sStart, sEnd) sPattern = '<td>([^<]+)<small>.+?data-href="([^"]+)"' aResult = oParser.parse(sHtmlContent1, sPattern) if (aResult[0] == True): # initialisation des tableaux url = [] qua = [] # Remplissage des tableaux for i in aResult[1]: url.append(str(i[1])) qua.append(str(i[0])) # dialogue qualité api_call = dialog().VSselectqual(qua, url) if (api_call): return True, api_call return False, False
def Hoster_Andrhino(url, referer): oRequestHandler = cRequestHandler(url) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Referer', referer) sHtmlContent = oRequestHandler.request() sPattern = "atob\('([^']+)" aResult = re.findall(sPattern, sHtmlContent) if aResult: url2 = base64.b64decode(aResult[0]) return True, url2.strip() + '|User-Agent=' + UA + '&Referer=' + Quote(url) # fichier vu mais ne sait plus dans quel cas sPattern = "source:\s'(https.+?m3u8)" aResult = re.findall(sPattern, sHtmlContent) if aResult: return True, aResult[0] + '|User-Agent=' + UA + '&Referer=' + Quote(url) return False, False
def Hoster_Laylow(url, referer): oRequestHandler = cRequestHandler(url) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Referer', referer) sHtmlContent = oRequestHandler.request() sPattern = "source:\s'(https.+?m3u8)" aResult = re.findall(sPattern, sHtmlContent) if aResult: return True, aResult[0] + '|User-Agent=' + UA + '&Referer=' + Quote(url) return False, False
def __getMediaLinkForGuest2(self): api_call = '' oParser = cParser() pdata = 'url=' + Quote('https://www.youtube.com/embed/' + self.__sUrl) + '&submit=1' oRequest = cRequestHandler('https://ytoffline.net/fr/validate/') oRequest.setRequestType(1) oRequest.addHeaderEntry( 'User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:70.0) Gecko/20100101 Firefox/70.0' ) oRequest.addHeaderEntry( 'Referer', 'https://ytoffline.net/fr/download/?url=https://www.youtube.com/embed/' + self.__sUrl) oRequest.addHeaderEntry( 'Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8') oRequest.addHeaderEntry('Accept-Language', 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3') oRequest.addParametersLine(pdata) sHtmlContent = oRequest.request() sHtmlContent1 = oParser.abParse( sHtmlContent, '<div id="mp4" class="display-block tabcontent">', '<div id="audio" class="tabcontent">') sPattern = '<td>([^<]+)<small>.+?data-href="([^"]+)"' aResult = oParser.parse(sHtmlContent1, sPattern) if (aResult[0] == True): # initialisation des tableaux url = [] qua = [] # Remplissage des tableaux for i in aResult[1]: url.append(str(i[1])) qua.append(str(i[0])) # dialogue qualité api_call = dialog().VSselectqual(qua, url) if (api_call): return True, api_call return False, False
def showHosters(self): oInputParameterHandler = cInputParameterHandler() sMovieTitle = oInputParameterHandler.getValue('file') sMovieTitle = self.decode(sMovieTitle, Unicode=True).lower() # on repasse en utf-8 sMovieTitle = Quote(sMovieTitle) sMovieTitle = re.sub('\(.+?\)', ' ', sMovieTitle) # vire les tags entre parentheses # modif venom si le titre comporte un - il doit le chercher sMovieTitle = re.sub(r'[^a-z -]', ' ', sMovieTitle) # vire les caracteres a la con qui peuvent trainer sMovieTitle = re.sub('( |^)(le|la|les|du|au|a|l)( |$)', ' ', sMovieTitle) # vire les articles # vire les espaces multiples et on laisse les espaces sans modifs car certains codent avec %20 d'autres avec + sMovieTitle = re.sub(' +', ' ', sMovieTitle) self.vStreamSearch(sMovieTitle)
def Hoster_Pkcast(url, referer): oRequestHandler = cRequestHandler(url) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry( 'Referer', '{uri.scheme}://{uri.netloc}/'.format(uri=urlparse(referer))) sHtmlContent = oRequestHandler.request() oParser = cParser() sPattern = 'play\(\).+?return\((.+?)\.join' aResult = oParser.parse(sHtmlContent, sPattern) if aResult: return True, ''.join(ast.literal_eval( aResult[1][0])) + '|User-Agent=' + UA + '&Referer=' + Quote(url) return False, False
def getData(): if addon().getSetting("PlutoTV_sid"): deviceID = addon().getSetting("PlutoTV_deviceID") clientID = addon().getSetting("PlutoTV_clientID") sid = addon().getSetting("PlutoTV_sid") else: sid = str(uuid.uuid1().hex) deviceID = str(uuid.uuid4().hex) clientID = Quote(''.join( random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits + '=+') for _ in range(24))) addon().setSetting("PlutoTV_deviceID", deviceID) addon().setSetting("PlutoTV_clientID", clientID) addon().setSetting("PlutoTV_sid", sid) return clientID, deviceID, sid
def Hoster_Wigistream(url, referer): oRequestHandler = cRequestHandler(url) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Referer', referer) sHtmlContent = oRequestHandler.request() sPattern = '(\s*eval\s*\(\s*function(?:.|\s)+?{}\)\))' aResult = re.findall(sPattern, sHtmlContent) if aResult: sstr = aResult[0] if not sstr.endswith(';'): sstr = sstr + ';' sUnpack = cPacker().unpack(sstr) sPattern = 'src="(.+?)"' aResult = re.findall(sPattern, sUnpack) if aResult: return True, aResult[0] + '|User-Agent=' + UA + '&Referer=' + Quote(url) return False, False
def showHosters(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') if 'mon-tele' in sUrl: dialog().VSinfo('Décodage en cours', "Patientez", 5) s = requests.Session() response = s.get(sUrl, headers={'User-Agent': UA}) sHtmlContent = str(response.content) cookie_string = "; ".join([str(x) + "=" + str(y) for x, y in s.cookies.items()]) oParser = cParser() sPattern = '<input type="hidden".+?value="([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) from resources.lib import librecaptcha test = librecaptcha.get_token( api_key="6LezIsIZAAAAABMSqc7opxGc3xyCuXtAtV4VlTtN", site_url="https://mon-tele.com/", user_agent=UA, gui=False, debug=False ) if (aResult[0] == True): data = "_method=" + aResult[1][0] + "&_csrfToken=" + aResult[1][1] + "&ref=&f_n=" + aResult[1][2]\ + "&g-recaptcha-response=" + test + "&_Token%5Bfields%5D=" + Quote(aResult[1][3])\ + "&_Token%5Bunlocked%5D=" + Quote(aResult[1][4]) oRequestHandler = cRequestHandler(sUrl) oRequestHandler.setRequestType(1) oRequestHandler.addHeaderEntry('Referer', sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Content-Length', len(data)) oRequestHandler.addHeaderEntry('Content-Type', "application/x-www-form-urlencoded") oRequestHandler.addHeaderEntry('Cookie', cookie_string) oRequestHandler.addParametersLine(data) sHtmlContent = oRequestHandler.request() oParser = cParser() sPattern = '<input type="hidden".+?value="([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): data = "_method=" + aResult[1][0] + "&_csrfToken=" + aResult[1][1] + "&ad_form_data="\ + Quote(aResult[1][2]) + "&_Token%5Bfields%5D=" + Quote(aResult[1][3])\ + "&_Token%5Bunlocked%5D=" + Quote(aResult[1][4]) # Obligatoire pour validé les cookies. xbmc.sleep(15000) oRequestHandler = cRequestHandler('https://mon-tele.com/obtenirliens/links/go') oRequestHandler.setRequestType(1) oRequestHandler.addHeaderEntry('Referer', sUrl) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Content-Length', len(data)) oRequestHandler.addHeaderEntry('Content-Type', "application/x-www-form-urlencoded; charset=UTF-8") oRequestHandler.addHeaderEntry('X-Requested-With', 'XMLHttpRequest') oRequestHandler.addHeaderEntry('Cookie', cookie_string) oRequestHandler.addParametersLine(data) sHtmlContent = oRequestHandler.request() sPattern = 'url":"([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHosterUrl = aResult[1][0] oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sMovieTitle) oHoster.setFileName(sMovieTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb) else: sHosterUrl = sUrl oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sMovieTitle) oHoster.setFileName(sMovieTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb) oGui.setEndOfDirectory()
def showFile(sSearch=''): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') # VSlog('input ' + str(sUrl)) oParser = cParser() sOffset = 0 if (oInputParameterHandler.exist('sOffset')): sOffset = int(oInputParameterHandler.getValue('sOffset')) sNext = 0 if (oInputParameterHandler.exist('sNext')): sNext = int(oInputParameterHandler.getValue('sNext')) sToken = '' if (oInputParameterHandler.exist('sToken')): sToken = oInputParameterHandler.getValue('sToken') sFoldername = '' if (oInputParameterHandler.exist('sFoldername')): sFoldername = oInputParameterHandler.getValue('sFoldername') sUrl = sUrl + Quote(sFoldername).replace('//', '%2F%2F') # VSlog('folder ' + str(sUrl)) sPath = '' if (oInputParameterHandler.exist('sPath')): sPath = oInputParameterHandler.getValue('sPath') sUrl = sUrl + Quote(sPath).replace('//', '%2F%2F') # VSlog('sPath ' + str(sUrl)) oPremiumHandler = cPremiumHandler('uptobox') if 'uptobox.com' in sUrl: sHtmlContent = oPremiumHandler.GetHtml(sUrl) else: if sToken == '': sHtmlContent = oPremiumHandler.GetHtml(BURL) sPattern = 'token":"(.+?)",' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sToken = aResult[1][0] if sSearch: sHtmlContent = oPremiumHandler.GetHtml( API_URL.replace('none', sToken) + '%2F%2F' + sSearch) else: sHtmlContent = oPremiumHandler.GetHtml( API_URL.replace('none', sToken) + '%2F%2F') content = json.loads(sHtmlContent) content = content['data'] if content: total = len(content) progress_ = progress().VScreate(SITE_NAME) sPath = getpath(content) for x in content: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break if x == 'files': for y in content[x]: if xbmc.getInfoLabel('system.buildversion')[0:2] >= '19': sTitle = y['file_name'] else: sTitle = y['file_name'].encode('utf-8') sHosterUrl = URL_MAIN + y['file_code'] oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sTitle) oHoster.setFileName(sTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, '') sNext += 1 if x == 'folders': for z in content[x]: if xbmc.getInfoLabel('system.buildversion')[0:2] >= '19': sTitle = z['name'] sFoldername = z['fld_name'] else: sTitle = z['name'].encode('utf-8') sFoldername = z['fld_name'].encode('utf-8') sUrl = API_URL.replace('none', sToken) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter( 'sFoldername', sFoldername) oOutputParameterHandler.addParameter('sToken', sToken) oGui.addDir(SITE_IDENTIFIER, 'showFile', sTitle, 'genres.png', oOutputParameterHandler) if x == 'currentFolder': if content[x]['fileCount'] != int(sNext): oOutputParameterHandler = cOutputParameterHandler() sOffset = int(sOffset) + 100 oOutputParameterHandler.addParameter( 'siteUrl', API_URL.replace('none', sToken).replace( 'offset=0', 'offset=' + str(sOffset))) oOutputParameterHandler.addParameter('sToken', sToken) oOutputParameterHandler.addParameter('sNext', sNext) oOutputParameterHandler.addParameter('sOffset', sOffset) oOutputParameterHandler.addParameter('sPath', sPath) oGui.addNext(SITE_IDENTIFIER, 'showFile', 'Suite', oOutputParameterHandler) progress_.VSclose(progress_) oGui.setEndOfDirectory()
def showHosters(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') if 'forum-tv' in sUrl: dialog().VSinfo('Décodage en cours', "Patientez", 5) s = requests.Session() response = s.get(sUrl, headers={'User-Agent': UA}) sHtmlContent = str(response.content) cookie_string = "; ".join( [str(x) + "=" + str(y) for x, y in s.cookies.items()]) oParser = cParser() sPattern = '<input type="hidden".+?value="([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): data = "_method=" + aResult[1][0] + "&_csrfToken=" + aResult[1][ 1] + "&ad_form_data=" + Quote( aResult[1][2]) + "&_Token%5Bfields%5D=" + Quote( aResult[1][3]) + "&_Token%5Bunlocked%5D=" + Quote( aResult[1][4]) # Obligatoire pour validé les cookies. xbmc.sleep(6000) oRequestHandler = cRequestHandler( 'https://forum-tv.org/adslinkme/links/go') oRequestHandler.setRequestType(1) oRequestHandler.addHeaderEntry('Referer', sUrl) oRequestHandler.addHeaderEntry( 'Accept', 'application/json, text/javascript, */*; q=0.01') oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Content-Length', len(data)) oRequestHandler.addHeaderEntry( 'Content-Type', "application/x-www-form-urlencoded; charset=UTF-8") oRequestHandler.addHeaderEntry('X-Requested-With', 'XMLHttpRequest') oRequestHandler.addHeaderEntry('Cookie', cookie_string) oRequestHandler.addParametersLine(data) sHtmlContent = oRequestHandler.request() sPattern = 'url":"([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHosterUrl = aResult[1][0] oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sMovieTitle) oHoster.setFileName(sMovieTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb) else: sHosterUrl = sUrl oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sMovieTitle) oHoster.setFileName(sMovieTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb) oGui.setEndOfDirectory()
def showHoster(): oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() try: info = cePg().getChannelEpg(sTitle) sDesc = info['plot'] sMovieTitle = info['title'] if not sMovieTitle: sMovieTitle = sTitle sMeta = 0 sCat = info['media_type'] if sCat: if 'Film' in sCat: sMeta = 1 if 'Série' in sCat: sMeta = 2 sYear = info['year'] coverUrl = info['cover_url'] if coverUrl: sThumb = coverUrl except: sMovieTitle = sTitle info = "" sYear = "" coverUrl = sThumb sDesc = "" sMeta = 0 # Double Iframe a passer. sPattern = '<iframe.+?src="([^"]+)"' iframeURL = oParser.parse(sHtmlContent, sPattern)[1][0] oRequestHandler = cRequestHandler(iframeURL) sHtmlContent = oRequestHandler.request() sPattern = '<iframe.+?src="([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) if not aResult[1]: # Pas de flux oGui.setEndOfDirectory() return iframeURL1 = aResult[1][0] sHosterUrl = iframeURL1 oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('sMovieTitle', sMovieTitle) oOutputParameterHandler.addParameter('sThumbnail', sThumb) oOutputParameterHandler.addParameter('sYear', sYear) oOutputParameterHandler.addParameter('sDesc', sDesc) oGuiElement = cGuiElement() oGuiElement.setTitle(sMovieTitle) oGuiElement.setDescription(sDesc) oGuiElement.setFileName(sMovieTitle) oGuiElement.setSiteName(resources.sites.freebox.SITE_IDENTIFIER) oGuiElement.setFunction('play__') oGuiElement.setIcon('tv.png') oGuiElement.setMeta(sMeta) oGuiElement.setThumbnail(sThumb) oGuiElement.setDirectTvFanart() oGuiElement.setCat(sMeta) # oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, resources.sites.freebox.SITE_IDENTIFIER, SITE_IDENTIFIER, 'direct_epg', 'Guide tv Direct') # oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, resources.sites.freebox.SITE_IDENTIFIER, SITE_IDENTIFIER, 'soir_epg', 'Guide tv Soir') if addon().getSetting('enregistrement_activer') == 'true': oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, resources.sites.freebox.SITE_IDENTIFIER, SITE_IDENTIFIER, 'enregistrement', 'Enregistrement') # Menu pour les films if sMeta == 1: oGui.createContexMenuinfo(oGuiElement, oOutputParameterHandler) oGui.createContexMenuba(oGuiElement, oOutputParameterHandler) oGui.createContexMenuSimil(oGuiElement, oOutputParameterHandler) oGui.createContexMenuWatch(oGuiElement, oOutputParameterHandler) if 'dailymotion' in sHosterUrl: oOutputParameterHandler.addParameter('sHosterIdentifier', 'dailymotion') oOutputParameterHandler.addParameter('sMediaUrl', sHosterUrl) oOutputParameterHandler.addParameter('siteUrl', sHosterUrl) oOutputParameterHandler.addParameter('sFileName', sMovieTitle) oGuiElement.setFunction('play') oGuiElement.setSiteName('cHosterGui') oGui.addHost(oGuiElement, oOutputParameterHandler) cGui.CONTENT = 'movies' oGui.setEndOfDirectory() return oRequestHandler = cRequestHandler(iframeURL1) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Referer', iframeURL) sHtmlContent2 = oRequestHandler.request() sPattern2 = 'var\s+cid[^\'"]+[\'"]{1}([0-9]+)' aResult = re.findall(sPattern2, sHtmlContent2) if aResult: str2 = aResult[0] datetoken = int(getTimer()) * 1000 jsonUrl = 'https://telerium.digital/streams/' + str2 + '/' + str( datetoken) + '.json' tokens = getRealTokenJson(jsonUrl, iframeURL1) m3url = tokens['url'] nxturl = 'https://telerium.digital' + tokens['tokenurl'] realtoken = getRealTokenJson(nxturl, iframeURL1)[10][::-1] try: m3url = m3url.decode("utf-8") except: pass sHosterUrl = 'https:' + m3url + realtoken + '|User-Agent=' + UA sHosterUrl += '&Referer=' + Quote( iframeURL1) + '&Sec-Fetch-Mode=cors&Origin=https://telerium.tv' oOutputParameterHandler.addParameter('siteUrl', sHosterUrl) oGui.addFolder(oGuiElement, oOutputParameterHandler) cGui.CONTENT = 'movies' oGui.setEndOfDirectory()
def searchGlobal(): oGui = cGui() addons = addon() oInputParameterHandler = cInputParameterHandler() sSearchText = oInputParameterHandler.getValue('searchtext') sCat = oInputParameterHandler.getValue('sCat') oHandler = cRechercheHandler() oHandler.setText(sSearchText) oHandler.setCat(sCat) aPlugins = oHandler.getAvailablePlugins() if not aPlugins: return True total = len(aPlugins) progress_ = progress().VScreate() # kodi 17 vire la fenetre busy qui ce pose au dessus de la barre de Progress try: xbmc.executebuiltin('Dialog.Close(busydialog)') except: pass window(10101).setProperty('search', 'true') oGui.addText('globalSearch', addons.VSlang(30081) % sSearchText, 'none.png') sSearchText = Quote(sSearchText) for count, plugin in enumerate(aPlugins): # text = '%s/%s - %s' % ((count + 1), total, plugin['name']) progress_.VSupdatesearch(progress_, total, plugin['name']) if progress_.iscanceled(): progress_.close() break # nom du site oGui.addText( plugin['identifier'], '%s. [COLOR olive]%s[/COLOR]' % ((count + 1), plugin['name']), 'sites/%s.png' % (plugin['identifier'])) # recherche import _pluginSearch(plugin, sSearchText) window(10101).setProperty('search', 'false') # progress_.VSclose(progress_) # affichage total = len(oGui.searchResults) # progress_ = progress().VScreate() for count, result in enumerate(oGui.searchResults): # text = '%s/%s - %s' % ((count + 1 / total), total, result['guiElement'].getTitle()) # if(count == 0): # cConfig().updateDialogSearch(dialog, total, text,True) # else: # cConfig().updateDialogSearch(dialog, total, text) progress_.VSupdatesearch(progress_, total, 'Patience...') # result['params'].addParameter('VSTRMSEARCH', 'True') oGui.addFolder(result['guiElement'], result['params']) # VSlog('%s - %s' % (middle, old_label), xbmc.LOGNOTICE) progress_.VSclose(progress_) oGui.setEndOfDirectory() return True
def showWeb(infile=None): # Code qui s'occupe de liens TV du Web oGui = cGui() oInputParameterHandler = cInputParameterHandler() if infile is None: sUrl = oInputParameterHandler.getValue('siteUrl') playlist = parseM3U(sUrl=sUrl) else: playlist = parseM3U(infile=infile) if oInputParameterHandler.exist('AZ'): sAZ = oInputParameterHandler.getValue('AZ') string = filter(lambda t: t.title.strip().capitalize().startswith(sAZ), playlist) playlist = sorted(string, key=lambda t: t.title.strip().capitalize()) else: playlist = sorted(playlist, key=lambda t: t.title.strip().capitalize()) if not playlist: oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', 'http://') oGui.addText(SITE_IDENTIFIER, '[COLOR red]Problème de lecture avec la playlist[/COLOR]') else: total = len(playlist) progress_ = progress().VScreate(SITE_NAME) for track in playlist: progress_.VSupdate(progress_, total) if progress_.iscanceled(): break sThumb = track.icon if not sThumb: sThumb = 'tv.png' # les + ne peuvent pas passer url2 = track.path.replace('+', 'P_L_U_S') if not xbmc.getInfoLabel('system.buildversion')[0:2] >= '19': if not '[' in url2 and not ']' in url2 and not '.m3u8' in url2 and not 'dailymotion' in url2: url2 = 'plugin://plugin.video.f4mTester/?url=' + QuotePlus(url2) + '&streamtype=TSDOWNLOADER&name=' + Quote(track.title) thumb = '/'.join([sRootArt, sThumb]) oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', url2) oOutputParameterHandler.addParameter('sMovieTitle', track.title) oOutputParameterHandler.addParameter('sThumbnail', thumb) oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('play__') oGuiElement.setTitle(track.title) oGuiElement.setFileName(track.title) oGuiElement.setIcon('tv.png') oGuiElement.setMeta(0) oGuiElement.setThumbnail(thumb) oGuiElement.setDirectTvFanart() oGuiElement.setCat(6) oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, SITE_IDENTIFIER, SITE_IDENTIFIER, 'direct_epg', 'Guide tv Direct') oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, SITE_IDENTIFIER, SITE_IDENTIFIER, 'soir_epg', 'Guide tv Soir') oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, SITE_IDENTIFIER, SITE_IDENTIFIER, 'enregistrement', 'Enregistrement') oGui.createContexMenuBookmark(oGuiElement, oOutputParameterHandler) oGui.addFolder(oGuiElement, oOutputParameterHandler) progress_.VSclose(progress_) oGui.setEndOfDirectory()
def showHoster(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() # Double Iframe a passer. oParser = cParser() sPattern = '<iframe.+?src="([^"]+)".+?</iframe>' iframeURL = oParser.parse(sHtmlContent, sPattern)[1][0] oRequestHandler = cRequestHandler(iframeURL) sHtmlContent = oRequestHandler.request() sPattern = '<iframe src="([^"]+)".+?</iframe>' iframeURL1 = oParser.parse(sHtmlContent, sPattern)[1][0] oRequestHandler = cRequestHandler(iframeURL1) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Referer', iframeURL) sHtmlContent2 = oRequestHandler.request() sPattern2 = '(\s*eval\s*\(\s*function(?:.|\s)+?{}\)\))' aResult = re.findall(sPattern2, sHtmlContent2) if aResult: str2 = aResult[0] if not str2.endswith(';'): str2 = str2 + ';' strs = cPacker().unpack(str2) # Code source https://github.com/yannisKalt/Kodi_Remote_Manager/blob/master/addons/plugin.video.PLsportowo/resources/lib/mydecode.py mainurlliczbacdurl = re.findall( 'url:\s*window\.atob\((.+?)\).slice\((.+?)\)\s*\+\s*window.atob\((.+?)\)', strs)[0] mainurl = mainurlliczbacdurl[0] liczba = mainurlliczbacdurl[1] cdurl = mainurlliczbacdurl[2] mainurlpattern = (mainurl + """\=['"](.+?)['"]""") liczbapattern = (liczba + '\=(\d+)') cdurlpattern = (cdurl + """\=['"](.+?)['"]""") murl = re.findall(mainurlpattern, strs)[0] licz = re.findall(liczbapattern, strs)[0] curl = re.findall(cdurlpattern, strs)[0] d1 = (base64.b64decode(murl))[int(licz):] d2 = base64.b64decode(curl) basurl = 'https://telerium.tv' m3url = re.findall('{if\(esMobiliar\){(.+?)=.+?};function', strs)[0] m3url = base64.b64decode(re.findall(m3url + """=['"](.+?)['"]""", strs)[0]) speechx = re.findall("""}else\{(.+?)\=dameVuelta\((.+?)\[(.+?)]\);""", strs)[0][2] sppech = re.findall(speechx + '=(.+?)([-+])(.+?);', strs)[0] reg1 = sppech[0] + '=(.+?)([-+])(.+?);' reg2 = sppech[2] + '=(.+?)([-+])(.+?);' ob1 = re.compile(reg1).findall(strs) ob2 = re.compile(reg2).findall(strs) ob11 = re.compile('var ' + ob1[0][0] + '=(.+?);').findall(strs) ob12 = re.compile('var ' + ob1[0][2] + '=(.+?);').findall(strs) ob21 = re.compile('var ' + ob2[0][0] + '=(.+?);').findall(strs) ob22 = re.compile('var ' + ob2[0][2] + '=(.+?);').findall(strs) obliczob1 = eval('%s%s%s' % (ob11[0], ob1[0][1], ob12[0])) obliczob2 = eval('%s%s%s' % (ob21[0], ob2[0][1], ob22[0])) spech = eval('%s%s%s' % (obliczob1, sppech[1], obliczob2)) try: d1 = d1.decode('utf-8') d2 = d2.decode('utf-8') except: pass nxturl = basurl + d1 + d2 realtoken = getRealToken(nxturl, iframeURL1, spech) try: m3url = m3url.decode("utf-8") except: pass sHosterUrl = 'https:' + m3url + realtoken sHosterUrl += '|User-Agent=' + UA + '&Referer=' + Quote( iframeURL1) + '&Sec-Fetch-Mode=cors&Origin=https://telerium.tv' oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sHosterUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumbnail', sThumb) # oGui.addDirectTV(SITE_IDENTIFIER, 'play__', track.title, 'tv.png' , sRootArt + '/tv/' + sThumb, oOutputParameterHandler) oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('play__') oGuiElement.setTitle(sTitle) oGuiElement.setFileName(sTitle) oGuiElement.setIcon('tv.png') oGuiElement.setMeta(0) oGuiElement.setThumbnail(sThumb) oGuiElement.setDirectTvFanart() oGuiElement.setCat(6) oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, SITE_IDENTIFIER, SITE_IDENTIFIER, 'direct_epg', 'Guide tv Direct') oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, SITE_IDENTIFIER, SITE_IDENTIFIER, 'soir_epg', 'Guide tv Soir') oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, SITE_IDENTIFIER, SITE_IDENTIFIER, 'enregistrement', 'Enregistrement') oGui.createContexMenuFav(oGuiElement, oOutputParameterHandler) oGui.addFolder(oGuiElement, oOutputParameterHandler) oGui.setEndOfDirectory()
def getpath(content): for x in content: if x == 'path': sPath = Quote(content[x].encode('utf-8')).replace('//', '%2F%2F') # VSlog(sPath) return sPath
def showHoster(): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl') sTitle = oInputParameterHandler.getValue('sMovieTitle') sThumb = oInputParameterHandler.getValue('sThumb') oRequestHandler = cRequestHandler(sUrl) sHtmlContent = oRequestHandler.request() # Double Iframe a passer. oParser = cParser() sPattern = '<iframe.+?src="([^"]+)".+?</iframe>' iframeURL = oParser.parse(sHtmlContent, sPattern)[1][0] oRequestHandler = cRequestHandler(iframeURL) sHtmlContent = oRequestHandler.request() sPattern = '<iframe src="([^"]+)".+?</iframe>' iframeURL1 = oParser.parse(sHtmlContent, sPattern)[1][0] oRequestHandler = cRequestHandler(iframeURL1) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('Referer', iframeURL) sHtmlContent2 = oRequestHandler.request() sPattern2 = 'var\s+cid[^\'"]+[\'"]{1}([0-9]+)' aResult = re.findall(sPattern2, sHtmlContent2) #VSlog(sHtmlContent2) if aResult: str2 = aResult[0] VSlog(str2) datetoken = int(getTimer()) * 1000 jsonUrl = 'https://telerium.tv/streams/' + str2 + '/' + str( datetoken) + '.json' VSlog(jsonUrl) tokens = getRealTokenJson(jsonUrl, iframeURL1) m3url = tokens['url'] nxturl = 'https://telerium.tv' + tokens['tokenurl'] #web_pdb.set_trace() realtoken = getRealTokenJson(nxturl, iframeURL1)[10][::-1] #web_pdb.set_trace() try: m3url = m3url.decode("utf-8") except: pass sHosterUrl = 'https:' + m3url + realtoken sHosterUrl += '|User-Agent=' + UA + '&Referer=' + Quote( iframeURL1) + '&Sec-Fetch-Mode=cors&Origin=https://telerium.tv' oOutputParameterHandler = cOutputParameterHandler() oOutputParameterHandler.addParameter('siteUrl', sHosterUrl) oOutputParameterHandler.addParameter('sMovieTitle', sTitle) oOutputParameterHandler.addParameter('sThumbnail', sThumb) # oGui.addDirectTV(SITE_IDENTIFIER, 'play__', track.title, 'tv.png' , sRootArt + '/tv/' + sThumb, oOutputParameterHandler) oGuiElement = cGuiElement() oGuiElement.setSiteName(SITE_IDENTIFIER) oGuiElement.setFunction('play__') oGuiElement.setTitle(sTitle) oGuiElement.setFileName(sTitle) oGuiElement.setIcon('tv.png') oGuiElement.setMeta(0) oGuiElement.setThumbnail(sThumb) oGuiElement.setDirectTvFanart() oGuiElement.setCat(6) oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, SITE_IDENTIFIER, SITE_IDENTIFIER, 'direct_epg', 'Guide tv Direct') oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, SITE_IDENTIFIER, SITE_IDENTIFIER, 'soir_epg', 'Guide tv Soir') oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, SITE_IDENTIFIER, SITE_IDENTIFIER, 'enregistrement', 'Enregistrement') oGui.createContexMenuBookmark(oGuiElement, oOutputParameterHandler) oGui.addFolder(oGuiElement, oOutputParameterHandler) oGui.setEndOfDirectory()