def getLinksForVideo(self, cItem): printDBG("BBCiPlayer.getLinksForVideo [%s]" % cItem) retTab = [] if cItem['url'].endswith('m3u8'): url = cItem['url'] data = getDirectM3U8Playlist(url, checkExt=False) if 1 == len(data): cItem['url'] = urlparser.decorateUrl(cItem['url'], {'iptv_proto': 'm3u8', 'iptv_livestream': True}) retTab.append(cItem) else: for item in data: item['url'] = urlparser.decorateUrl(item['url'], {'iptv_proto': 'm3u8', 'iptv_livestream': True}) retTab.append(item) return retTab else: sts, data = self.cm.getPage(cItem['url'], self.defaultParams) if not sts: return retTab json_data = self.scrapeJSON(data) if json_data: try: uniqueTab = [] for item in json_data['versions']: if 'id' in item: item_id = item.get('id') elif 'pid' in item: item_id = item.get('pid') else: continue url = self.getFullUrl('/iplayer/vpid/%s/' % item_id) if url in uniqueTab: continue uniqueTab.append(url) if 'kind' in item: name = item['kind'].title() elif 'types' in item: name = item['types'][0] else: name = item_id retTab.append({'name': name, 'url': url, 'need_resolve': 1}) except Exception: printExc() if len(retTab): return retTab else: retTab.append({'name': '', 'url': cItem['url'], 'need_resolve': 1}) else: printDBG("Failed to retrieve JSON.") return retTab
def getVideoLink(self, cItem): printDBG("UstvnowApi.getVideoLink %s" % cItem) ######################## #url = 'http://lv2.ustvnow.com/iphone_ajax?tab=iphone_playingnow&token=' + self.token #sts, data = self.cm.getPage(url, self.defParams) #return #printDBG(data) ######################## #sts, data = self.cm.getPage('https://watch.ustvnow.com/account/signin') #printDBG(data) #return [] urlsTab = [] cookieParams = {'cookiefile': self.cookiePath, 'use_cookie': True, 'load_cookie':True, 'save_cookie':True} sts, data = self.cm.getPage('http://m-api.ustvnow.com/stream/1/live/view?scode=%s&token=%s&key=%s' % (cItem.get('scode', ''), self.token, self.passkey), self.defParams) if sts: try: data = byteify(json.loads(data)) tmp = getDirectM3U8Playlist(strwithmeta(data['stream'], {'User-Agent':self.HTTP_HEADER['User-Agent']}), cookieParams=cookieParams, checkContent=True) cookieValue = self.cm.getCookieHeader(self.cookiePath) for item in tmp: vidUrl = item['url']#.replace('/smil:', '/mp4:').replace('USTVNOW/', 'USTVNOW1/') item['url'] = urlparser.decorateUrl(vidUrl, {'User-Agent':self.HTTP_HEADER['User-Agent'], 'Cookie':cookieValue}) urlsTab.append(item) if len(urlsTab): return urlsTab except Exception: printExc() #sts, data = self.cm.getPage(cItem['priv_url'], self.defParams) sts, data = self.cm.getPage(self.LIVE_URL, self.defParams) if not sts: return [] url = self.cm.ph.getSearchGroups(data, 'for="popup-%s"[^>]*?href="([^"]+?)"[^>]*?>' % cItem['ui_page'])[0] url = self.getFullUrl(url) sts, data = self.cm.getPage(url, self.defParams) if not sts: return [] url = self.cm.ph.getSearchGroups(data, 'src="([^"]+?)"')[0] tmp = getDirectM3U8Playlist(strwithmeta(url, {'User-Agent':self.HTTP_HEADER['User-Agent']}), cookieParams=cookieParams, checkContent=True) cookieValue = self.cm.getCookieHeader(self.cookiePath) for item in tmp: vidUrl = item['url']#.replace('/smil:', '/mp4:').replace('USTVNOW/', 'USTVNOW1/') item['url'] = urlparser.decorateUrl(vidUrl, {'User-Agent':self.HTTP_HEADER['User-Agent'], 'Cookie':cookieValue}) urlsTab.append(item) return urlsTab
def getResolvedVideoLink(self, videoUrl): printDBG("BilaSportPwApi.getResolvedVideoLink [%s]" % videoUrl) urlsTab = [] meta = strwithmeta(videoUrl).meta baseUrl = self.cm.getBaseUrl(videoUrl.meta.get('Referer', '')) scriptUrl = videoUrl.meta.get('priv_script_url', '') if scriptUrl: sts, data = self.getPage(scriptUrl) if not sts: return [] hash = '/tmp/%s' % hexlify(md5(data).digest()) data = 'btoa=function(t){return Duktape.enc("base64",t)},XMLHttpRequest=function(){},XMLHttpRequest.prototype.open=function(t,e,n,o,p){print(str(e))};' + data + 'tmp = new XMLHttpRequest();' try: with open(hash + '.js', 'w') as f: f.write(data) except Exception: printExc() return [] duktape_execute('-c "%s.byte" "%s.js" ' % (hash, hash)) rm(hash + '.js') scriptUrl = hash sts, data = self.getPage(videoUrl) if not sts or '#EXTM3U' not in data: return urlsTab keyUrl = set( re.compile('''#EXT\-X\-KEY.*?URI=['"](https?://[^"]+?)['"]'''). findall(data)) if len(keyUrl): keyUrl = keyUrl.pop() proto = keyUrl.split('://', 1)[0] pyCmd = GetPyScriptCmd( 'livesports') + ' "%s" "%s" "%s" "%s" "%s" "%s" "%s" ' % ( config.plugins.iptvplayer.bilasportpw_port.value, videoUrl, baseUrl, scriptUrl, self.HTTP_HEADER['User-Agent'], self.COOKIE_FILE, GetDukPath()) meta = {'iptv_proto': 'em3u8'} meta['iptv_m3u8_key_uri_replace_old'] = '%s://' % proto meta[ 'iptv_m3u8_key_uri_replace_new'] = 'http://127.0.0.1:{0}/{1}/'.format( config.plugins.iptvplayer.bilasportpw_port.value, proto) meta['iptv_refresh_cmd'] = pyCmd videoUrl = urlparser.decorateUrl("ext://url/" + videoUrl, meta) else: videoUrl = urlparser.decorateUrl(videoUrl, meta) return [{'name': 'direct', 'url': videoUrl}]
def getUrlImpl(self, url): urlsList = [] sts, data = self.cm.getPage(url) if sts: try: data = byteify(json.loads(data)) #printDBG(data) seekable = data['seekable'] for stream in data['streams']: name = stream.get('name', '') if name == '': name = stream['quality'] try: if int(stream['watch-timeout']) < 1000: name += ' ' + _('PAY') else: name += ' ' + _('FREE') except Exception: pass url = stream['url'] if url.startswith('rtmp'): flashplayer = 'http://www.filmon.com/tv/modules/FilmOnTV/files/flashapp/filmon/FilmonPlayer.swf?v=55' pageUrl = 'http://www.filmon.com/tv/channel/export?channel_id=' + str(channelID) url = url + '/' + stream['name'] + ' swfUrl=' + flashplayer + ' pageUrl=' + url url = urlparser.decorateUrl( url ) url.meta.update({'iptv_urlwithlimit' : False, 'iptv_livestream' : not seekable}) urlsList.append({'name':name, 'url':url}) except Exception: printExc() return urlsList
def getResolvedURL(self, url): printDBG("LocalMedia.getResolvedURL [%s]" % url) videoUrls = [] if url.startswith('/') and fileExists(url): url = 'file://' + url uri, params = DMHelper.getDownloaderParamFromUrl(url) printDBG(params) uri = urlparser.decorateUrl(uri, params) if uri.meta.get('iptv_proto', '') in ['http', 'https']: urlSupport = self.up.checkHostSupport(uri) else: urlSupport = 0 if 1 == urlSupport: retTab = self.up.getVideoLinkExt(uri) videoUrls.extend(retTab) elif 0 == urlSupport and self._uriIsValid(uri): if uri.split('?')[0].endswith('.m3u8'): retTab = getDirectM3U8Playlist(uri) videoUrls.extend(retTab) elif uri.split('?')[0].endswith('.f4m'): retTab = getF4MLinksWithMeta(uri) videoUrls.extend(retTab) else: videoUrls.append({'name': 'direct link', 'url': uri}) return videoUrls
def DownloaderCreator(url): printDBG("DownloaderCreator url[%r]" % url) downloader = None url = urlparser.decorateUrl(url) iptv_proto = url.meta.get('iptv_proto', '') if 'm3u8' == iptv_proto: if config.plugins.iptvplayer.hlsdl_download.value: downloader = HLSDownloader() else: downloader = M3U8Downloader() elif 'em3u8' == iptv_proto: if config.plugins.iptvplayer.hlsdl_download.value: downloader = EHLSDownloader() else: downloader = EM3U8Downloader() elif 'f4m' == iptv_proto: downloader = F4mDownloader() elif 'rtmp' == iptv_proto: downloader = RtmpDownloader() elif iptv_proto in ['https', 'http']: downloader = WgetDownloader() elif 'merge' == iptv_proto: if url.meta.get('prefered_merger') == 'hlsdl' and config.plugins.iptvplayer.hlsdl_download.value and config.plugins.iptvplayer.prefer_hlsdl_for_pls_with_alt_media.value: downloader = HLSDownloader() elif IsExecutable('ffmpeg'): downloader = FFMPEGDownloader() else: downloader = MergeDownloader() elif 'mpd' == iptv_proto and IsExecutable('ffmpeg'): downloader = FFMPEGDownloader() return downloader
def getLinksForVideo(self, cItem): printDBG("Twitch.getLinksForVideo [%s]" % cItem) urlTab = [] if 'vod_id' in cItem: id = cItem['vod_id'][1:] tokenUrl = Twitch.VOD_TOKEN_URL vidUrl = Twitch.VOD_URL liveStream = False elif 'channel' in cItem: id = cItem['channel'] tokenUrl = Twitch.CHANNEL_TOKEN_URL vidUrl = Twitch.LIVE_URL liveStream = True if id != '': url = tokenUrl % id sts, data = self.cm.getPage(url) if sts: try: data = json.loads(data) url = vidUrl % (id, urllib.quote(self._getStr(data['token'])), self._getStr(data['sig'])) data = getDirectM3U8Playlist(url, checkExt=False) for item in data: item['url'] = urlparser.decorateUrl(item['url'], {'iptv_proto':'m3u8', 'iptv_livestream':liveStream}) urlTab.append(item) except Exception: printExc() elif '' != cItem['url']: urlTab.append({'name':cItem['title'], 'url':cItem['url']}) return urlTab
def getUrlImpl(self, url): urlsList = [] sts, data = self.cm.getPage(url) if sts: try: data = json.loads(data) seekable = data['seekable'] for stream in data['streams']: name = stream['quality'].encode('utf-8') url = stream['url'].encode('utf-8') if url.startswith('rtmp'): flashplayer = 'http://www.filmon.com/tv/modules/FilmOnTV/files/flashapp/filmon/FilmonPlayer.swf?v=55' pageUrl = 'http://www.filmon.com/tv/channel/export?channel_id=' + str( channelID) url = url + '/' + stream['name'].encode( 'utf-8' ) + ' swfUrl=' + flashplayer + ' pageUrl=' + url url = urlparser.decorateUrl(url) url.meta.update({ 'iptv_urlwithlimit': False, 'iptv_livestream': not seekable }) urlsList.append({'name': name, 'url': url}) except: printExc() return urlsList
def DownloaderCreator(url): printDBG("DownloaderCreator url[%r]" % url) downloader = None url = urlparser.decorateUrl(url) iptv_proto = url.meta.get('iptv_proto', '') if 'm3u8' == iptv_proto: if config.plugins.iptvplayer.hlsdlpath.value != '': downloader = HLSDownloader() else: downloader = M3U8Downloader() elif 'em3u8' == iptv_proto: if config.plugins.iptvplayer.hlsdlpath.value != '': downloader = EHLSDownloader() else: downloader = EM3U8Downloader() elif 'f4m' == iptv_proto: downloader = F4mDownloader() elif 'rtmp' == iptv_proto: downloader = RtmpDownloader() elif iptv_proto in ['https', 'http']: downloader = WgetDownloader() elif 'merge' == iptv_proto: if IsExecutable('ffmpeg') and config.plugins.iptvplayer.cmdwrappath.value != '': downloader = FFMPEGDownloader() else: downloader = MergeDownloader() elif 'mpd' == iptv_proto and IsExecutable('ffmpeg') and config.plugins.iptvplayer.cmdwrappath.value != '': downloader = FFMPEGDownloader() return downloader
def getLinksForVideo(self, cItem): printDBG("Twitch.getLinksForVideo [%s]" % cItem) urlTab = [] if 'channel' in cItem: url = Twitch.CHANNEL_TOKEN_URL % cItem['channel'] sts, data = self.cm.getPage(url) if sts: try: data = json.loads(data) url = Twitch.LIVE_URL % (cItem['channel'], urllib.quote( self._getStr(data['token'])), self._getStr(data['sig'])) data = getDirectM3U8Playlist(url, checkExt=False) for item in data: item['url'] = urlparser.decorateUrl( item['url'], { 'iptv_block_exteplayer': True, 'iptv_proto': 'm3u8', 'iptv_livestream': True }) urlTab.append(item) except: printExc() elif '' != cItem['url']: urlTab.append({'name': cItem['title'], 'url': cItem['url']}) return urlTab
def getVideoLink(self, cItem): printDBG("UstvnowApi.getVideoLink") sts, data = self.cm.getPage(cItem['priv_url'], self.defParams) if not sts: return [] url = self.cm.ph.getSearchGroups( data, 'for="popup-%s"[^>]*?href="([^"]+?)"[^>]*?>' % cItem['ui_page'])[0] url = self._getFullUrl(url) sts, data = self.cm.getPage(url, self.defParams) if not sts: return [] url = self.cm.ph.getSearchGroups(data, 'src="([^"]+?)"')[0] urlsTab = [] tmp = getDirectM3U8Playlist(strwithmeta( url, {'User-Agent': self.HTTP_HEADER['User-Agent']}), cookieParams={ 'cookiefile': self.cookiePath, 'use_cookie': True, 'load_cookie': True, 'save_cookie': True }) hdntl = self.cm.getCookieItem(self.cookiePath, 'hdntl') for item in tmp: item['url'] = urlparser.decorateUrl( item['url'], { 'User-Agent': self.HTTP_HEADER['User-Agent'], 'Cookie': "hdntl=%s" % urllib.unquote(hdntl) }) urlsTab.append(item) return urlsTab
def DownloaderCreator(url): printDBG("DownloaderCreator url[%r]" % url) downloader = None url = urlparser.decorateUrl(url) iptv_proto = url.meta.get('iptv_proto', '') if 'm3u8' == iptv_proto: if config.plugins.iptvplayer.hlsdlpath.value != '': downloader = HLSDownloader() else: downloader = M3U8Downloader() elif 'em3u8' == iptv_proto: if config.plugins.iptvplayer.hlsdlpath.value != '': downloader = EHLSDownloader() else: downloader = EM3U8Downloader() elif 'f4m' == iptv_proto: downloader = F4mDownloader() elif 'rtmp' == iptv_proto: downloader = RtmpDownloader() elif 'https' == iptv_proto: downloader = WgetDownloader() elif 'http' == iptv_proto: downloader = WgetDownloader() elif 'merge' == iptv_proto: downloader = MergeDownloader() return downloader
def getResolvedURL(self, url): printDBG("LocalMedia.getResolvedURL [%s]" % url) videoUrls = [] if url.startswith('/') and fileExists(url): url = 'file://'+url uri, params = DMHelper.getDownloaderParamFromUrl(url) printDBG(params) uri = urlparser.decorateUrl(uri, params) if uri.meta.get('iptv_proto', '') in ['http', 'https']: urlSupport = self.up.checkHostSupport( uri ) else: urlSupport = 0 if 1 == urlSupport: retTab = self.up.getVideoLinkExt( uri ) videoUrls.extend(retTab) elif 0 == urlSupport and self._uriIsValid(uri): if uri.split('?')[0].endswith('.m3u8'): retTab = getDirectM3U8Playlist(uri) videoUrls.extend(retTab) elif uri.split('?')[0].endswith('.f4m'): retTab = getF4MLinksWithMeta(uri) videoUrls.extend(retTab) else: videoUrls.append({'name':'direct link', 'url':uri}) return videoUrls
def getResolvedVideoLink(self, videoUrl): printDBG("ViorTvApi.getResolvedVideoLink [%s]" % videoUrl) urlsTab = [] baseUrl = self.cm.getBaseUrl(videoUrl.meta.get('Referer', '')) scriptUrl = videoUrl.meta.get('priv_script_url', '') sts, data = self.cm.getPage(videoUrl) if not sts or '#EXTM3U' not in data: return urlsTab meta = {} keyUrl = set( re.compile('''#EXT\-X\-KEY.*?URI=['"](https?://[^"]+?)['"]'''). findall(data)) if len(keyUrl): keyUrl = keyUrl.pop() proto = keyUrl.split('://', 1)[0] pyCmd = GetPyScriptCmd( 'livesports') + ' "%s" "%s" "%s" "%s" "%s" ' % ( config.plugins.iptvplayer.livesports_port.value, videoUrl, baseUrl, scriptUrl, self.HTTP_HEADER['User-Agent']) meta = {'iptv_proto': 'em3u8'} meta['iptv_m3u8_key_uri_replace_old'] = '%s://' % proto meta[ 'iptv_m3u8_key_uri_replace_new'] = 'http://127.0.0.1:{0}/{1}/'.format( config.plugins.iptvplayer.livesports_port.value, proto) meta['iptv_refresh_cmd'] = pyCmd videoUrl = urlparser.decorateUrl("ext://url/" + videoUrl, meta) return [{'name': 'direct', 'url': videoUrl}]
def getVideoLinks(self, baseUrl): printDBG("AlltubeTV.getVideoLinks [%s]" % baseUrl) key = strwithmeta(baseUrl).meta.get('cache_key', '') for key in self.cacheLinks: for idx in range(len(self.cacheLinks[key])): if baseUrl in self.cacheLinks[key][idx]['url']: if not self.cacheLinks[key][idx]['name'].startswith('*'): self.cacheLinks[key][idx]['name'] = '*' + self.cacheLinks[key][idx]['name'] break if self._myFun == None: try: tmp = 'ZGVmIHphcmF6YShpbl9hYmMpOg0KICAgIGRlZiByaGV4KGEpOg0KICAgICAgICBoZXhfY2hyID0gJzAxMjM0NTY3ODlhYmNkZWYnDQogICAgICAgIHJldCA9ICcnDQogICAgICAgIGZvciBpIGluIHJhbmdlKDQpOg0KICAgICAgICAgICAgcmV0ICs9IGhleF9jaHJbKGEgPj4gKGkgKiA4ICsgNCkpICYgMHgwRl0gKyBoZXhfY2hyWyhhID4+IChpICogOCkpICYgMHgwRl0NCiAgICAgICAgcmV0dXJuIHJldA0KICAgIGRlZiBoZXgodGV4dCk6DQogICAgICAgIHJldCA9ICcnDQogICAgICAgIGZvciBpIGluIHJhbmdlKGxlbih0ZXh0KSk6DQogICAgICAgICAgICByZXQgKz0gcmhleCh0ZXh0W2ldKQ0KICAgICAgICByZXR1cm4gcmV0DQogICAgZGVmIGFkZDMyKGEsIGIpOg0KICAgICAgICByZXR1cm4gKGEgKyBiKSAmIDB4RkZGRkZGRkYNCiAgICBkZWYgY21uKGEsIGIsIGMsIGQsIGUsIGYpOg0KICAgICAgICBiID0gYWRkMzIoYWRkMzIoYiwgYSksIGFkZDMyKGQsIGYpKTsNCiAgICAgICAgcmV0dXJuIGFkZDMyKChiIDw8IGUpIHwgKGIgPj4gKDMyIC0gZSkpLCBjKQ0KICAgIGRlZiBmZihhLCBiLCBjLCBkLCBlLCBmLCBnKToNCiAgICAgICAgcmV0dXJuIGNtbigoYiAmIGMpIHwgKCh+YikgJiBkKSwgYSwgYiwgZSwgZiwgZykNCiAgICBkZWYgZ2coYSwgYiwgYywgZCwgZSwgZiwgZyk6DQogICAgICAgIHJldHVybiBjbW4oKGIgJiBkKSB8IChjICYgKH5kKSksIGEsIGIsIGUsIGYsIGcpDQogICAgZGVmIGhoKGEsIGIsIGMsIGQsIGUsIGYsIGcpOg0KICAgICAgICByZXR1cm4gY21uKGIgXiBjIF4gZCwgYSwgYiwgZSwgZiwgZykNCiAgICBkZWYgaWkoYSwgYiwgYywgZCwgZSwgZiwgZyk6DQogICAgICAgIHJldHVybiBjbW4oYyBeIChiIHwgKH5kKSksIGEsIGIsIGUsIGYsIGcpDQogICAgZGVmIGNyeXB0Y3ljbGUodGFiQSwgdGFiQik6DQogICAgICAgIGEgPSB0YWJBWzBdDQogICAgICAgIGIgPSB0YWJBWzFdDQogICAgICAgIGMgPSB0YWJBWzJdDQogICAgICAgIGQgPSB0YWJBWzNdDQogICAgICAgIGEgPSBmZihhLCBiLCBjLCBkLCB0YWJCWzBdLCA3LCAtNjgwODc2OTM2KTsNCiAgICAgICAgZCA9IGZmKGQsIGEsIGIsIGMsIHRhYkJbMV0sIDEyLCAtMzg5NTY0NTg2KTsNCiAgICAgICAgYyA9IGZmKGMsIGQsIGEsIGIsIHRhYkJbMl0sIDE3LCA2MDYxMDU4MTkpOw0KICAgICAgICBiID0gZmYoYiwgYywgZCwgYSwgdGFiQlszXSwgMjIsIC0xMDQ0NTI1MzMwKTsNCiAgICAgICAgYSA9IGZmKGEsIGIsIGMsIGQsIHRhYkJbNF0sIDcsIC0xNzY0MTg4OTcpOw0KICAgICAgICBkID0gZmYoZCwgYSwgYiwgYywgdGFiQls1XSwgMTIsIDEyMDAwODA0MjYpOw0KICAgICAgICBjID0gZmYoYywgZCwgYSwgYiwgdGFiQls2XSwgMTcsIC0xNDczMjMxMzQxKTsNCiAgICAgICAgYiA9IGZmKGIsIGMsIGQsIGEsIHRhYkJbN10sIDIyLCAtNDU3MDU5ODMpOw0KICAgICAgICBhID0gZmYoYSwgYiwgYywgZCwgdGFiQls4XSwgNywgMTc3MDAzNTQxNik7DQogICAgICAgIGQgPSBmZihkLCBhLCBiLCBjLCB0YWJCWzldLCAxMiwgLTE5NTg0MTQ0MTcpOw0KICAgICAgICBjID0gZmYoYywgZCwgYSwgYiwgdGFiQlsxMF0sIDE3LCAtNDIwNjMpOw0KICAgICAgICBiID0gZmYoYiwgYywgZCwgYSwgdGFiQlsxMV0sIDIyLCAtMTk5MDQwNDE2Mik7DQogICAgICAgIGEgPSBmZihhLCBiLCBjLCBkLCB0YWJCWzEyXSwgNywgMTgwNDYwMzY4Mik7DQogICAgICAgIGQgPSBmZihkLCBhLCBiLCBjLCB0YWJCWzEzXSwgMTIsIC00MDM0MTEwMSk7DQogICAgICAgIGMgPSBmZihjLCBkLCBhLCBiLCB0YWJCWzE0XSwgMTcsIC0xNTAyMDAyMjkwKTsNCiAgICAgICAgYiA9IGZmKGIsIGMsIGQsIGEsIHRhYkJbMTVdLCAyMiwgMTIzNjUzNTMyOSk7DQogICAgICAgIGEgPSBnZyhhLCBiLCBjLCBkLCB0YWJCWzFdLCA1LCAtMTY1Nzk2NTEwKTsNCiAgICAgICAgZCA9IGdnKGQsIGEsIGIsIGMsIHRhYkJbNl0sIDksIC0xMDY5NTAxNjMyKTsNCiAgICAgICAgYyA9IGdnKGMsIGQsIGEsIGIsIHRhYkJbMTFdLCAxNCwgNjQzNzE3NzEzKTsNCiAgICAgICAgYiA9IGdnKGIsIGMsIGQsIGEsIHRhYkJbMF0sIDIwLCAtMzczODk3MzAyKTsNCiAgICAgICAgYSA9IGdnKGEsIGIsIGMsIGQsIHRhYkJbNV0sIDUsIC03MDE1NTg2OTEpOw0KICAgICAgICBkID0gZ2coZCwgYSwgYiwgYywgdGFiQlsxMF0sIDksIDM4MDE2MDgzKTsNCiAgICAgICAgYyA9IGdnKGMsIGQsIGEsIGIsIHRhYkJbMTVdLCAxNCwgLTY2MDQ3ODMzNSk7DQogICAgICAgIGIgPSBnZyhiLCBjLCBkLCBhLCB0YWJCWzRdLCAyMCwgLTQwNTUzNzg0OCk7DQogICAgICAgIGEgPSBnZyhhLCBiLCBjLCBkLCB0YWJCWzldLCA1LCA1Njg0NDY0MzgpOw0KICAgICAgICBkID0gZ2coZCwgYSwgYiwgYywgdGFiQlsxNF0sIDksIC0xMDE5ODAzNjkwKTsNCiAgICAgICAgYyA9IGdnKGMsIGQsIGEsIGIsIHRhYkJbM10sIDE0LCAtMTg3MzYzOTYxKTsNCiAgICAgICAgYiA9IGdnKGIsIGMsIGQsIGEsIHRhYkJbOF0sIDIwLCAxMTYzNTMxNTAxKTsNCiAgICAgICAgYSA9IGdnKGEsIGIsIGMsIGQsIHRhYkJbMTNdLCA1LCAtMTQ0NDY4MTQ2Nyk7DQogICAgICAgIGQgPSBnZyhkLCBhLCBiLCBjLCB0YWJCWzJdLCA5LCAtNTE0MDM3ODQpOw0KICAgICAgICBjID0gZ2coYywgZCwgYSwgYiwgdGFiQls3XSwgMTQsIDE3MzUzMjg0NzMpOw0KICAgICAgICBiID0gZ2coYiwgYywgZCwgYSwgdGFiQlsxMl0sIDIwLCAtMTkyNjYwNzczNCk7DQogICAgICAgIGEgPSBoaChhLCBiLCBjLCBkLCB0YWJCWzVdLCA0LCAtMzc4NTU4KTsNCiAgICAgICAgZCA9IGhoKGQsIGEsIGIsIGMsIHRhYkJbOF0sIDExLCAtMjAyMjU3NDQ2Myk7DQogICAgICAgIGMgPSBoaChjLCBkLCBhLCBiLCB0YWJCWzExXSwgMTYsIDE4MzkwMzA1NjIpOw0KICAgICAgICBiID0gaGgoYiwgYywgZCwgYSwgdGFiQlsxNF0sIDIzLCAtMzUzMDk1NTYpOw0KICAgICAgICBhID0gaGgoYSwgYiwgYywgZCwgdGFiQlsxXSwgNCwgLTE1MzA5OTIwNjApOw0KICAgICAgICBkID0gaGgoZCwgYSwgYiwgYywgdGFiQls0XSwgMTEsIDEyNzI4OTMzNTMpOw0KICAgICAgICBjID0gaGgoYywgZCwgYSwgYiwgdGFiQls3XSwgMTYsIC0xNTU0OTc2MzIpOw0KICAgICAgICBiID0gaGgoYiwgYywgZCwgYSwgdGFiQlsxMF0sIDIzLCAtMTA5NDczMDY0MCk7DQogICAgICAgIGEgPSBoaChhLCBiLCBjLCBkLCB0YWJCWzEzXSwgNCwgNjgxMjc5MTc0KTsNCiAgICAgICAgZCA9IGhoKGQsIGEsIGIsIGMsIHRhYkJbMF0sIDExLCAtMzU4NTM3MjIyKTsNCiAgICAgICAgYyA9IGhoKGMsIGQsIGEsIGIsIHRhYkJbM10sIDE2LCAtNzIyNTIxOTc5KTsNCiAgICAgICAgYiA9IGhoKGIsIGMsIGQsIGEsIHRhYkJbNl0sIDIzLCA3NjAyOTE4OSk7DQogICAgICAgIGEgPSBoaChhLCBiLCBjLCBkLCB0YWJCWzldLCA0LCAtNjQwMzY0NDg3KTsNCiAgICAgICAgZCA9IGhoKGQsIGEsIGIsIGMsIHRhYkJbMTJdLCAxMSwgLTQyMTgxNTgzNSk7DQogICAgICAgIGMgPSBoaChjLCBkLCBhLCBiLCB0YWJCWzE1XSwgMTYsIDUzMDc0MjUyMCk7DQogICAgICAgIGIgPSBoaChiLCBjLCBkLCBhLCB0YWJCWzJdLCAyMywgLTk5NTMzODY1MSk7DQogICAgICAgIGEgPSBpaShhLCBiLCBjLCBkLCB0YWJCWzBdLCA2LCAtMTk4NjMwODQ0KTsNCiAgICAgICAgZCA9IGlpKGQsIGEsIGIsIGMsIHRhYkJbN10sIDEwLCAxMTI2ODkxNDE1KTsNCiAgICAgICAgYyA9IGlpKGMsIGQsIGEsIGIsIHRhYkJbMTRdLCAxNSwgLTE0MTYzNTQ5MDUpOw0KICAgICAgICBiID0gaWkoYiwgYywgZCwgYSwgdGFiQls1XSwgMjEsIC01NzQzNDA1NSk7DQogICAgICAgIGEgPSBpaShhLCBiLCBjLCBkLCB0YWJCWzEyXSwgNiwgMTcwMDQ4NTU3MSk7DQogICAgICAgIGQgPSBpaShkLCBhLCBiLCBjLCB0YWJCWzNdLCAxMCwgLTE4OTQ5ODY2MDYpOw0KICAgICAgICBjID0gaWkoYywgZCwgYSwgYiwgdGFiQlsxMF0sIDE1LCAtMTA1MTUyMyk7DQogICAgICAgIGIgPSBpaShiLCBjLCBkLCBhLCB0YWJCWzFdLCAyMSwgLTIwNTQ5MjI3OTkpOw0KICAgICAgICBhID0gaWkoYSwgYiwgYywgZCwgdGFiQls4XSwgNiwgMTg3MzMxMzM1OSk7DQogICAgICAgIGQgPSBpaShkLCBhLCBiLCBjLCB0YWJCWzE1XSwgMTAsIC0zMDYxMTc0NCk7DQogICAgICAgIGMgPSBpaShjLCBkLCBhLCBiLCB0YWJCWzZdLCAxNSwgLTE1NjAxOTgzODApOw0KICAgICAgICBiID0gaWkoYiwgYywgZCwgYSwgdGFiQlsxM10sIDIxLCAxMzA5MTUxNjQ5KTsNCiAgICAgICAgYSA9IGlpKGEsIGIsIGMsIGQsIHRhYkJbNF0sIDYsIC0xNDU1MjMwNzApOw0KICAgICAgICBkID0gaWkoZCwgYSwgYiwgYywgdGFiQlsxMV0sIDEwLCAtMTEyMDIxMDM3OSk7DQogICAgICAgIGMgPSBpaShjLCBkLCBhLCBiLCB0YWJCWzJdLCAxNSwgNzE4Nzg3MjU5KTsNCiAgICAgICAgYiA9IGlpKGIsIGMsIGQsIGEsIHRhYkJbOV0sIDIxLCAtMzQzNDg1NTUxKTsNCiAgICAgICAgdGFiQVswXSA9IGFkZDMyKGEsIHRhYkFbMF0pOw0KICAgICAgICB0YWJBWzFdID0gYWRkMzIoYiwgdGFiQVsxXSk7DQogICAgICAgIHRhYkFbMl0gPSBhZGQzMihjLCB0YWJBWzJdKTsNCiAgICAgICAgdGFiQVszXSA9IGFkZDMyKGQsIHRhYkFbM10pDQogICAgZGVmIGNyeXB0YmxrKHRleHQpOg0KICAgICAgICByZXQgPSBbXQ0KICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCA2NCwgNCk6DQogICAgICAgICAgICByZXQuYXBwZW5kKG9yZCh0ZXh0W2ldKSArIChvcmQodGV4dFtpKzFdKSA8PCA4KSArIChvcmQodGV4dFtpKzJdKSA8PCAxNikgKyAob3JkKHRleHRbaSszXSkgPDwgMjQpKQ0KICAgICAgICByZXR1cm4gcmV0DQogICAgZGVmIGpjc3lzKHRleHQpOg0KICAgICAgICB0eHQgPSAnJzsNCiAgICAgICAgdHh0TGVuID0gbGVuKHRleHQpDQogICAgICAgIHJldCA9IFsxNzMyNTg0MTkzLCAtMjcxNzMzODc5LCAtMTczMjU4NDE5NCwgMjcxNzMzODc4XQ0KICAgICAgICBpID0gNjQNCiAgICAgICAgd2hpbGUgaSA8PSBsZW4odGV4dCk6DQogICAgICAgICAgICBjcnlwdGN5Y2xlKHJldCwgY3J5cHRibGsodGV4dFsnc3Vic3RyaW5nJ10oaSAtIDY0LCBpKSkpDQogICAgICAgICAgICBpICs9IDY0DQogICAgICAgIHRleHQgPSB0ZXh0W2kgLSA2NDpdDQogICAgICAgIHRtcCA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXQ0KICAgICAgICBpID0gMA0KICAgICAgICB3aGlsZSBpIDwgbGVuKHRleHQpOg0KICAgICAgICAgICAgdG1wW2kgPj4gMl0gfD0gb3JkKHRleHRbaV0pIDw8ICgoaSAlIDQpIDw8IDMpDQogICAgICAgICAgICBpICs9IDENCiAgICAgICAgdG1wW2kgPj4gMl0gfD0gMHg4MCA8PCAoKGkgJSA0KSA8PCAzKQ0KICAgICAgICBpZiBpID4gNTU6DQogICAgICAgICAgICBjcnlwdGN5Y2xlKHJldCwgdG1wKTsNCiAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDE2KToNCiAgICAgICAgICAgICAgICB0bXBbaV0gPSAwDQogICAgICAgIHRtcFsxNF0gPSB0eHRMZW4gKiA4Ow0KICAgICAgICBjcnlwdGN5Y2xlKHJldCwgdG1wKTsNCiAgICAgICAgcmV0dXJuIHJldA0KICAgIGRlZiByZXplZG93YSh0ZXh0KToNCiAgICAgICAgcmV0dXJuIGhleChqY3N5cyh0ZXh0KSkNCiAgICByZXR1cm4gcmV6ZWRvd2EoaW5fYWJjKQ0K' tmp = base64.b64decode(tmp).replace('\r', '') _myFun = compile(tmp, '', 'exec') vGlobals = {"__builtins__": None, 'len': len, 'list': list, 'ord':ord, 'range':range} vLocals = { 'zaraza': '' } exec _myFun in vGlobals, vLocals self._myFun = vLocals['zaraza'] except Exception: printExc() url = self.getFullUrl('/jsverify.php?op=tag') sts, data = self.getPage(url) try: data = json_loads(data) cookieHeader = self.cm.getCookieHeader(self.COOKIE_FILE, ['PHPSESSID']) d = {}; for i in range(len(data['key'])): d[data['key'][i]] = data['hash'][i] tmp = ''; for k in sorted(d.keys()): tmp += d[k] cookieHeader += ' tmvh=%s;' % self._myFun(tmp) params = {'header':{'Cookie':cookieHeader, 'User-Agent':self.USER_AGENT}} except Exception: params = {} printExc() urlTab = [] url = '' if 'alltube' in self.up.getDomain(baseUrl): sts, data = self.getPage(baseUrl, params) if not sts: return [] data = self.cm.ph.getDataBeetwenNodes(data, ('<section', '>', 'player'), ('</section', '>'), False)[1] url = self.getFullUrl(self.cm.ph.getSearchGroups(data, '''<iframe[^>]+?src=['"]([^"^']+?)['"]''', 1, True)[0]) #url = self.cm.ph.getDataBeetwenMarkers(data, 'src="', '"', False, False)[1] else: url = baseUrl if '' != url: videoUrl = url if url.startswith('//'): videoUrl = 'http:' + videoUrl from Plugins.Extensions.IPTVPlayer.libs.urlparser import urlparser videoUrl = urlparser.decorateUrl(videoUrl, {'Referer': baseUrl}) urlTab = self.up.getVideoLinkExt(videoUrl) return urlTab
def getLinksForVideo(self, cItem): printDBG("Twitch.getLinksForVideo [%s]" % cItem) urlTab = [] id = '' if cItem['video_type'] == 'clip': post_data = '[{"operationName":"VideoAccessToken_Clip","variables":{"slug":"%s"},"extensions":{"persistedQuery":{"version":1,"sha256Hash":"9bfcc0177bffc730bd5a5a89005869d2773480cf1738c592143b5173634b7d15"}}}]' % cItem[ 'clip_slug'] url = self.getFullUrl('/gql', self.API2_URL) sts, data = self.getPage( url, MergeDicts(self.defaultParams, {'raw_post_data': True}), post_data) if not sts: return urlTab try: data = byteify(json.loads(data)) printDBG("Twitch.getLinksForVideo data: %s" % data) for item in data[0]['data']['clip']['videoQualities']: urlTab.append({ 'name': '%sp, %sfps' % (item['quality'], item['frameRate']), 'url': item['sourceURL'], 'need_resolve': 0 }) except Exception: printExc() elif cItem['video_type'] == 'live': id = cItem['channel_id'] tokenUrl = self.CHANNEL_TOKEN_URL vidUrl = self.LIVE_URL liveStream = True else: id = cItem.get('video_id', '') tokenUrl = self.VOD_TOKEN_URL vidUrl = self.VOD_URL liveStream = False if id != '': url = tokenUrl % id sts, data = self.getPage(url) if sts: try: data = json.loads(data) url = vidUrl % (id, urllib.quote(jstr( data, 'token')), jstr(data, 'sig')) data = getDirectM3U8Playlist(url, checkExt=False) for item in data: item['url'] = urlparser.decorateUrl( item['url'], { 'iptv_proto': 'm3u8', 'iptv_livestream': liveStream }) urlTab.append(item) except Exception: printExc() return urlTab
def getLinksForVideo(self, cItem): try: urlTab = [] url = cItem['url'] baseUrl = strwithmeta(url) HTTP_HEADER = self.cm.getDefaultHeader(browser='chrome') referer = baseUrl.meta.get('Referer') if referer: HTTP_HEADER['Referer'] = referer urlParams = {'header':HTTP_HEADER} sts, data = self.cm.getPage(baseUrl, urlParams) if not sts: return [] if data == '': return [] cUrl = self.cm.meta['url'] f = ph.find(data, zlib.decompress(base64.b64decode('eJwryEmsTC2yBwALugLN')), '&', flags=0)[1] if not f: f = cUrl.split(zlib.decompress(base64.b64decode('eJwryEmsTC2yBwALugLN')), 1)[-1].rsplit('&', 1)[0] if not f: f = ph.find(data, zlib.decompress(base64.b64decode('eJwryEmsTC2yBwALugLN')), '&', flags=0)[1] if not f: return [] url = zlib.decompress(base64.b64decode('eJwVylsKgCAQBdDd+NljAdJSZMJrRqbDOEQh7r36PZzx2j2IEz0Qt0HdfaaBIy9t6qYqidrJINOaUDNxjeWH72soclqPemhhIwgQgdg29xc2Sx/I')).format(f, urllib.quote(baseUrl)) sts, data = self.cm.getPage(self.cm.getFullUrl(url, cUrl)) if not sts: return [] if data == '': return [] meta = {'Referer':cUrl, 'Origin':urlparser.getDomain(baseUrl, False)[:-1], 'User-Agent':HTTP_HEADER['User-Agent']} hlsMeta = MergeDicts(meta, {'iptv_proto':'m3u8'}) data = ph.find(data, ('<video_sources', '>'), '</video_sources>', flags=0)[1] if data == '': return [] data = ph.findall(data, ('<video_source', '>'), '</video_source>') if data == '': return [] for item in data: url = self.cm.getFullUrl(ph.clean_html(item), cUrl) if not url: continue if 'video/mp4' in item: width = ph.getattr(item, 'width') height = ph.getattr(item, 'height') name = ph.getattr(item, 'name') url = urlparser.decorateUrl(url, meta) urlTab.append({'name':'{0} - {1}x{2}'.format(name, width, height), 'url':url}) elif 'mpegurl' in item: url = urlparser.decorateUrl(url, hlsMeta) tmpTab = getDirectM3U8Playlist(url, checkExt=False, checkContent=True) urlTab.extend(tmpTab) urlTab.reverse() if cItem['category'] != 'list_third': self.susmrgts('2', '12', cItem['tps'], cItem['url'], cItem['title'], cItem['icon'], cItem['desc']) return urlTab except Exception: return []
def getLinksForVideo(self, cItem): printDBG("Hitbox.getLinksForVideo [%s]" % cItem) urls = [] if 'channel_link' in cItem: live = True urls.append( { 'name':'hls', 'type':'hls', 'url':Hitbox.MAIN_URL + 'player/hls/%s.m3u8' % cItem['channel_link'].split('/')[-1] } ) elif 'media_id' in cItem: live = False sts, data = self.cm.getPage( Hitbox.MAIN_URL + 'api/player/config/video/%s?redis=true&embed=false&qos=false&redis=true&showHidden=true' % cItem['media_id'] ) if sts: try: data = byteify( json.loads(data) ) baseUrl = data['clip']['baseUrl'] if None == baseUrl: baseUrl = '' for item in data['clip']['bitrates']: url = item['url'] if url.split('?')[0].endswith('m3u8'): type = 'hls' else: type = 'vod' if not url.startswith('http'): if 'vod' == type: url = baseUrl + '/' + url else: url = Hitbox.MAIN_URL + '/' + url if url.startswith('http'): urls.append( {'name':item.get('label', 'vod'), 'type':type, 'url':url} ) if 'vod' == type: break except: printExc() urlTab = [] for urlItem in urls: if 'hls' == urlItem['type']: url = urlItem['url'] data = getDirectM3U8Playlist(url, checkExt=False) if 1 == len(data): urlItem['url'] = urlparser.decorateUrl(urlItem['url'], {'iptv_proto':'m3u8', 'iptv_livestream':live}) urlTab.append(urlItem) else: for item in data: item['url'] = urlparser.decorateUrl(item['url'], {'iptv_proto':'m3u8', 'iptv_livestream':live}) urlTab.append(item) else: urlTab.append(urlItem) return urlTab
def getVideoLink(self, cItem): printDBG("UstvnowApi.getVideoLink %s" % cItem) urlsTab = [] cookieParams = {'cookiefile': self.cookiePath, 'use_cookie': True, 'load_cookie':True, 'save_cookie':True} sts, data = self.cm.getPage('http://m-api.ustvnow.com/stream/1/live/view?scode=%s&token=%s&key=%s' % (cItem.get('scode', ''), self.token, self.passkey), self.defParams) if sts: try: data = json_loads(data) tmp = getDirectM3U8Playlist(strwithmeta(data['stream'], {'User-Agent':self.HTTP_HEADER['User-Agent']}), cookieParams=cookieParams, checkContent=True) cookieValue = self.cm.getCookieHeader(self.cookiePath) for item in tmp: vidUrl = item['url'] item['url'] = urlparser.decorateUrl(vidUrl, {'User-Agent':self.HTTP_HEADER['User-Agent'], 'Cookie':cookieValue}) urlsTab.append(item) if len(urlsTab): return urlsTab except Exception: printExc() sts, data = self.cm.getPage(self.LIVE_URL, self.defParams) if not sts: return [] url = self.cm.ph.getSearchGroups(data, 'for="popup-%s"[^>]*?href="([^"]+?)"[^>]*?>' % cItem['ui_page'])[0] url = self.getFullUrl(url) sts, data = self.cm.getPage(url, self.defParams) if not sts: return [] url = self.cm.ph.getSearchGroups(data, 'src="([^"]+?)"')[0] tmp = getDirectM3U8Playlist(strwithmeta(url, {'User-Agent':self.HTTP_HEADER['User-Agent']}), cookieParams=cookieParams, checkContent=True) cookieValue = self.cm.getCookieHeader(self.cookiePath) for item in tmp: vidUrl = item['url'] item['url'] = urlparser.decorateUrl(vidUrl, {'User-Agent':self.HTTP_HEADER['User-Agent'], 'Cookie':cookieValue}) urlsTab.append(item) return urlsTab
def getLinksForVideo(self, cItem): printDBG("Twitch.getLinksForVideo [%s]" % cItem) urlTab = [] id = '' if cItem['video_type'] == 'clip': url = 'https://clips.twitch.tv/api/v2/clips/%s/status' % cItem[ 'clip_slug'] sts, data = self.getPage(url) if not sts: return urlTab try: data = byteify(json.loads(data)) for item in data['quality_options']: urlTab.append({ 'name': '%sp, %sfps' % (item['quality'], item['frame_rate']), 'url': item['source'], 'need_resolve': 0 }) except Exception: printExc() elif cItem['video_type'] == 'live': id = cItem['channel_id'] tokenUrl = self.CHANNEL_TOKEN_URL vidUrl = self.LIVE_URL liveStream = True else: id = cItem.get('video_id', '') tokenUrl = self.VOD_TOKEN_URL vidUrl = self.VOD_URL liveStream = False if id != '': url = tokenUrl % id sts, data = self.getPage(url) if sts: try: data = json.loads(data) url = vidUrl % (id, urllib.quote(jstr( data, 'token')), jstr(data, 'sig')) data = getDirectM3U8Playlist(url, checkExt=False) for item in data: item['url'] = urlparser.decorateUrl( item['url'], { 'iptv_proto': 'm3u8', 'iptv_livestream': liveStream }) urlTab.append(item) except Exception: printExc() return urlTab
def getLinks_ETV(self, url): printDBG("Ekstraklasa.getLinks_ETV url[%r]" % url) sts, data = self.cm.getPage(url) if not sts: return printDBG("Ekstraklasa.getLinks_ETV [%s]" % data) videoUrl = self.cm.ph.getSearchGroups( data, '''<iframe[^>]+?src=['"]([^"^']+?)['"]''')[0] if videoUrl.startswith('//'): videoUrl = 'http:' + videoUrl from Plugins.Extensions.IPTVPlayer.libs.urlparser import urlparser videoUrl = urlparser.decorateUrl(videoUrl, {'Referer': url}) return self.up.getVideoLinkExt(videoUrl)
def getLinksForVideo(self, cItem): printDBG("TvGryPL.getLinksForVideo [%s]" % cItem) id = self.cm.ph.getSearchGroups(cItem['url'] + '_', 'ID=([0-9]+?)[^0-9]', 1)[0] urlTab = [] sts, data = self.cm.getPage( 'http://tvgry.pl/video/source.v2.asp?SC=TV&ID=%s&QL=SD' % id) if not sts: return urlTab data = re.compile('file="([^"]+?)"[^>]*?label="([^"]+?)"').findall( data) for item in data: q = "" if '_C/500_' in item[0] or "Mobile" in item[1]: q = 'MOB' elif '_C/750_' in item[0] or "SD" in item[1]: q = 'SD' elif '_C/1280_' in item[0] or "720p" in item[1]: q = 'HD' #elif '_C/1920_' in item[0] or "1080p" in item[1]: # q = 'FHD' if '' != q: urlTab.append({ 'name': item[1], 'url': urlparser.decorateUrl(item[0], { 'Referer': 'http://p.jwpcdn.com/6/12/jwplayer.flash.swf' }), 'q': q }) # for item in ['MOB', 'SD', 'HD']: # url = 'http://tvgry.pl/video/source.asp?SC=TV&ID=%s&QL=%s' % (id, item[:2]) # sts,data = self.getPage(url) # if not sts: continue # url = self.cm.ph.getSearchGroups(data, 'file>(http[^<]+?)<', 1)[0] # if '' != url: urlTab.append({'name':item, 'url':url, 'q':item}) if 1 < len(urlTab): map = {'MOB': 0, 'SD': 1, 'HD': 2, 'FHD': 3} oneLink = CSelOneLink( urlTab, lambda x: map[x['q']], map[config.plugins.iptvplayer.tvgrypl_default_quality.value]) if config.plugins.iptvplayer.tvgrypl_use_dq.value: urlTab = oneLink.getOneLink() else: urlTab = oneLink.getSortedLinks() return urlTab
def getLinksForVideo(self, cItem): printDBG("EskaGo.getLinksForVideo [%s]" % cItem) urlTab = [] for urlItem in cItem.get("urls", []): url = urlItem["url"] if url.split("?")[0].endswith("m3u8"): data = getDirectM3U8Playlist(url, checkExt=False) for item in data: item["url"] = urlparser.decorateUrl(item["url"], {"iptv_proto": "m3u8", "iptv_livestream": True}) urlTab.append(item) else: urlTab.append(urlItem) return urlTab
def getLinksForVideo(self, cItem): printDBG("EskaGo.getLinksForVideo [%s]" % cItem) urlTab = [] for urlItem in cItem.get('urls', []): url = urlItem['url'] if url.split('?')[0].endswith('m3u8'): data = getDirectM3U8Playlist(url, checkExt=False) for item in data: item['url'] = urlparser.decorateUrl(item['url'], {'iptv_proto':'m3u8', 'iptv_livestream':True}) urlTab.append(item) else: urlTab.append(urlItem) return urlTab
def getLinksForVideo(self, cItem): printDBG("TvGryPL.getLinksForVideo [%s]" % cItem) id = self.cm.ph.getSearchGroups(cItem["url"] + "_", "ID=([0-9]+?)[^0-9]", 1)[0] urlTab = [] sts, data = self.cm.getPage("http://tvgry.pl/video/source.v2.asp?SC=TV&ID=%s&QL=SD" % id) if not sts: return urlTab data = re.compile('file="([^"]+?)"[^>]*?label="([^"]+?)"').findall(data) for item in data: q = "" if "_C/500_" in item[0] or "Mobile" in item[1]: q = "MOB" elif "_C/750_" in item[0] or "SD" in item[1]: q = "SD" elif "_C/1280_" in item[0] or "720p" in item[1]: q = "HD" # elif '_C/1920_' in item[0] or "1080p" in item[1]: # q = 'FHD' if "" != q: urlTab.append( { "name": item[1], "url": urlparser.decorateUrl( item[0], {"Referer": "http://p.jwpcdn.com/6/12/jwplayer.flash.swf"} ), "q": q, } ) # for item in ['MOB', 'SD', 'HD']: # url = 'http://tvgry.pl/video/source.asp?SC=TV&ID=%s&QL=%s' % (id, item[:2]) # sts,data = self.getPage(url) # if not sts: continue # url = self.cm.ph.getSearchGroups(data, 'file>(http[^<]+?)<', 1)[0] # if '' != url: urlTab.append({'name':item, 'url':url, 'q':item}) if 1 < len(urlTab): map = {"MOB": 0, "SD": 1, "HD": 2, "FHD": 3} oneLink = CSelOneLink( urlTab, lambda x: map[x["q"]], map[config.plugins.iptvplayer.tvgrypl_default_quality.value] ) if config.plugins.iptvplayer.tvgrypl_use_dq.value: urlTab = oneLink.getOneLink() else: urlTab = oneLink.getSortedLinks() return urlTab
def getLinksForVideo(self, cItem): printDBG("Hitbox.getLinksForVideo [%s]" % cItem) urlTab = [] url = '' if 'channel_link' in cItem: url = Hitbox.MAIN_URL + 'player/hls/%s.m3u8' % cItem[ 'channel_link'].split('/')[-1] ''' url = Hitbox.MAIN_URL + 'api/media/live/%s?showHidden=true' % cItem['channel_link'].split('/')[-1] sts, data = self.cm.getPage(url) if not sts: return urlTab try: data = byteify( json.loads(data) ) channelData = data['livestream'][0] url = Hitbox.MAIN_URL + 'api/player/config/live/%s?embed=false&showHidden=true' % url = Hitbox.LIVE_URL % (cItem['channel'], urllib.quote(self._getStr(data['token'])), self._getStr(data['sig'])) data = getDirectM3U8Playlist(url, checkExt=False) for item in data: item['url'] = urlparser.decorateUrl(item['url'], {'iptv_block_exteplayer':True, 'iptv_proto':'m3u8', 'iptv_livestream':True}) urlTab.append(item) except: printExc() ''' elif 'media_id' in cItem: sts, data = self.cm.getPage( Hitbox.MAIN_URL + 'api/player/config/video/%s?redis=true&embed=false&qos=false&redis=true&showHidden=true' % cItem['media_id']) if sts: try: data = byteify(json.loads(data)) if data['clip']['url'].startswith('http'): url = data['clip']['url'] except: printExc() if '' != url: data = getDirectM3U8Playlist(url, checkExt=False) for item in data: item['url'] = urlparser.decorateUrl(item['url'], { 'iptv_proto': 'm3u8', 'iptv_livestream': True }) urlTab.append(item) return urlTab
def DownloaderCreator(url): printDBG("DownloaderCreator url[%r]" % url) downloader = None url = urlparser.decorateUrl(url) iptv_proto = url.meta.get('iptv_proto', '') if 'm3u8' == iptv_proto: downloader = M3U8Downloader() elif 'f4m' == iptv_proto: downloader = F4mDownloader() elif 'rtmp' == iptv_proto: downloader = RtmpDownloader() elif 'https' == iptv_proto: downloader = WgetDownloader() elif 'http' == iptv_proto: downloader = WgetDownloader() return downloader
def DownloaderCreator(url): printDBG("DownloaderCreator url[%r]" % url) downloader = None url = urlparser.decorateUrl(url) iptv_proto = url.meta.get('iptv_proto', '') if 'm3u8' == iptv_proto: downloader = M3U8Downloader() elif 'f4m' == iptv_proto: downloader = F4mDownloader() elif 'rtmp' == iptv_proto: downloader = RtmpDownloader() elif 'https' == iptv_proto: downloader = WgetDownloader() elif 'http' == iptv_proto: downloader = WgetDownloader() return downloader
def getLinksForVideo(self, cItem): printDBG("Twitch.getLinksForVideo [%s]" % cItem) urlTab = [] if 'channel' in cItem: url = Twitch.CHANNEL_TOKEN_URL % cItem['channel'] sts, data = self.cm.getPage(url) if sts: try: data = json.loads(data) url = Twitch.LIVE_URL % (cItem['channel'], urllib.quote(self._getStr(data['token'])), self._getStr(data['sig'])) data = getDirectM3U8Playlist(url, checkExt=False) for item in data: item['url'] = urlparser.decorateUrl(item['url'], {'iptv_block_exteplayer':True, 'iptv_proto':'m3u8', 'iptv_livestream':True}) urlTab.append(item) except: printExc() elif '' != cItem['url']: urlTab.append({'name':cItem['title'], 'url':cItem['url']}) return urlTab
def listsItems(self, Index, url, name = ''): printDBG( 'Host listsItems begin' ) printDBG( 'Host listsItems url: '+url ) valTab = [] if name == 'main-menu': printDBG( 'Host listsItems begin name='+name ) #valTab.append(CDisplayListItem("Newest (HD-1080p)", "Newest (HD-1080p)", CDisplayListItem.TYPE_CATEGORY, ['http://trailers.apple.com/trailers/home/xml/newest_1080p.xml'], 'appletrailers-movies', '', None)) #valTab.append(CDisplayListItem("Current (HD-1080p)", "Current (HD-1080p)", CDisplayListItem.TYPE_CATEGORY, ['http://trailers.apple.com/trailers/home/xml/current_1080p.xml'], 'appletrailers-movies', '', None)) valTab.append(CDisplayListItem("Newest (HD-720p)", "Newest (HD-720p)", CDisplayListItem.TYPE_CATEGORY, ['http://trailers.apple.com/trailers/home/xml/newest_720p.xml'], 'appletrailers-movies', '', None)) valTab.append(CDisplayListItem("Current (HD-720p)", "Current (HD-720p)", CDisplayListItem.TYPE_CATEGORY, ['http://trailers.apple.com/trailers/home/xml/current_720p.xml'], 'appletrailers-movies', '', None)) valTab.append(CDisplayListItem("Newest (HD-480p)", "Newest (HD-480p)", CDisplayListItem.TYPE_CATEGORY, ['http://trailers.apple.com/trailers/home/xml/newest_480p.xml'], 'appletrailers-movies', '', None)) valTab.append(CDisplayListItem("Current (HD-480p)", "Current (HD-480p)", CDisplayListItem.TYPE_CATEGORY, ['http://trailers.apple.com/trailers/home/xml/current_480p.xml'], 'appletrailers-movies', '', None)) valTab.append(CDisplayListItem("Newest (SD)", "Newest (SD)", CDisplayListItem.TYPE_CATEGORY, ['http://trailers.apple.com/trailers/home/xml/newest.xml'], 'appletrailers-movies', '', None)) valTab.append(CDisplayListItem("Current (SD)", "Current (SD)", CDisplayListItem.TYPE_CATEGORY, ['http://trailers.apple.com/trailers/home/xml/current.xml'], 'appletrailers-movies', '', None)) printDBG( 'Host listsItems end' ) return valTab # ########## # if 'appletrailers-movies' == name: printDBG( 'Host listsItems begin name='+name ) self.MAIN_URL = 'http://trailers.apple.com' query_data = { 'url': url, 'use_host': False, 'use_cookie': False, 'use_post': False, 'return_data': True } try: data = self.cm.getURLRequestData(query_data) except: printDBG( 'Host listsItems query error' ) printDBG( 'Host listsItems query error url:'+url ) return valTab printDBG( 'Host listsItems data: '+data ) phMovies = re.findall('<movieinfo.*?<title>(.*?)</title>.*?<runtime>(.*?)</runtime>.*?<location>(.*?)</location>.*?<large filesize=".*?">(.*?)</large>', data, re.S) if phMovies: for (phTitle, phRuntime, phImage, phUrl) in phMovies: phUrl = urlparser.decorateUrl(phUrl, {'User-Agent':'QuickTime/7.6.2'}) printDBG( 'Host listsItems phTitle: ' +phTitle ) printDBG( 'Host listsItems phRuntime: ' +phRuntime ) printDBG( 'Host listsItems phImage: ' +phImage ) printDBG( 'Host listsItems phUrl: ' +phUrl ) valTab.append(CDisplayListItem(phTitle,'['+phRuntime+'] '+phTitle,CDisplayListItem.TYPE_VIDEO, [CUrlItem('', phUrl, 1)], 0, phImage, None)) printDBG( 'Host listsItems end' ) return valTab return valTab
def getLinksForVideo(self, cItem): printDBG("[Shortcut.lv] getLinksForVideo [%s]" % cItem) xurl = cItem['url'] mode, id = xurl.split('|') if mode == 'playlive': url = self.get_stream_url(id) elif mode == 'playarchive': url = self.get_archive_url(id) retlist = [] if isEmpty(url): return [] urlMeta = {'User-Agent':self.USER_AGENT, 'Connection': 'keep-alive'} url = urlparser.decorateUrl(url, urlMeta) #tmpList = getDirectM3U8Playlist(url, checkExt=False) #url = tmpList[0]['url'] #url = urlparser.decorateUrl(url, urlMeta) retlist.append({'name':xurl, 'url': url}) return retlist
def getUrlImpl(self, url): urlsList = [] sts, data = self.cm.getPage(url) if sts: try: data = json.loads(data) seekable = data['seekable'] for stream in data['streams']: name = stream['quality'].encode('utf-8') url = stream['url'].encode('utf-8') if url.startswith('rtmp'): flashplayer = 'http://www.filmon.com/tv/modules/FilmOnTV/files/flashapp/filmon/FilmonPlayer.swf?v=55' pageUrl = 'http://www.filmon.com/tv/channel/export?channel_id=' + str(channelID) url = url + '/' + stream['name'].encode('utf-8') + ' swfUrl=' + flashplayer + ' pageUrl=' + url url = urlparser.decorateUrl( url ) url.meta.update({'iptv_urlwithlimit' : False, 'iptv_livestream' : not seekable}) urlsList.append({'name':name, 'url':url}) except: printExc() return urlsList
def getLinksForVideo(self, cItem): printDBG("Urllist.getLinksForVideo url[%s]" % cItem['url']) videoUrls = [] uri, params = DMHelper.getDownloaderParamFromUrl(cItem['url']) printDBG(params) uri = urlparser.decorateUrl(uri, params) urlSupport = self.up.checkHostSupport( uri ) if 1 == urlSupport: retTab = self.up.getVideoLinkExt( uri ) videoUrls.extend(retTab) elif 0 == urlSupport and self._uriIsValid(uri): if uri.split('?')[0].endswith('.m3u8'): retTab = getDirectM3U8Playlist(uri) videoUrls.extend(retTab) elif uri.split('?')[0].endswith('.f4m'): retTab = getF4MLinksWithMeta(uri) videoUrls.extend(retTab) else: videoUrls.append({'name':'direct link', 'url':uri}) return videoUrls
def getLinksForVideo(self, cItem): printDBG("Urllist.getLinksForVideo url[%s]" % cItem['url']) videoUrls = [] uri, params = DMHelper.getDownloaderParamFromUrl(cItem['url']) printDBG(params) uri = urlparser.decorateUrl(uri, params) urlSupport = self.up.checkHostSupport(uri) if 1 == urlSupport: retTab = self.up.getVideoLinkExt(uri) videoUrls.extend(retTab) elif 0 == urlSupport and self._uriIsValid(uri): if uri.split('?')[0].endswith('.m3u8'): retTab = getDirectM3U8Playlist(uri) videoUrls.extend(retTab) elif uri.split('?')[0].endswith('.f4m'): retTab = getF4MLinksWithMeta(uri) videoUrls.extend(retTab) else: videoUrls.append({'name': 'direct link', 'url': uri}) return videoUrls
def getVideoLink(self, cItem): printDBG("UstvnowApi.getVideoLink") sts, data = self.cm.getPage(cItem['priv_url'], self.defParams) if not sts: return [] url = self.cm.ph.getSearchGroups(data, 'for="popup-%s"[^>]*?href="([^"]+?)"[^>]*?>' % cItem['ui_page'])[0] url = self._getFullUrl(url) sts, data = self.cm.getPage(url, self.defParams) if not sts: return [] url = self.cm.ph.getSearchGroups(data, 'src="([^"]+?)"')[0] urlsTab = [] tmp = getDirectM3U8Playlist(strwithmeta(url, {'User-Agent':self.HTTP_HEADER['User-Agent']}), cookieParams = {'cookiefile': self.cookiePath, 'use_cookie': True, 'load_cookie':True, 'save_cookie':True}) hdntl = self.cm.getCookieItem(self.cookiePath, 'hdntl') for item in tmp: item['url'] = urlparser.decorateUrl(item['url'], {'User-Agent':self.HTTP_HEADER['User-Agent'], 'Cookie':"hdntl=%s" % urllib.unquote(hdntl)}) urlsTab.append(item) return urlsTab
def getLinksForVideo(self, cItem): printDBG("Hitbox.getLinksForVideo [%s]" % cItem) urlTab = [] url = '' if 'channel_link' in cItem: url = Hitbox.MAIN_URL + 'player/hls/%s.m3u8' % cItem['channel_link'].split('/')[-1] ''' url = Hitbox.MAIN_URL + 'api/media/live/%s?showHidden=true' % cItem['channel_link'].split('/')[-1] sts, data = self.cm.getPage(url) if not sts: return urlTab try: data = byteify( json.loads(data) ) channelData = data['livestream'][0] url = Hitbox.MAIN_URL + 'api/player/config/live/%s?embed=false&showHidden=true' % url = Hitbox.LIVE_URL % (cItem['channel'], urllib.quote(self._getStr(data['token'])), self._getStr(data['sig'])) data = getDirectM3U8Playlist(url, checkExt=False) for item in data: item['url'] = urlparser.decorateUrl(item['url'], {'iptv_block_exteplayer':True, 'iptv_proto':'m3u8', 'iptv_livestream':True}) urlTab.append(item) except: printExc() ''' elif 'media_id' in cItem: sts, data = self.cm.getPage( Hitbox.MAIN_URL + 'api/player/config/video/%s?redis=true&embed=false&qos=false&redis=true&showHidden=true' % cItem['media_id'] ) if sts: try: data = byteify( json.loads(data) ) if data['clip']['url'].startswith('http'): url = data['clip']['url'] except: printExc() if '' != url: data = getDirectM3U8Playlist(url, checkExt=False) for item in data: item['url'] = urlparser.decorateUrl(item['url'], {'iptv_proto':'m3u8', 'iptv_livestream':True}) urlTab.append(item) return urlTab
def getVideoLink(self, cItem): printDBG("IKlubNetApi.getVideoLink") urlsTab = [] if cItem.get('vlc', False): uri = cItem['url'] if uri.startswith('http') and uri.split('?')[-1].endswith('.m3u8'): urlsTab.extend(getDirectM3U8Playlist(uri)) elif uri.startswith('rtmp'): urlsTab.append({'name': '[rtmp]', 'url': uri + ' live=1 '}) elif uri.startswith('http'): urlsTab.append({ 'name': '[rtmp]', 'url': urlparser.decorateUrl(uri, {'iptv_livestream': True}) }) return urlsTab url = cItem['url'] nextTitle = 'Podstawowy ' for linkIdx in range(2): if '' == url: break title = nextTitle sts, data = self.cm.getPage(url) if not sts: return urlsTab if 'tvpstream.tvp.pl' in url: urlsTab.extend(self.getTvpStreamLink(data)) if linkIdx > 0: return urlsTab url = self.getFullUrl( self.cm.ph.getSearchGroups( data, '<a href="([^"]+?)"[^>]*?><img[^>]*?alt="Zapasowy Player"', 1, True)[0]) if '' == url: url = self.getFullUrl( self.cm.ph.getSearchGroups( data, '<a href="([^"]+?)"[^>]*?><img[^>]*?alt="[^"]*?vlc[^"]*?"', 1, True)[0]) nextTitle = 'Zapasowy ' printDBG(data) urlNext = self.cm.ph.getSearchGroups( data, '<iframe[^>]+?src="([^"]+?iklub[^"]+?)"', 1, True)[0] if '' == urlNext: urlNext = self.cm.ph.getSearchGroups( data, '<iframe[^>]+?src="([^"]+?)"', 1, True)[0] if self.cm.isValidUrl(urlNext): sts, data = self.cm.getPage(urlNext) if not sts: continue data = self.cm.ph.getAllItemsBeetwenMarkers( data, 'eval(', ');', False) try: ddata = '' for idx in range(len(data)): tmp = data[idx].split('+') for item in tmp: item = item.strip() if item.startswith("'") or item.startswith('"'): ddata += self.cm.ph.getSearchGroups( item, '''['"]([^'^"]+?)['"]''')[0] else: tmp2 = re.compile( '''unescape\(['"]([^"^']+?)['"]''').findall( item) for item2 in tmp2: ddata += urllib.unquote(item2) printDBG( "++++++++++++++++++++++++++++++++++++++++++++++++++++") printDBG(ddata) printDBG( "++++++++++++++++++++++++++++++++++++++++++++++++++++") funName = self.cm.ph.getSearchGroups( ddata, '''function\s*([^\(]+?)''')[0].strip() sp = self.cm.ph.getSearchGroups( ddata, '''split\(\s*['"]([^'^"]+?)['"]''')[0] modStr = self.cm.ph.getSearchGroups( ddata, '''\+\s*['"]([^'^"]+?)['"]''')[0] modInt = int( self.cm.ph.getSearchGroups( ddata, '''\+\s*(-?[0-9]+?)[^0-9]''')[0]) ddata = self.cm.ph.getSearchGroups( ddata, '''document\.write[^'^"]+?['"]([^'^"]+?)['"]''')[0] data = '' tmp = ddata.split(sp) ddata = urllib.unquote(tmp[0]) k = urllib.unquote(tmp[1] + modStr) for idx in range(len(ddata)): data += chr((int(k[idx % len(k)]) ^ ord(ddata[idx])) + modInt) printDBG( "++++++++++++++++++++++++++++++++++++++++++++++++++++") printDBG(data) printDBG( "++++++++++++++++++++++++++++++++++++++++++++++++++++") if 'rtmp://' in data: rtmpUrl = self.cm.ph.getDataBeetwenMarkers( data, '&source=', '&', False)[1] if rtmpUrl == '': rtmpUrl = self.cm.ph.getSearchGroups( data, r'''['"](rtmp[^"^']+?)['"]''')[0] urlsTab.append({ 'name': title + ' [rtmp]', 'url': rtmpUrl + ' live=1 ' }) elif '.m3u8' in data: file = self.cm.ph.getSearchGroups( data, r'''['"](http[^"^']+?\.m3u8[^"^']*?)['"]''')[0] if file == '': file = self.cm.ph.getDataBeetwenMarkers( data, 'src=', '&', False)[1] urlsTab.extend(getDirectM3U8Playlist(file)) elif 'tvp.info' in data: vidUrl = self.getFullUrl( self.cm.ph.getSearchGroups( data, '''['"](http[^'^"]+?tvp.info[^'^"]+?)['"]''')[0]) sts, data = self.cm.getPage(vidUrl) if not sts: return [] urlsTab.extend(self.getTvpStreamLink(data)) elif 'mrl=' in data: file = self.cm.ph.getSearchGroups( data, '''mrl=['"](http[^'^"]+?)['"]''')[0] urlsTab.append({'name': title + ' [mrl]', 'url': file}) elif '<source ' in data: file = self.cm.ph.getSearchGroups( data, '''<source[^>]+?src=['"](http[^'^"]+?)['"]''')[0] urlsTab.append({'name': title + ' [src]', 'url': file}) else: urlsTab.extend(self.up.getAutoDetectedStreamLink( url, data)) if 'content.jwplatform.com' in data: vidUrl = self.getFullUrl( self.cm.ph.getSearchGroups( data, '''['"]([^'^"]+?content.jwplatform.com[^'^"]+?)['"]''' )[0]) sts, data = self.cm.getPage(vidUrl) if not sts: continue if '/players/' not in vidUrl: vidUrl = self.cm.ph.getSearchGroups( data, '''['"](https?[^'^"]+?/players/[^'^"]+?\.js)['"]''' )[0] HEADER = dict(self.HEADER) HEADER['Referer'] = vidUrl sts, data = self.cm.getPage(vidUrl, {'header': HEADER}) if not sts: continue data = self.cm.ph.getDataBeetwenMarkers( data, '"sources":', ']', False)[1] file = self.cm.ph.getSearchGroups( data, r'''['"]?file['"]?\s*:\s*['"]([^"^']+)['"],''')[0] printDBG(">>>>>>>>>>>>>>>>>>>>>>>> FILE[%s]" % file) if file.startswith('http') and file.split( '?')[-1].endswith('.m3u8'): urlsTab.extend(getDirectM3U8Playlist(file)) elif file.startswith('rtmp'): urlsTab.append({ 'name': title + ' [rtmp]', 'url': file + ' live=1 ' }) except Exception: printExc() continue return urlsTab
def getLinksForVideo(self, Index = 0, selItem = None): listLen = len(self.host.currList) if listLen < Index and listLen > 0: printDBG( "ERROR getLinksForVideo - current list is to short len: %d, Index: %d" % (listLen, Index) ) return RetHost(RetHost.ERROR, value = []) if self.host.currList[Index]["type"] != 'video': printDBG( "ERROR getLinksForVideo - current item has wrong type" ) return RetHost(RetHost.ERROR, value = []) retlist = [] url = self.host.currList[Index].get("url", '') name = self.host.currList[Index].get("name", '') printDBG(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [%s] [%s]" % (name, url)) urlList = None if -1 != url.find('teledunet'): new_url = TeledunetParser().get_rtmp_params(url) if 0 < len(url): retlist.append(CUrlItem("Własny link", new_url)) elif url.startswith('http://goldvod.tv/'): url = self.host.getGoldvodLink(url) elif 'web-live.tv' in url: url = self.host.getSatLiveLink(url) elif 'vidtv.pl' in url: url = self.host.getVidTvLink(url) elif 'looknij.tv' in url: url = self.host.getLooknijTvLink(url) elif 'tvisport.cba.pl' in url: urlList = self.host.getTvSportCdaLink(url) elif 'nettv.pw' in url: urlList = self.host.getNettvpwLink(url) elif 'weeb.tv' in name: url = self.host.getWeebTvLink(url) elif name == "team-cast.pl": urlList = self.host.getTeamCastLink(url) elif "filmon_channel" == name: urlList = self.host.getFilmOnLink(channelID=url) elif "videostar_channels" == name: urlList = self.host.getVideostarLink(channelID=url) #if 1 < len(tmpList): # for item in tmpList: # retlist.append(CUrlItem(item['name'], item['url'])) #elif 1 == len(tmpList): # url = tmpList[0]['url'] elif name == "webcamera.pl": urlList = self.host.getWebCameraLink(url) elif name == "prognoza.pogody.tv": urlList = self.host.prognozaPogodyLink(url) if isinstance(urlList, list): for item in urlList: retlist.append(CUrlItem(item['name'], item['url'])) elif isinstance(url, basestring): if url.endswith('.m3u'): tmpList = self.host.getDirectVideoHasBahCa(name, url) for item in tmpList: retlist.append(CUrlItem(item['name'], item['url'])) else: iptv_proto = urlparser.decorateUrl(url).meta.get('iptv_proto', '') if 'm3u8' == iptv_proto: tmpList = getDirectM3U8Playlist(url, checkExt=False) for item in tmpList: retlist.append(CUrlItem(item['name'], item['url'])) elif 'f4m' == iptv_proto: tmpList = getF4MLinksWithMeta(url, checkExt=False) for item in tmpList: retlist.append(CUrlItem(item['name'], item['url'])) else: if '://' in url: retlist.append(CUrlItem("Link", url)) return RetHost(RetHost.OK, value = retlist)
def m3uList(self, listURL): printDBG('m3uList entry') params = {'header': self.HTTP_HEADER} listURL = strwithmeta(listURL) meta = listURL.meta if 'proxy-german.de' in listURL: listURL = urllib.unquote(listURL.split('?q=')[-1]) listURL = strwithmeta(listURL, meta) if 'cookiefile' in listURL.meta: params.update({'use_cookie': True, 'load_cookie': True, 'save_cookie': True, 'cookiefile': GetCookieDir(listURL.meta['cookiefile'])} ) sts, data = self.getPage(listURL, params) if not sts: printDBG("getHTMLlist ERROR geting [%s]" % listURL) return data = data.replace("\r","\n").replace('\n\n', '\n').split('\n') printDBG("[\n%s\n]" % data) title = '' nr = '' catTitle = '' icon = '' for item in data: if item.startswith('#EXTINF:'): try: nr = self.cm.ph.getDataBeetwenMarkers(item, 'tvg-id="', '"', False)[1] catTitle = self.cm.ph.getDataBeetwenMarkers(item, 'group-title="', '"', False)[1] icon = self.cm.ph.getDataBeetwenMarkers(item, 'tvg-logo="', '"', False)[1] title = item.split(',')[1] except Exception: title = item else: if 0 < len(title): if 'Lista_matzgPL' in listURL and title.startswith('TVP '): continue item = item.replace('rtmp://$OPT:rtmp-raw=', '') cTitle = re.sub('\[[^\]]*?\]', '', title) if len(cTitle): title = cTitle itemUrl = self.up.decorateParamsFromUrl(item) if 'http://wownet.ro/' in itemUrl: icon = 'http://wownet.ro/logo/' + icon else: icon = '' if '' != catTitle: desc = catTitle + ', ' else: desc = '' desc += (_("Protocol: ")) + itemUrl.meta.get('iptv_proto', '') if 'headers=' in itemUrl: headers = self.cm.ph.getSearchGroups(itemUrl, 'headers\=(\{[^\}]+?\})')[0] try: headers = json_loads(headers) itemUrl = itemUrl.split('headers=')[0].strip() itemUrl = urlparser.decorateUrl(itemUrl, headers) except Exception: printExc() params = {'title': title, 'url': itemUrl, 'icon':icon, 'desc':desc} if listURL.endswith('radio.m3u'): if icon == '': params['icon'] = 'http://www.darmowe-na-telefon.pl/uploads/tapeta_240x320_muzyka_23.jpg' self.addAudio(params) else: self.addVideo(params) title = ''
def getLinksForVideo(self, Index = 0, selItem = None): listLen = len(self.host.currList) if listLen <= Index or Index < 0: printDBG( "ERROR getLinksForVideo - current list is to short len: %d, Index: %d" % (listLen, Index) ) return RetHost(RetHost.ERROR, value = []) if self.host.currList[Index]["type"] not in ['video', 'audio', 'picture']: printDBG( "ERROR getLinksForVideo - current item has wrong type" ) return RetHost(RetHost.ERROR, value = []) retlist = [] cItem = self.host.currList[Index] url = self.host.currList[Index].get("url", '') name = self.host.currList[Index].get("name", '') printDBG(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [%s] [%s]" % (name, url)) urlList = None if -1 != url.find('teledunet'): new_url = TeledunetParser().get_rtmp_params(url) if 0 < len(url): retlist.append(CUrlItem("Własny link", new_url)) elif url.startswith('http://goldvod.tv/'): urlList = self.host.getGoldVodTvLink(cItem) elif name == 'livemass.net': urlList = self.host.getLivemassNetLink(cItem) elif name == "sport365.live": urlList = self.host.getSport365LiveLink(cItem) elif name == 'wagasworld.com': urlList = self.host.getWagasWorldLink(cItem) elif name == 'others': urlList = self.host.getOthersLinks(cItem) elif 'weeb.tv' in name: url = self.host.getWeebTvLink(url) elif name == "filmon_channel": urlList = self.host.getFilmOnLink(channelID=url) elif name == "videostar.pl": urlList = self.host.getVideostarLink(cItem) elif name == 'bilasport.com': urlList = self.host.getBilaSportPwLink(cItem) elif name == 'canlitvlive.io': urlList = self.host.getCanlitvliveIoLink(cItem) elif name == 'djing.com': urlList = self.host.getDjingComLink(cItem) elif name == 'ustvnow': urlList = self.host.getUstvnowLink(cItem) elif name == 'wizja.tv': urlList = self.host.getWizjaTvLink(cItem) elif name == 'meteo.pl': urlList = self.host.getMeteoPLLink(cItem) elif name == 'edem.tv': urlList = self.host.getEdemTvLink(cItem) elif name == 'skylinewebcams.com': urlList = self.host.getWkylinewebcamsComLink(cItem) elif name == "webcamera.pl": urlList = self.host.getWebCameraLink(cItem) elif name == "prognoza.pogody.tv": urlList = self.host.prognozaPogodyLink(url) elif name == "mlbstream.tv": urlList = self.host.getMLBStreamTVLink(cItem) elif name == "beinmatch.com": urlList = self.host.getBeinmatchLink(cItem) elif name == "wiz1.net": urlList = self.host.getWiz1NetLink(cItem) if isinstance(urlList, list): for item in urlList: retlist.append(CUrlItem(item['name'], item['url'], item.get('need_resolve', 0))) elif isinstance(url, basestring): if url.endswith('.m3u'): tmpList = self.host.getDirectVideoHasBahCa(name, url) for item in tmpList: retlist.append(CUrlItem(item['name'], item['url'])) else: url = urlparser.decorateUrl(url) iptv_proto = url.meta.get('iptv_proto', '') if 'm3u8' == iptv_proto: if '84.114.88.26' == url.meta.get('X-Forwarded-For', ''): url.meta['iptv_m3u8_custom_base_link'] = '' + url url.meta['iptv_proxy_gateway'] = 'http://webproxy.at/surf/printer.php?u={0}&b=192&f=norefer' url.meta['Referer'] = url.meta['iptv_proxy_gateway'].format(urllib.quote_plus(url)) meta = url.meta tmpList = getDirectM3U8Playlist(url, checkExt=False) if 1 == len(tmpList): url = urlparser.decorateUrl(tmpList[0]['url'], meta) tmpList = getDirectM3U8Playlist(url, checkExt=False) for item in tmpList: retlist.append(CUrlItem(item['name'], item['url'])) elif 'f4m' == iptv_proto: tmpList = getF4MLinksWithMeta(url, checkExt=False) for item in tmpList: retlist.append(CUrlItem(item['name'], item['url'])) else: if '://' in url: ua = strwithmeta(url).meta.get('User-Agent', '') if 'balkanstream.com' in url: if '' == ua: url.meta['User-Agent'] = 'Mozilla/5.0' retlist.append(CUrlItem("Link", url)) return RetHost(RetHost.OK, value = retlist)