Esempio n. 1
0
    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
Esempio n. 2
0
 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
Esempio n. 3
0
    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}]
Esempio n. 4
0
 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
Esempio n. 5
0
    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
Esempio n. 8
0
        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
Esempio n. 9
0
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
Esempio n. 10
0
    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
Esempio n. 11
0
    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
Esempio n. 12
0
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
Esempio n. 14
0
    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}]
Esempio n. 15
0
    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
Esempio n. 16
0
    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
Esempio n. 17
0
 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 []
Esempio n. 18
0
 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
Esempio n. 19
0
    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
Esempio n. 20
0
    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)
Esempio n. 22
0
    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
Esempio n. 23
0
    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
Esempio n. 24
0
 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
Esempio n. 25
0
    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
Esempio n. 26
0
    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
Esempio n. 30
0
    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
Esempio n. 31
0
    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
Esempio n. 32
0
 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
Esempio n. 33
0
 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
Esempio n. 34
0
    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
Esempio n. 35
0
 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
Esempio n. 37
0
    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=', '&amp;', 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)
Esempio n. 39
0
 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 = ''
Esempio n. 40
0
    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)