def __getMediaLinkForGuest(self): api_call = False sUrl = self.__sUrl oParser = cParser() oRequest = cRequestHandler(sUrl) sHtmlContent = oRequest.request() if 'rapidvideo' in sUrl:#qual site film illimite sPattern = '<a href="([^"]+&q=\d+p)"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): url=[] qua=[] for i in aResult[1]: url.append(str(i)) qua.append(str(i.rsplit('&q=', 1)[1])) if len(url) == 1: sPattern = '<source src="([^"]+)" type="video/.+?"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): api_call = aResult[1][0] elif len(url) > 1: dialog2 = xbmcgui.Dialog() ret = dialog2.select('Select Quality', qua) if (ret > -1): oRequest = cRequestHandler(url[ret]) sHtmlContent = oRequest.request() sPattern = '<source src="([^"]+)" type="video/.+?"' aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): api_call = aResult[1][0] else: sPattern = '{"file":"([^"]+)","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])) if len(url) == 1: api_call = url[0] elif len(url) > 1: dialog2 = xbmcgui.Dialog() ret = dialog2.select('Select Quality', qua) if (ret > -1): api_call = url[ret] if (api_call): return True, api_call return False, False
def __getMediaLinkForGuest(self): oRequest = cRequestHandler(self.__sUrl) sHtmlContent = oRequest.request() sPattern = 'file:"([^"]+)"(?:,label:"([^"]+)")*' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) api_call = False 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])) #Si au moins 1 url if (url): #Affichage du tableau dialog2 = xbmcgui.Dialog() ret = dialog2.select('Select Quality', qua) if (ret > -1): api_call = url[ret] if (api_call): return True, api_call return False, False
def __getMediaLinkForGuest(self): url = [] qua = [] oRequest = cRequestHandler(self.__sUrl) sHtmlContent = oRequest.request() sPattern = '"url.+?":"(.+?)\.(\d+).mp4' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): for aEntry in aResult[1]: url.append(aEntry[0]) qua.append(str(aEntry[1])) dialog2 = xbmcgui.Dialog() ret = dialog2.select('Select Quality', qua) #sUrl = url[ret] + '.' + qua[ret] + '.mp4' api_call = ('%s.%s.mp4') % (url[ret], qua[ret]) if api_call: return True, api_call return False, False
def AddDownload(self, meta): sTitle = meta['title'] sUrl = meta['url'] #titre fichier sTitle = self.__createTitle(sUrl, sTitle) sTitle = self.__createDownloadFilename(sTitle) sTitle = cGui().showKeyBoard(sTitle) if (sTitle != False and len(sTitle) > 0): #chemin de sauvegarde sPath2 = xbmc.translatePath( self.ADDON.getSetting('download_folder')) dialog = xbmcgui.Dialog() sPath = dialog.browse(3, 'Downloadfolder', 'files', '', False, False, sPath2) if (sPath != ''): self.ADDON.setSetting('download_folder', sPath) sDownloadPath = xbmc.translatePath(sPath + '%s' % (sTitle)) if xbmcvfs.exists(sDownloadPath): self.DIALOG.VSinfo('Nom déjà utilisé', sTitle) return self.AddDownload(meta) else: xbmcvfs.File(sDownloadPath, 'w') try: VSlog('Ajout en liste de téléchargement ' + str(sUrl)) meta['title'] = sTitle meta['path'] = sDownloadPath cDb().insert_download(meta) return True except: #print_exc() self.DIALOG.VSinfo('Téléchargement impossible', sTitle) VSlog('Téléchargement impossible') return False
def GetMedialinkStreaming(self, sHtmlContent): oParser = cParser() sPattern = 'src":[\'"]([^<>\'"]+)[\'"],"type":[\'"][^\'"><]+?[\'"],"label":[\'"]([0-9]+p)[\'"].+?"lang":[\'"]([^\'"]+)' aResult = oParser.parse(sHtmlContent, sPattern) stream_url = '' if (aResult[0] == True): url = [] qua = [] for aEntry in aResult[1]: url.append(aEntry[0]) tmp_qua = aEntry[1] if (aEntry[2]): if 'unknow' not in aEntry[2]: tmp_qua = tmp_qua + ' (' + aEntry[2] + ')' qua.append(tmp_qua) #Si une seule url if len(url) == 1: stream_url = url[0] #si plus de une elif len(url) > 1: #Afichage du tableau dialog2 = xbmcgui.Dialog() ret = dialog2.select('Select Quality', qua) if (ret > -1): stream_url = url[ret] else: return False else: return False stream_url = urllib.unquote(stream_url) if not stream_url.startswith('http'): stream_url = 'http:' + stream_url return stream_url else: return False return False
def __getMediaLinkForGuest(self): sId = self.__getIdFromUrl(self.__sUrl) json_url = 'http://www.video.tt/player_control/settings.php?v=%s' % sId vUrl = False try: print 'debut2' reponse = urllib2.urlopen(json_url) data = json.loads(reponse.read().decode( reponse.info().getparam('charset') or 'utf-8')) vids = data['settings']['res'] if vids: vUrlsCount = len(vids) if (vUrlsCount > 0): if vUrlsCount == 1: vUrl = vids[0][u'u'].decode('base-64') else: vid_list = [] url_list = [] for index in vids: quality = index[u'l'] vid_list.extend(['Video TT - %sp' % quality]) url_list.extend([index[u'u']]) result = xbmcgui.Dialog().select( 'Choose a link', vid_list) if result != -1: vUrl = url_list[result].decode('base-64') except urllib2.URLError, e: print e.read() print e.reason
def getMediaLink(self): self.oPremiumHandler = cPremiumHandler(self.getPluginIdentifier()) if (self.oPremiumHandler.isPremiumModeAvailable()): dialog3 = xbmcgui.Dialog() ret = dialog3.select('Choissisez votre mode de fonctionnement', [ 'Passer en Streaming (via Uptostream)', 'Rester en direct (via Uptobox)' ]) #mode DL if ret == 1: self.stream = False #mode stream elif ret == 0: self.__sUrl = self.__sUrl.replace('uptobox.com/', 'uptostream.com/') else: return False return self.__getMediaLinkByPremiumUser() else: VSlog('no premium') return self.__getMediaLinkForGuest()
def __getMediaLinkForGuest(self): r = self.get_host_and_id(self.__sUrl) #si lien deja decode if (r == False): if 'https://lh3.googleusercontent.com' in self.__sUrl: #Nouveaute, avec cookie now VSlog(self.__sUrl) import requests r = requests.get(self.__sUrl, allow_redirects=False) url = r.headers['Location'] cookies = r.headers['set-cookie'] # Impossible a faire fonctionner, si quelqu'un y arrive ..... #class NoRedirect(urllib2.HTTPRedirectHandler): # def redirect_request(self, req, fp, code, msg, hdrs, newurl): # return newurl #opener = urllib2.build_opener(NoRedirect) #HttpReponse = opener.open(self.__sUrl) #htmlcontent = HttpReponse.read() #head = HttpReponse.headers #VSlog(str(head)) VSlog(url) VSlog(cookies) return True, url + '|Cookie=' + cookies #Peut etre un peu brutal, peut provoquer des bugs if 'lh3.googleusercontent.com' in self.__sUrl: VSlog('Attention: lien sans cookies') return True, self.__sUrl web_url = self.getUrl(r[0], r[1]) headers = {'Referer': web_url} stream_url = '' vid_sel = web_url try: if 'picasaweb.' in r[0]: request = urllib2.Request(web_url, None, headers) try: reponse = urllib2.urlopen(request) except URLError, e: print e.read() print e.reason resp = reponse.read() #fh = open('c:\\test.txt', "w") #fh.write(resp) #fh.close() vid_sel = '' vid_id = re.search('.*?#(.+?)$', web_url) if vid_id: vid_id = vid_id.group(1) html = re.search( '\["shared_group_' + re.escape(vid_id) + '"\](.+?),"ccOverride":"false"}', resp, re.DOTALL) else: #Methode brute en test html = re.search( '(?:,|\[)"shared_group_[0-9]+"\](.+?),"ccOverride":"false"}', resp, re.DOTALL) if html: vid_list = [] url_list = [] best = 0 quality = 0 videos = re.compile( ',{"url":"(https:\/\/redirector\.googlevideo\.com\/[^<>"]+?)","height":([0-9]+?),"width":([0-9]+?),"type":"video\/.+?"}' ).findall(html.group(1)) if not videos: videos = re.compile( ',{"url":"(https:\/\/lh3\.googleusercontent\.com\/[^<>"]+?)","height":([0-9]+?),"width":([0-9]+?),"type":"video\/.+?"}' ).findall(html.group(1)) if videos: if len(videos) > 1: for index, video in enumerate(videos): if int(video[1]) > quality: best = index quality = int(video[2]) vid_list.extend( ['GoogleVideo - %sp' % quality]) url_list.extend([video[0]]) if len(videos) == 1: vid_sel = videos[0][0] else: result = xbmcgui.Dialog().select( 'Choose a link', vid_list) if result != -1: vid_sel = url_list[result] else: return self.unresolvable(0, 'No link selected') if vid_sel: if 'googleusercontent' in vid_sel: stream_url = urllib2.urlopen(vid_sel).geturl() elif 'redirector.' in vid_sel: stream_url = urllib2.urlopen(vid_sel).geturl() elif 'google' in vid_sel: stream_url = vid_sel
def UptomyAccount(): addons = addon() if (addons.getSetting('hoster_uptobox_username') == '') and (addons.getSetting('hoster_uptobox_password') == ''): return oInputParameterHandler = cInputParameterHandler() sMediaUrl = oInputParameterHandler.getValue('sMediaUrl') oPremiumHandler = cPremiumHandler('uptobox') sHtmlContent = oPremiumHandler.GetHtml(URL_MAIN) cookies = GestionCookie().Readcookie('uptobox') aResult = re.search('<form id="fileupload" action="([^"]+)"', sHtmlContent, re.DOTALL) if (aResult): UPurl = aResult.group(1).replace('upload?', 'remote?') if UPurl.startswith('//'): UPurl = 'https:' + UPurl fields = {'urls': '["' + sMediaUrl + '"]'} mpartdata = MPencode(fields) req = urllib2.Request(UPurl, mpartdata[1], headers) req.add_header('Content-Type', mpartdata[0].replace(',', ';')) req.add_header('Cookie', cookies) req.add_header('Content-Length', len(mpartdata[1])) #penible ce dialog auth xbmc.executebuiltin("Dialog.Close(all,true)") xbmcgui.Dialog().notification('Requete envoyé', 'vous pouvez faire autre chose', xbmcgui.NOTIFICATION_INFO, 4000, False) try: rep = urllib2.urlopen(req) except urllib2.URLError, e: return '' sHtmlContent = rep.read() rep.close() sPattern = '{"id":.+?,(?:"size":|"progress":)([0-9]+)' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): total = aResult[1][0] del aResult[1][0] dialog = xbmcgui.DialogProgressBG() dialog.create(SITE_NAME, 'Transfert de fichiers sur votre compte Uptobox') for aEntry in aResult[1]: dialog.update( int(aEntry) * 100 / int(total), 'Upload en cours...') xbmc.sleep(500) dialog.close() else: #penible ce dialog auth xbmc.executebuiltin("Dialog.Close(all,true)") xbmcgui.Dialog().notification('Info upload', 'Fichier introuvable', xbmcgui.NOTIFICATION_INFO, 2000, False)
sPattern = '{"id":.+?,(?:"size":|"progress":)([0-9]+)' oParser = cParser() aResult = oParser.parse(sHtmlContent, sPattern) if (aResult[0] == True): total = aResult[1][0] del aResult[1][0] dialog = xbmcgui.DialogProgressBG() dialog.create(SITE_NAME, 'Transfert de fichiers sur votre compte Uptobox') for aEntry in aResult[1]: dialog.update( int(aEntry) * 100 / int(total), 'Upload en cours...') xbmc.sleep(500) dialog.close() else: #penible ce dialog auth xbmc.executebuiltin("Dialog.Close(all,true)") xbmcgui.Dialog().notification('Info upload', 'Fichier introuvable', xbmcgui.NOTIFICATION_INFO, 2000, False) else: #penible ce dialog auth xbmc.executebuiltin("Dialog.Close(all,true)") xbmcgui.Dialog().notification('Info upload', 'Erreur pattern', xbmcgui.NOTIFICATION_ERROR, 2000, False)