def GetHtml(self, url, data=None): self.hostComplet = re.sub('(https*:\/\/[^/]+)(\/*.*)', '\\1', url) self.host = re.sub('https*:\/\/', '', self.hostComplet) self.url = url # on cherche des precedents cookies cookies = GestionCookie().Readcookie(self.host.replace('.', '_')) htmlcontent = self.htmlrequest(url, cookies, data) if not self.CheckIfActive(htmlcontent): return htmlcontent elif "recaptcha3key" in htmlcontent: dialog().VSok('Recaptcha active, reessayer plus tard') return htmlcontent # on cherche le nouveau cookie try: cookies = self.DecryptCookie(htmlcontent) except: VSlog('Erreur decodage Stormwall') return '' VSlog('Protection Stormwall active') GestionCookie().SaveCookie(self.host.replace('.', '_'), cookies) htmlcontent = self.htmlrequest(url, cookies, data) return htmlcontent
def view_epg(self, sTitle, sTime): text = self.get_epg(sTitle, sTime) if text: self.TextBoxes(sTitle, text) else: dialog().VSinfo('Impossible de trouver le guide tv')
def GET_URLS_STREAM(url): streamUrlList = [] validq = [] urlreq, timestamp, sig = SIGN('playback_streams/' + url + '.json', 5) oRequestHandler = cRequestHandler(urlreq) oRequestHandler.addHeaderEntry('User-Agent', UA) oRequestHandler.addHeaderEntry('X-Viki-manufacturer', 'vivo') oRequestHandler.addHeaderEntry('X-Viki-device-model', 'vivo 1606') oRequestHandler.addHeaderEntry('X-Viki-device-os-ver', '6.0.1') oRequestHandler.addHeaderEntry('X-Viki-connection-type', 'WIFI') oRequestHandler.addHeaderEntry('X-Viki-carrier', '') oRequestHandler.addHeaderEntry('X-Viki-as-id', '100005a-1625321982-3932') oRequestHandler.addHeaderEntry('timestamp', str(timestamp)) oRequestHandler.addHeaderEntry('signature', str(sig)) oRequestHandler.addHeaderEntry('x-viki-app-ver', _APP_VERSION) oRequestHandler.addHeaderEntry('origin', 'https://www.viki.com') jsonrsp = oRequestHandler.request(jsonDecode=True) try: jsonrsp = jsonrsp['main'] except: dialog().VSinfo("Contenu payant", 'An error occurred') return False testeurl = '' testeq = '' for qual in jsonrsp: streamUrlList.append(qual['url']) streamUrlList.append(testeurl) return streamUrlList
def addToPlaylist(self): oGui = cGui() oInputParameterHandler = cInputParameterHandler() sHosterIdentifier = oInputParameterHandler.getValue( 'sHosterIdentifier') sMediaUrl = oInputParameterHandler.getValue('sMediaUrl') bGetRedirectUrl = oInputParameterHandler.getValue('bGetRedirectUrl') sFileName = oInputParameterHandler.getValue('sFileName') if bGetRedirectUrl == 'True': sMediaUrl = self.__getRedirectUrl(sMediaUrl) VSlog('Hoster - playlist ' + sMediaUrl) oHoster = self.getHoster(sHosterIdentifier) oHoster.setFileName(sFileName) oHoster.setUrl(sMediaUrl) aLink = oHoster.getMediaLink() if aLink[0]: oGuiElement = cGuiElement() oGuiElement.setSiteName(self.SITE_NAME) oGuiElement.setMediaUrl(aLink[1]) oGuiElement.setTitle(oHoster.getFileName()) from Plugins.Extensions.IPTVPlayer.tsiplayer.addons.resources.lib.player import cPlayer oPlayer = cPlayer() oPlayer.addItemToPlaylist(oGuiElement) dialog().VSinfo(str(oHoster.getFileName()), 'Playlist') return oGui.setEndOfDirectory()
def ouTMyTmdb(): addons = addon() addons.setSetting('tmdb_session', '') addons.setSetting('tmdb_account', '') dialog().VSinfo(addons.VSlang(30320)) VSupdate() showMyTmdb() return
def Display_protected_link(): # VSlog('Display_protected_link') oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') sUrl = oInputParameterHandler.getValue('siteUrl') sThumb = oInputParameterHandler.getValue('sThumb') if 'link' in sUrl: oRequestHandler = cRequestHandler(sUrl.replace(' ', '%20')) oRequestHandler.addHeaderEntry('User-Agent', UA) sHtmlContent = oRequestHandler.request() sUrl = oRequestHandler.getRealUrl() sHtmlContent = DecryptDlProtecte(sUrl) # VSlog(sHtmlContent) if sHtmlContent: # Si redirection if sHtmlContent.startswith('http'): aResult_dlprotecte = (True, [sHtmlContent]) else: sPattern_dlprotecte = '<div class="alert">.+?<a href="(.+?)"' aResult_dlprotecte = oParser.parse(sHtmlContent, sPattern_dlprotecte) else: dialog().VSok('Erreur de décryptage du lien') aResult_dlprotecte = (False, False) # Si lien normal else: if not sUrl.startswith('http'): sUrl = 'http://' + sUrl aResult_dlprotecte = (True, [sUrl]) if (aResult_dlprotecte[0]): episode = 1 for aEntry in aResult_dlprotecte[1]: sHosterUrl = aEntry sTitle = sMovieTitle if len(aResult_dlprotecte[1]) > 1: sTitle = sMovieTitle + ' episode ' + episode episode += 1 oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sTitle) oHoster.setFileName(sTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb) oGui.setEndOfDirectory()
def __getMediaLinkForGuest(self): url = [] qua = [] api_call = '' # reformatage du lien sId = self.__getIdFromUrl(self.__sUrl) sUrl = 'https://drive.google.com/file/d/' + sId + '/view' req = urllib2.Request(sUrl) response = urllib2.urlopen(req) sHtmlContent = response.read() Headers = response.headers response.close() # listage des cookies c = Headers['Set-Cookie'] c2 = re.findall('(?:^|,) *([^;,]+?)=([^;,\/]+?);', c) if c2: cookies = '' for cook in c2: cookies = cookies + cook[0] + '=' + cook[1] + ';' sPattern = '\["fmt_stream_map","([^"]+)"]' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if not aResult[0]: if '"errorcode","150"]' in sHtmlContent: dialog().VSinfo("Nombre de lectures max dépassé") return False, False sListUrl = aResult[1][0] if sListUrl: aResult2 = oParser.parse(sHtmlContent, '([0-9]+)\/([0-9]+x[0-9]+)\/') # liste les qualitee r = oParser.parse(sListUrl, '([0-9]+)\|([^,]+)') for item in r[1]: url.append(item[1].decode('unicode-escape')) for i in aResult2[1]: if item[0] == i[0]: qua.append(i[1]) # Affichage du tableau api_call = dialog().VSselectqual(qua, url) api_call = api_call + '|User-Agent=' + UA + '&Cookie=' + cookies if (api_call): return True, api_call return False, False
def Display_protected_link(): # VSlog('Display_protected_link') oGui = cGui() oParser = cParser() oInputParameterHandler = cInputParameterHandler() sMovieTitle = oInputParameterHandler.getValue('sMovieTitle') # baseUrl = oInputParameterHandler.getValue('baseUrl') sUrl = oInputParameterHandler.getValue('siteUrl') sThumb = oInputParameterHandler.getValue('sThumb') # Est ce un lien dl-protect ? if sUrl: sHtmlContent = DecryptDlProtecte(sUrl) if sHtmlContent: # Si redirection if sHtmlContent.startswith('http'): aResult_dlprotecte = (True, [sHtmlContent]) else: sPattern_dlprotecte = '<div class="alert alert-primary".+?href="(.+?)"' aResult_dlprotecte = oParser.parse(sHtmlContent, sPattern_dlprotecte) else: dialog().VSok('Erreur décryptage du lien') aResult_dlprotecte = (False, False) # Si lien normal else: if not sUrl.startswith('http'): sUrl = 'http://' + sUrl aResult_dlprotecte = (True, [sUrl]) if (aResult_dlprotecte[0]): episode = 1 for aEntry in aResult_dlprotecte[1]: sHosterUrl = aEntry sTitle = sMovieTitle if len(aResult_dlprotecte[1]) > 1: sTitle = sMovieTitle + ' episode ' + episode episode += 1 oHoster = cHosterGui().checkHoster(sHosterUrl) if (oHoster != False): oHoster.setDisplayName(sTitle) oHoster.setFileName(sTitle) cHosterGui().showHoster(oGui, oHoster, sHosterUrl, sThumb) oGui.setEndOfDirectory()
def protectStreamByPass(url): # lien commencant par VID_ Codedurl = url oRequestHandler = cRequestHandler(Codedurl) sHtmlContent = oRequestHandler.request() oParser = cParser() sPattern = 'var k=\"([^<>\"]*?)\";' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): postdata = 'k=' + aResult[1][0] dialog().VSinfo('Décodage en cours', 'Patientez', 5) xbmc.sleep(5000) UA = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0' oRequest = cRequestHandler(URL_MAIN + 'embed_secur.php') oRequest.setRequestType(1) oRequest.addHeaderEntry('User-Agent', UA) # oRequest.addHeaderEntry('Host', 'www.protect-stream.com') oRequest.addHeaderEntry('Referer', Codedurl) oRequest.addHeaderEntry( 'Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8') oRequest.addHeaderEntry('Content-Type', 'application/x-www-form-urlencoded') oRequest.addParametersLine(postdata) sHtmlContent = oRequest.request() # Test de fonctionnement aResult = oParser.parse(sHtmlContent, sPattern) if aResult[0]: dialog().VSinfo('Lien encore protégé', "Erreur", 5) return '' # recherche du lien embed sPattern = '<iframe src=["\']([^<>"\']+?)["\']' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): return aResult[1][0] # recherche d'un lien redirige sPattern = '<a class=.button. href=["\']([^<>"\']+?)["\'] target=._blank.>' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): return aResult[1][0] return ''
def __getMediaLinkForGuest(self): api_call = '' oParser = cParser() oRequestHandler = cRequestHandler(URL_MAIN + self.__sUrl) sHtml = Unquote(oRequestHandler.request()) sHtmlContent = sHtml[7 + sHtml.find('formats'):sHtml. rfind('adaptiveFormats')] sPattern = '"url":"([^"]+)".+?"qualityLabel":"([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): url = [] qua = [] for aEntry in aResult[1]: #Py3 a besoin de la deuxieme version, je laisse le 1er replace au cas où pour Py2 url.append(aEntry[0].replace("\u0026", "&").replace("\\u0026", "&")) qua.append(aEntry[1]) if url: if self.__res: for i in range(len(qua)): if qua[i] == self.__res: api_call = url[i] if not api_call: api_call = dialog().VSselectqual(qua, url) if api_call: return True, api_call else: return False
def __getMediaLinkForGuest(self): api_call = '' sUrl = self.__sUrl.replace('/v/', '/api/source/') oRequest = cRequestHandler(sUrl) oRequest.setRequestType(cRequestHandler.REQUEST_TYPE_POST) oRequest.addHeaderEntry('Referer', self.__sUrl) oRequest.addParameters('r', '') oRequest.addParameters('d', 'dustreaming.fr') sHtmlContent = oRequest.request() page = json.loads(sHtmlContent) if page: url = [] qua = [] for x in page['data']: url.append(x['file']) qua.append(x['label']) if (url): api_call = dialog().VSselectqual(qua, url) if (api_call): return True, api_call return False, False
def getMediaLink(self): self.oPremiumHandler = cPremiumHandler(self.getPluginIdentifier()) if (self.oPremiumHandler.isPremiumModeAvailable()): ADDON = addon() try: mDefault = int(ADDON.getSetting("hoster_uptobox_mode_default")) except AttributeError: mDefault = 0 if mDefault == 0: ret = dialog().VSselect([ 'Passer en Streaming (via Uptostream)', 'Rester en direct (via Uptobox)' ], 'Choissisez votre mode de fonctionnement') else: # 0 is ask me, so 1 is uptostream and so on... ret = mDefault - 1 # mode stream if ret == 0: return self.__getMediaLinkForGuest() # mode DL if ret == 1: return self.__getMediaLinkByPremiumUser() return False else: VSlog('UPTOBOX - no premium') return self.__getMediaLinkForGuest()
def __getMediaLinkForGuest(self): api_call = False oRequest = cRequestHandler(self.__sUrl) sHtmlContent = oRequest.request() #type1 oParser = cParser() sPattern = '<source *src="([^"]+)" *type=\'video/.+?\'' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): api_call = aResult[1][0] #type2? sPattern = '<script type=\'text/javascript\'>(.+?)</script>' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): stri = cPacker().unpack(aResult[1][0]) sPattern = 'file:"([^"]+)",label:"([0-9]+)"}' aResult = oParser.parse(stri, sPattern) if (aResult[0] == True): url=[] qua=[] for aEntry in aResult[1]: url.append(aEntry[0]) qua.append(aEntry[1][:3] + '*' + aEntry[1][3:]) api_call = dialog().VSselectqual(qua, url) if (api_call): return True, api_call return False, False
def __getMediaLinkForGuest(self): oParser = cParser() oRequest = cRequestHandler(self.__sUrl) sHtmlContent = oRequest.request() #accelère le traitement sHtmlContent = oParser.abParse(sHtmlContent, 'var player', 'vvplay') # Traitement pour les liens m3u8 sHtmlContent = sHtmlContent.replace(',', '').replace( 'master.m3u8', 'index-v1-a1.m3u8') sPattern = '"(http[^"]+(?:.m3u8|.mp4))"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): api_call = '' # initialisation des tableaux url = [] qua = [] n = 1 # Remplissage des tableaux for i in aResult[1]: url.append(str(i)) qua.append('Lien ' + str(n)) n += 1 # dialogue qualité api_call = dialog().VSselectqual(qua, url) if (api_call): return True, api_call return False, False
def __getMediaLinkForGuest(self): url = 'https://clickopen.win/api/source/' + self.__sUrl.rsplit('/', 1)[1] postdata = 'r=&d=clickopen.win' oRequest = cRequestHandler(url) oRequest.setRequestType(1) oRequest.addHeaderEntry('User-Agent', UA) # oRequest.addHeaderEntry('Accept', '*/*') # oRequest.addHeaderEntry('Accept-Encoding','gzip, deflate, br') # oRequest.addHeaderEntry('Accept-Language','fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3') # oRequest.addHeaderEntry('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8') oRequest.addHeaderEntry('Referer', self.__sUrl) oRequest.addParametersLine(postdata) sHtmlContent = oRequest.request() page = json.loads(sHtmlContent) if page: url = [] qua = [] for x in page['data']: url.append(x['file']) qua.append(x['label']) if (url): api_call = dialog().VSselectqual(qua, url) if (api_call): return True, api_call return False, False
def __getMediaLinkForGuest(self): oParser = cParser() oRequest = cRequestHandler(self.__sUrl) oRequest.addHeaderEntry('Referer', "https://vidlox.me/8m8p7kane4r1.html") sHtmlContent = oRequest.request() #accelère le traitement sHtmlContent = oParser.abParse(sHtmlContent, 'var player', 'vvplay') sPattern = '([^"]+\.mp4)' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): #initialisation des tableaux url = [] qua = ["HD", "SD"] #sd en 2eme pos generalement quand sd api_call = '' #Remplissage des tableaux for i in aResult[1]: url.append(str(i)) #dialogue qualité api_call = dialog().VSselectqual(qua, url) if (api_call): return True, api_call return False, False
def __getMediaLinkForGuest(self): api_call = False sId = self.__getIdFromUrl(self.__sUrl) web_url = 'https://player.vimeo.com/video/' + sId oRequest = cRequestHandler(web_url) sHtmlContent = oRequest.request() sPattern = ',"url":"(.+?)",.+?"quality":"(.+?)",' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): #initialisation des tableaux url = [] qua = [] #Remplissage des tableaux for i in aResult[1]: url.append(str(i[0])) qua.append(str(i[1])) #tableau api_call = dialog().VSselectqual(qua, url) if (api_call): return True, api_call return False, False
def __getMediaLinkForGuest(self): oRequestHandler = cRequestHandler(self.__sUrl) sHtmlContent = oRequestHandler.request() oParser = cParser() sPattern = '(\s*eval\s*\(\s*function(?:.|\s)+?{}\)\))' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHtmlContent = cPacker().unpack(aResult[1][0]) sPattern = 'file":"([^"]+)".+?"label":"([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): url = [] qua = [] for aEntry in aResult[1]: url.append(aEntry[0]) qua.append(aEntry[1]) api_call = dialog().VSselectqual(qua, url) if (api_call): return True, api_call return False, False
def __getMediaLinkForGuest(self): api_call = False oRequest = cRequestHandler(self.__sUrl) sHtmlContent = oRequest.request() sPattern = '(eval\(function\(p,a,c,k,e(?:.|\s)+?\))<\/script>' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHtmlContent2 = cPacker().unpack(aResult[1][0]) sPattern = '{src:"([^"]+)",type:"video\/mp4",res:([^:,<>]+)' aResult = oParser.parse(sHtmlContent2, sPattern) if aResult[0]: # initialisation des tableaux url = [] qua = [] for i in aResult[1]: url.append(str(i[0])) qua.append(str(i[1])) api_call = dialog().VSselectqual(qua, url) if (api_call): return True, api_call return False, False
def __getMediaLinkForGuest(self): api_call = False oRequest = cRequestHandler(self.__sUrl) sHtmlContent = oRequest.request() sPattern = "(\s*eval\s*\(\s*function(?:.|\s)+?)<\/script>" oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): sHtmlContent = cPacker().unpack(aResult[1][0]) sPattern = 'file:"([^<>"]+?\.mp4).+?label:"([^"]+)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): url = [] qua = [] for i in aResult[1]: url.append(str(i[0])) qua.append(str(i[1])) #Affichage du tableau api_call = dialog().VSselectqual(qua, url) if (api_call): return True, api_call return False, False
def __getMediaLinkForGuest(self): req = self.__sUrl.replace('/v/','/api/source/') pdata = 'r' oRequestHandler = cRequestHandler(req) oRequestHandler.setRequestType(1) oRequestHandler.addParametersLine(pdata) sHtmlContent = oRequestHandler.request() jsonrsp = json.loads(sHtmlContent ) list_url = [] list_q = [] for idata in range(len(jsonrsp['data'])): url = jsonrsp['data'][idata]['file'] stype = jsonrsp['data'][idata]['type'] q = jsonrsp['data'][idata]['label'] list_url.append(url + '.' + stype) list_q.append(q) if list_url: api_call = dialog().VSselectqual(list_q,list_url) if (api_call): return True, api_call return False, False
def __getMediaLinkForGuest(self): oParser = cParser() id = self.__getIdFromUrl(self.__sUrl) sUrl = 'https://streamax.club/hls/' + id + '/' + id + '.playlist.m3u8' url = [] qua = [] oRequest = cRequestHandler(sUrl) oRequest.addHeaderEntry('User-Agent', UA) oRequest.addHeaderEntry( 'Referer', 'https://streamax.club/public/dist/index.html?id=' + id) sHtmlContent = oRequest.request() sPattern = 'RESOLUTION=(\d+x\d+)(.+?.m3u8)' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: url.append('https://streamax.club' + aEntry[1]) qua.append(aEntry[0]) if (url): api_call = dialog().VSselectqual(qua, url) if (api_call): return True, api_call return False, False
def getToken(self): result = self._call('authentication/token/new', '') total = len(result) if (total > 0): url = 'https://www.themoviedb.org/authenticate/' if not xbmc.getCondVisibility('system.platform.android'): #Si possible on ouvre la page automatiquement dans un navigateur internet. webbrowser.open(url + result['request_token']) sText = (self.ADDON.VSlang(30421)) % (url, result['request_token']) DIALOG = dialog() if not DIALOG.VSyesno(sText): return False else: from resources.lib import pyqrcode qr = pyqrcode.create(url + result['request_token']) qr.png( 'special://home/userdata/addon_data/plugin.video.vstream/qrcode.png', scale=5) oSolver = cInputWindowYesNo( captcha= 'special://home/userdata/addon_data/plugin.video.vstream/qrcode.png', msg="Scanner le QRCode pour acceder au lien d'autorisation", roundnum=1) retArg = oSolver.get() DIALOG = dialog() if retArg == "N": return False result = self._call('authentication/session/new', 'request_token=' + result['request_token']) if 'success' in result and result['success']: self.ADDON.setSetting('tmdb_session', str(result['session_id'])) DIALOG.VSinfo(self.ADDON.VSlang(30000)) return else: DIALOG.VSerror('Erreur' + self.ADDON.VSlang(30000)) return # xbmc.executebuiltin('Container.Refresh') return return
def del_bookmark(self, sSiteUrl='', sMovieTitle='', sCat='', sAll=False): sql_delete = None # Tous supprimer if sAll: sql_delete = 'DELETE FROM favorite;' # Supprimer un bookmark selon son titre elif sMovieTitle: siteUrl = QuotePlus(sSiteUrl) title = self.str_conv(sMovieTitle) title = title.replace("'", r"''") sql_delete = "DELETE FROM favorite WHERE siteurl = '%s' AND title = '%s'" % ( siteUrl, title) # Supprimer un bookmark selon son url elif sSiteUrl: siteUrl = QuotePlus(sSiteUrl) sql_delete = "DELETE FROM favorite WHERE siteurl = '%s'" % siteUrl # Supprimer toute une catégorie elif sCat: catList = ('1', '7') # films, saga if sCat not in catList: catList = ('2', '3', '4', '8') if sCat not in catList: catList = ('0', sCat) sql_delete = "DELETE FROM favorite WHERE cat in %s" % str(catList) if sql_delete: from Plugins.Extensions.IPTVPlayer.tsiplayer.addons.resources.lib.gui.gui import cGui try: self.dbcur.execute(sql_delete) self.db.commit() update = self.db.total_changes if not update and sSiteUrl and sMovieTitle: # si pas trouvé, on essaie sans le titre, seulement l'URL return self.del_bookmark(sSiteUrl) dialog().VSinfo(addon().VSlang(30044)) cGui().updateDirectory() return True except Exception: VSlog('SQL ERROR %s' % sql_delete) return False
def __getMediaLinkForGuest(self): api_call = False UA = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0' headers = {"User-Agent": UA} req1 = urllib2.Request(self.__sUrl, None, headers) resp1 = urllib2.urlopen(req1) sHtmlContent = resp1.read() resp1.close() sPattern = '{"metadataUrl":"([^"]+)",' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) vurl = 'http://my.mail.ru/' + aResult[1][0] req = urllib2.Request(vurl, None, headers) try: response = urllib2.urlopen(req) except UrlError as e: print(e.read()) print(e.reason) data = response.read() head = response.headers response.close() # get cookie cookies = '' if 'Set-Cookie' in head: oParser = cParser() sPattern = '(?:^|,) *([^;,]+?)=([^;,\/]+?);' aResult = oParser.parse(str(head['Set-Cookie']), sPattern) # print(aResult) if (aResult[0] == True): for cook in aResult[1]: cookies = cookies + cook[0] + '=' + cook[1] + ';' sPattern = '{"url":"([^"]+)",.+?"key":"(\d+p)"}' aResult = oParser.parse(data, sPattern) if (aResult[0] == True): # initialisation des tableaux url = [] qua = [] # Remplissage des tableaux for i in aResult[1]: url.append(str(i[0])) qua.append(str(i[1])) # Affichage du tableau api_call = dialog().VSselectqual(qua, url) if api_call: return True, 'http:' + api_call + '|User-Agent=' + UA + '&Cookie=' + cookies return False, False
def showNumBoard(self, sDefaultNum=''): dialogs = dialog() numboard = dialogs.numeric(0, self.ADDON.VSlang(30019), sDefaultNum) # numboard.doModal() if numboard is not None: return numboard return False
def enregistrement(): # Code qui gerent l'epg # oGuiElement = cGuiElement() oInputParameterHandler = cInputParameterHandler() sUrl = oInputParameterHandler.getValue('siteUrl').replace('P_L_U_S', '+') enregistrementIsActif = ADDON.getSetting('enregistrement_activer') if enregistrementIsActif == 'false': dialog().VSok('Merci d\'activer l\'enregistrement dans les options') return if '[' in sUrl and ']' in sUrl: sUrl = GetRealUrl(sUrl) if 'plugin' in sUrl: url = re.findall('url=(.+?)&', ''.join(sUrl)) sUrl = Unquote(url[0]) cEnregistremement().programmation_enregistrement(sUrl)
def insert_download(self, meta): title = self.str_conv(meta['title']) url = QuotePlus(meta['url']) sIcon = QuotePlus(meta['icon']) sPath = meta['path'] ex = 'INSERT INTO download (title, url, path, cat, icon, size, totalsize, status) VALUES (?, ?, ?, ?, ?, ?, ?, ?)' try: self.dbcur.execute( ex, (title, url, sPath, meta['cat'], sIcon, '', '', 0)) self.db.commit() VSlog('SQL INSERT download Successfully') dialog().VSinfo(addon().VSlang(30042), meta['title']) except Exception: VSlog('SQL ERROR INSERT into download') pass
def getMediaLink(self): import sys if 'site=cDownload&function' not in sys.argv[2]: oDialog = dialog().VSok( "ATTENTION, Pas de streaming sans premium\nPour voir le film passer par l'option 'Télécharger et Lire' du menu contextuel." ) return False, False return self.__getMediaLinkForGuest()
def __getMediaLinkForGuest(self): api_call = '' url = self.__sUrl video_pstream_path = self.getTempFile() oRequest = cRequestHandler(url) 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 = 'B64.+?(?:\(|\[)(.+?)(?:\)|\]).+?;' aResult = oParser.parse(sHtmlContent, sPattern)[1][0] data = "" for aEntry in aResult.split(','): data += re.search('var ' + aEntry + '(?:.+?|)=(.+?)";',sHtmlContent).group(1) decode = base64.b64decode(data) url2 = json.loads(decode)['url'] oRequest = cRequestHandler(url2) 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 = "NAME=.([^\"']+).+?https([^#]+)" aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): url = [] qua = [] for aEntry in aResult[1]: urls = 'https' + aEntry[1].strip() qua.append(aEntry[0]) url.append(urls.strip()) sUrlselect = dialog().VSselectqual(qua, url) sUrlselect = sUrlselect.strip() oRequest = cRequestHandler(sUrlselect) 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() if '#EXT' not in sHtmlContent: return False, False with open(video_pstream_path, "w") as subfile: subfile.write(sHtmlContent) api_call = video_pstream_path if (api_call): return True, api_call return False, False