Ejemplo n.º 1
0
 def getLinksForVideo(self, cItem):
     printDBG("TVJWORG.getLinksForVideo [%s]" % cItem)
     urlTab = []
     
     try:
         tmpTab = cItem.get('files', [])
         for item in tmpTab:
             try:
                 linkVideo = item['progressiveDownloadURL']
                 linkVideo = urlparser.decorateUrl(linkVideo, {'Referer': 'http://tv.jw.org/'})
                 urlTab.append({'name':item['label'], 'url': linkVideo, 'need_resolve':0})
             except:
                 printExc()
             
         if 1 < len(urlTab):
             error = False
             max_bitrate = int(config.plugins.iptvplayer.tvjworg_default_format.value)
             def __getLinkQuality( itemLink ):
                 try: 
                     return int(itemLink['name'][0:-1])
                 except:
                     error = True
                     return 0
             oneLink = CSelOneLink(urlTab, __getLinkQuality, max_bitrate)
             if not error and config.plugins.iptvplayer.tvjworg_use_df.value:
                 urlTab = oneLink.getOneLink()
             else:
                 urlTab = oneLink.getSortedLinks()
     except:
         printExc()
     
     return urlTab
 def getVideoLinks(self,url):
     printDBG('WRZUTA.getVideoLinks')
     nurl = url.split("/")
     url = 'http://'+ nurl[2] + '/u/' + nurl[4]
     retList = []
     sts, data = self.cm.getPage(url)
     if not sts: return retList
     match = re.compile('var _src = {(.+?)};', re.DOTALL).findall(data)
     if len(match) > 0:
         match2 = re.compile("\t'(.+?)': (.+?),?\n").findall(match[0])
         for num, item in match2[::-1]:
             if item != '""':
                 parts = re.compile('"(.*?)"').findall(item)
                 linkVideo = ''.join(parts)
                 if linkVideo.find("http://c.wrzuta.pl/wht") == -1:
                     retList.append({'name': num, 'url': linkVideo})
                     
     maxRes = int(config.plugins.iptvplayer.wrzutaDefaultformat.value) * 1.1
     def __getLinkQuality( itemLink ):
         return int(itemLink['name'])
     obj = CSelOneLink(retList, __getLinkQuality, maxRes)
     if config.plugins.iptvplayer.wrzutaUseDF.value:
         retList = obj.getOneLink()
     else: retList = obj.getSortedLinks()
     return retList
Ejemplo n.º 3
0
 def getLinksForVideo(self, cItem):
     printDBG("TVJWORG.getLinksForVideo [%s]" % cItem)
     urlTab = []
     
     try:
         tmpTab = cItem.get('files', [])
         for item in tmpTab:
             try:
                 linkVideo = item['progressiveDownloadURL']
                 linkVideo = urlparser.decorateUrl(linkVideo, {'Referer': 'http://tv.jw.org/'})
                 urlTab.append({'name':item['label'], 'url': linkVideo, 'need_resolve':0})
             except Exception:
                 printExc()
             
         if 1 < len(urlTab):
             error = False
             max_bitrate = int(config.plugins.iptvplayer.tvjworg_default_format.value)
             def __getLinkQuality( itemLink ):
                 try: 
                     return int(itemLink['name'][0:-1])
                 except Exception:
                     error = True
                     return 0
             oneLink = CSelOneLink(urlTab, __getLinkQuality, max_bitrate)
             if not error and config.plugins.iptvplayer.tvjworg_use_df.value:
                 urlTab = oneLink.getOneLink()
             else:
                 urlTab = oneLink.getSortedLinks()
     except Exception:
         printExc()
     
     return urlTab
Ejemplo n.º 4
0
    def getVideoLinks(self, url):
        printDBG('WRZUTA.getVideoLinks')
        nurl = url.split("/")
        url = 'http://' + nurl[2] + '/u/' + nurl[4]
        retList = []
        sts, data = self.cm.getPage(url)
        if not sts: return retList
        match = re.compile('var _src = {(.+?)};', re.DOTALL).findall(data)
        if len(match) > 0:
            match2 = re.compile("\t'(.+?)': (.+?),?\n").findall(match[0])
            for num, item in match2[::-1]:
                if item != '""':
                    parts = re.compile('"(.*?)"').findall(item)
                    linkVideo = ''.join(parts)
                    if linkVideo.find("http://c.wrzuta.pl/wht") == -1:
                        retList.append({'name': num, 'url': linkVideo})

        maxRes = int(config.plugins.iptvplayer.wrzutaDefaultformat.value) * 1.1

        def __getLinkQuality(itemLink):
            return int(itemLink['name'])

        obj = CSelOneLink(retList, __getLinkQuality, maxRes)
        if config.plugins.iptvplayer.wrzutaUseDF.value:
            retList = obj.getOneLink()
        else:
            retList = obj.getSortedLinks()
        return retList
Ejemplo n.º 5
0
 def _getVideoLink(data, FORMATS):
     videoTab = []
     for item in data['formats']:
         if item['mimeType'] in FORMATS.keys():
             formatType = FORMATS[item['mimeType']].encode('utf-8')
             format = self.REAL_FORMATS.get(formatType, '')
             name = self.getFormatFromBitrate( str(item['totalBitrate']) ) + '\t ' + formatType
             url = item['url'].encode('utf-8')
             if 'm3u8' == formatType:
                 videoTab.extend( getDirectM3U8Playlist(url) )
             else:
                 meta = {'iptv_format':format}
                 if config.plugins.iptvplayer.tvpVodProxyEnable.value:
                     meta['http_proxy'] = config.plugins.iptvplayer.proxyurl.value
                 videoTab.append( {'name' : name, 'bitrate': str(item['totalBitrate']), 'url' : self.up.decorateUrl(url, meta) })
     if 1 < len(videoTab):
         max_bitrate = int(config.plugins.iptvplayer.tvpVodDefaultformat.value)
         def __getLinkQuality( itemLink ):
             return int(itemLink['bitrate'])
         oneLink = CSelOneLink(videoTab, __getLinkQuality, max_bitrate)
         if config.plugins.iptvplayer.tvpVodUseDF.value:
             videoTab = oneLink.getOneLink()
         else:
             videoTab = oneLink.getSortedLinks()
     return videoTab
Ejemplo n.º 6
0
    def getLinksForVideo(self, cItem):
        asset_id = str(cItem.get('object_id', ''))
        url = self._getFullUrl(cItem.get('url', ''))
        
        if 'tvpstream.tvp.pl' in url:
            sts, data = self.cm.getPage(url)
            if not sts: return []
            
            hlsUrl = self.cm.ph.getSearchGroups(data, '''['"](http[^'^"]*?\.m3u8[^'^"]*?)['"]''')[0]
            if '' != hlsUrl:
                videoTab = getDirectM3U8Playlist(hlsUrl, checkExt=False, variantCheck=False)
                if 1 < len(videoTab):
                    max_bitrate = int(config.plugins.iptvplayer.tvpVodDefaultformat.value)
                    def __getLinkQuality( itemLink ):
                        if 'width' in itemLink and 'height' in itemLink:
                            bitrate = self.getBitrateFromFormat('%sx%s' % (itemLink['width'], itemLink['height']))
                            if bitrate != 0: return bitrate
                        return int(itemLink['bitrate'])
                    oneLink = CSelOneLink(videoTab, __getLinkQuality, max_bitrate)
                    if config.plugins.iptvplayer.tvpVodUseDF.value:
                        videoTab = oneLink.getOneLink()
                    else:
                        videoTab = oneLink.getSortedLinks()
                if 1 <= len(videoTab):
                    return videoTab
            
        if '' == asset_id:
            asset_id = self.getObjectID(url)

        return self.getVideoLink(asset_id)
            def _getVideoLink(data, FORMATS):
                videoTab = []
                for item in data['formats']:
                    if item['mimeType'] in FORMATS.keys():
                        formatType = FORMATS[item['mimeType']].encode('utf-8')
                        name = self.getFormatFromBitrate(
                            str(item['totalBitrate'])) + '\t ' + formatType
                        url = item['url'].encode('utf-8')
                        if 'm3u8' == formatType:
                            videoTab.extend(getDirectM3U8Playlist(url))
                        else:
                            videoTab.append({
                                'name':
                                name,
                                'bitrate':
                                str(item['totalBitrate']),
                                'url':
                                url
                            })
                if 1 < len(videoTab):
                    max_bitrate = int(
                        config.plugins.iptvplayer.tvpVodDefaultformat.value)

                    def __getLinkQuality(itemLink):
                        return int(itemLink['bitrate'])

                    oneLink = CSelOneLink(videoTab, __getLinkQuality,
                                          max_bitrate)
                    if config.plugins.iptvplayer.tvpVodUseDF.value:
                        videoTab = oneLink.getOneLink()
                    else:
                        videoTab = oneLink.getSortedLinks()
                return videoTab
Ejemplo n.º 8
0
 def _sortVideoLinks(videoTab):
     if 1 < len(videoTab):
         max_bitrate = int(config.plugins.iptvplayer.tvpVodDefaultformat.value)
         def __getLinkQuality( itemLink ):
             if 'width' in itemLink and 'height' in itemLink:
                 bitrate = self.getBitrateFromFormat('%sx%s' % (itemLink['width'], itemLink['height']))
                 if bitrate != 0: return bitrate
             try: return int(itemLink['bitrate'])
             except Exception: return 0
         oneLink = CSelOneLink(videoTab, __getLinkQuality, max_bitrate)
         videoTab = oneLink.getSortedLinks()
     return videoTab
Ejemplo n.º 9
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
Ejemplo n.º 10
0
 def getLinksForVideo(self, cItem):
     printDBG("WRealu24TV.getLinksForVideo [%s]" % cItem)
     retTab = []
     hlsTab = []
     
     sts, data = self.getPage(cItem['url'])
     if not sts: return
     
     data = re.sub("<!--[\s\S]*?-->", "", data)
     cookieHeader = self.cm.getCookieHeader(self.COOKIE_FILE)
     
     data = self.cm.ph.getDataBeetwenMarkers(data, '<video', '</video>')[1]
     if 'document.write(' in data:
         jscode = ['var document = {};document.write=function(txt){print(txt);}']
         tmp = self.cm.ph.getAllItemsBeetwenNodes(data, ('<script', '>'), ('</script', '>'), False)
         for item in tmp:
             jscode.append(item)
         jscode = '\n'.join(jscode)
         ret = js_execute( jscode )
         if ret['sts'] and 0 == ret['code']:
             data = ret['data'].strip()
     
     data = self.cm.ph.getAllItemsBeetwenMarkers(data, '<source', '>')
     printDBG(data)
     for item in data:
         url = self.getFullUrl(self.cm.ph.getSearchGroups(item, '''src=['"]([^'^"]+?)['"]''')[0])
         if not self.cm.isValidUrl(url): continue
         type = self.cm.ph.getSearchGroups(item, '''type=['"]([^'^"]+?)['"]''')[0].lower()
         label = self.cm.ph.getSearchGroups(item, '''label=['"]([^'^"]+?)['"]''')[0]
         res = self.cm.ph.getSearchGroups(item, '''res=['"]([^'^"]+?)['"]''')[0]
         if label == '': label = res
         
         if 'mp4' in type:
             url = self.up.decorateUrl(url, {'Cookie':cookieHeader, 'User-Agent':self.USER_AGENT, 'Referer':cItem['url']})
             retTab.append({'name':label, 'url':url, 'res':res, 'need_resolve':0})
         elif 'mpegurl' in type:
             url = self.up.decorateUrl(url, {'iptv_proto':'m3u8', 'Origin':self.up.getDomain(cItem['url'], False), 'Cookie':cookieHeader, 'User-Agent':self.USER_AGENT, 'Referer':cItem['url']}) 
             hlsTab.extend(getDirectM3U8Playlist(url, checkContent=True, sortWithMaxBitrate=999999999))
         else:
             printDBG("Unknown source: [%s]" % item)
     
     if 1 < len(retTab):
         def __getLinkQuality( itemLink ):
             try: return int(itemLink['res'])
             except Exception: return 0
         oneLink = CSelOneLink(retTab, __getLinkQuality, 999999999)
         retTab = oneLink.getSortedLinks()
     
     retTab.extend(hlsTab)
     return retTab
Ejemplo n.º 11
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
Ejemplo n.º 12
0
            def _getVideoLink(data, FORMATS):
                videoTab = []
                for item in data['formats']:
                    if item['mimeType'] in FORMATS.keys():
                        formatType = FORMATS[item['mimeType']].encode('utf-8')
                        format = self.REAL_FORMATS.get(formatType, '')
                        name = self.getFormatFromBitrate(
                            str(item['totalBitrate'])) + '\t ' + formatType
                        url = item['url'].encode('utf-8')
                        if 'm3u8' == formatType:
                            videoTab.extend(
                                getDirectM3U8Playlist(url,
                                                      checkExt=False,
                                                      variantCheck=False))
                        else:
                            meta = {'iptv_format': format}
                            if config.plugins.iptvplayer.tvpVodProxyEnable.value:
                                meta[
                                    'http_proxy'] = config.plugins.iptvplayer.proxyurl.value
                            videoTab.append({
                                'name':
                                name,
                                'bitrate':
                                str(item['totalBitrate']),
                                'url':
                                self.up.decorateUrl(url, meta)
                            })
                if 1 < len(videoTab):
                    max_bitrate = int(
                        config.plugins.iptvplayer.tvpVodDefaultformat.value)

                    def __getLinkQuality(itemLink):
                        if 'with' in itemLink and 'heigth' in itemLink:
                            bitrate = self.getBitrateFromFormat(
                                '%sx%s' %
                                (itemLink['with'], itemLink['heigth']))
                            if bitrate != 0: return bitrate
                        return int(itemLink['bitrate'])

                    oneLink = CSelOneLink(videoTab, __getLinkQuality,
                                          max_bitrate)
                    if config.plugins.iptvplayer.tvpVodUseDF.value:
                        videoTab = oneLink.getOneLink()
                    else:
                        videoTab = oneLink.getSortedLinks()
                return videoTab
Ejemplo n.º 13
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 = []
        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}
            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
Ejemplo n.º 14
0
    def getLinksForVideo(self, cItem):
        printDBG("TvGryPL.getLinksForVideo [%s]" % cItem)
        allLinksTab = []
        urlTab = []

        rm(self.COOKIE_FILE)

        sts, data = self.getPage(
            cItem['url'], self.defaultParams
        )  #{'use_cookie':True, 'cookie_items':{'agegate':1}})
        if not sts: return urlTab

        ageMarker = '<div class="player-AGEGATE">'
        if ageMarker in data:
            tmp = self.cm.ph.getSearchGroups(
                config.plugins.iptvplayer.tvgrypl_date_of_birth.value,
                '''([0-9]{4})[-]?([0-9][0-9]?)[-]?([0-9][0-9]?)''', 3)
            printDBG(">>>>>YEAR[%s] MONTH[%s] DAY[%s]" %
                     (tmp[0], tmp[1], tmp[2]))
            if '' != tmp[0] and '' != tmp[1] and '' != tmp[2]:
                urlParams = dict(self.defaultParams)
                urlParams['header'] = dict(self.AJAX_HEADER)
                urlParams['header']['Referer'] = cItem['url']

                sts, data = self.getPage('https://tvgry.pl/ajax/agegate.asp',
                                         urlParams, {
                                             'day': int(tmp[2]),
                                             'month': int(tmp[1]),
                                             'year': int(tmp[0])
                                         })
                if not sts: return []

                sts, data = self.getPage(cItem['url'], self.defaultParams)
                if not sts: return urlTab

                if ageMarker in data:
                    SetIPTVPlayerLastHostError(
                        "Twój wiek nie został poprawnie zweryfikowany przez serwis http://tvgry.pl/.\nSprawdź ustawioną datę urodzenia w konfiguracji hosta."
                    )
            else:
                SetIPTVPlayerLastHostError(
                    "Wprowadź datę urodzenia w konfiguracji hosta - wymagane przez serwis http://tvgry.pl/."
                )

        url = self.cm.ph.getSearchGroups(
            data, '''<iframe[^>]+?src=['"]([^"^']+?)['"]''', 1, True)[0]
        if self.cm.isValidUrl(url):
            allLinksTab = self.up.getVideoLinkExt(url)

        urlIDS = []
        urlTemplate = ''
        data = self.cm.ph.getDataBeetwenMarkers(data, 'sources:', ']')[1]
        data = self.cm.ph.getAllItemsBeetwenMarkers(data, '{', '}')
        for item in data:
            url = self.cm.ph.getSearchGroups(
                item, '''['"]?file['"]?\s*:\s*['"]([^'^"]+?)['"]''')[0]
            name = self.cm.ph.getSearchGroups(
                item, '''['"]?label['"]?\s*:\s*['"]([^'^"]+?)['"]''')[0]
            if self.cm.isValidUrl(url):
                id = self.cm.ph.getSearchGroups(url, '''(/[0-9]+_)[0-9]+''')[0]
                if id != '' and id not in urlIDS:
                    urlIDS.append(id)
                    if urlTemplate == '': urlTemplate = url.replace(id, '{0}')

                q = ""
                if '/500_' in url or "Mobile" in url:
                    q = 'MOB'
                elif '/750_' in url or "SD" in url:
                    q = 'SD'
                elif '/1280_' in url or "720p" in url:
                    q = 'HD'
                if q != '':
                    urlTab.append({
                        'name':
                        name,
                        'url':
                        strwithmeta(url, {"Range": "bytes=0-"}),
                        'q':
                        q,
                        'need_resolve':
                        0
                    })

        if urlTemplate != '':
            params = dict(self.defaultParams)
            params['header'] = dict(params['header'])
            params['header']['Range'] = "bytes=0-"
            params['max_data_size'] = 0
            params['header'].pop('Accept', None)
            for item in [('/500_', 'MOB'), ('/750_', 'SD'), ('/1280_', 'HD')]:
                if item[0] in urlIDS: continue
                url = urlTemplate.format(item[0])
                sts = self.cm.getPage(url, params)[0]
                if sts and 'mp4' in self.cm.meta.get('content-type',
                                                     '').lower():
                    urlTab.append({
                        'name':
                        item[1],
                        'url':
                        strwithmeta(url, {"Range": "bytes=0-"}),
                        'q':
                        item[1],
                        'need_resolve':
                        0
                    })

        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()

        if 0 == len(urlTab):
            return allLinksTab

        return urlTab
Ejemplo n.º 15
0
    def getLinksForVideo(self, cItem):
        printDBG("FokusTV.getLinksForVideo [%s]" % cItem)
        urlTab = []

        url = cItem['url']
        sts, data = self.getPage(url)
        if not sts: return []

        if url.endswith('/player'):
            tab = ['fokustv-p/stream1']
            data = self.cm.ph.getDataBeetwenMarkers(data,
                                                    '$.post(',
                                                    'function',
                                                    withMarkers=False)[1]
            secureUri = self.cm.ph.getSearchGroups(
                data, '''(https?://[^'^"]+?)['"]''')[0]
            streamUri = self.cm.ph.getSearchGroups(
                data, '''streamUri['"\s]*?:\s*?['"]([^'^"]+?)['"]''')[0]

            if secureUri == '':
                secureUri = 'https://api.stream.smcdn.pl/api/secureToken.php'
            elif streamUri not in tab:
                tab.insert(0, streamUri)

            for streamUri in tab:
                sts, url = self.getPage(secureUri,
                                        post_data={'streamUri': streamUri})
                if not sts: continue

                if self.cm.isValidUrl(url):
                    data = getDirectM3U8Playlist(url,
                                                 checkExt=True,
                                                 checkContent=True)
                    for item in data:
                        item['url'] = strwithmeta(item['url'], {
                            'iptv_proto': 'm3u8',
                            'iptv_livestream': True
                        })
                        urlTab.append(item)
        else:
            data = self.cm.ph.getDataBeetwenMarkers(data, '<video',
                                                    '</video>')[1]
            data = self.cm.ph.getAllItemsBeetwenMarkers(
                data, '<source ', '>', False, False)
            for item in data:
                url = self.cm.ph.getSearchGroups(
                    item,
                    '''src=['"]([^"^']+?)['"]''')[0].replace('&amp;', '&')
                if url.startswith('//'):
                    url = 'http:' + url
                if not url.startswith('http'):
                    continue

                if 'video/mp4' in item:
                    type = self.cm.ph.getSearchGroups(
                        item, '''type=['"]([^"^']+?)['"]''')[0]
                    res = self.cm.ph.getSearchGroups(
                        item, '''res=['"]([^"^']+?)['"]''')[0]
                    label = self.cm.ph.getSearchGroups(
                        item, '''label=['"]([^"^']+?)['"]''')[0]
                    if label == '': label = res
                    if label == '': label = type
                    url = strwithmeta(url, {
                        'Referer': cItem['url'],
                        'User-Agent': self.USER_AGENT
                    })
                    urlTab.append({'name': '{0}'.format(label), 'url': url})
                elif 'mpegurl' in item:
                    url = strwithmeta(
                        url, {
                            'iptv_proto': 'm3u8',
                            'Referer': cItem['url'],
                            'Origin': self.up.getDomain(cItem['url'], False),
                            'User-Agent': self.USER_AGENT
                        })
                    tmpTab = getDirectM3U8Playlist(url,
                                                   checkExt=True,
                                                   checkContent=True)
                    for idx in range(len(tmpTab)):
                        tmpTab[idx]['url'].meta['iptv_proto'] = 'm3u8'
                    urlTab.extend(tmpTab)

        if 1 < len(urlTab):
            maxQuality = int(
                config.plugins.iptvplayer.fokustv_format.value) + 20

            def __getLinkQuality(itemLink):
                try:
                    return int(itemLink['with'])
                except Exception:
                    return 0

            oneLink = CSelOneLink(urlTab, __getLinkQuality, maxQuality)
            if config.plugins.iptvplayer.fokustv_df.value:
                urlTab = oneLink.getOneLink()
            else:
                urlTab = oneLink.getSortedLinks()

        return urlTab
Ejemplo n.º 16
0
    def getVideoLink(self, cItem):
        printDBG("VideoStarApi.getVideoLink")
        urlsTab = []

        idx = cItem.get('priv_idx', -1)
        if idx < 0 or idx >= len(self.cacheChannelList):
            return urlsTab

        vidItem = self.cacheChannelList[idx]
        formatId = config.plugins.iptvplayer.videostar_streamprotocol.value
        tries = 0
        while True:
            tries += 1
            try:
                if self.loggedIn:
                    url = 'v1/channel/%s?format_id=%s&device_type=android_tv' % (
                        vidItem['id'], formatId)
                else:
                    url = 'v1/guest/channel/%s?format_id=%s&device_type=android_tv' % (
                        vidItem['id'], formatId)
                url = self.getFullUrl(url, 'api')
                sts, data = self.cm.getPage(url, self.defaultParams)
                printDBG(data)
                if not sts and not self.loggedIn and tries == 1:
                    rm(self.COOKIE_FILE)
                    #                    self.doLogin('guest', 'guest')
                    sts, data = self.cm.getPage(
                        self.getFullUrl('/static/guest/channels/list/web.json',
                                        'static'), self.defaultParams)
                    if sts:
                        continue

                if not sts:
                    break
                data = json_loads(data)
                if data['data'] != None:
                    for item in data['data']['stream_channel']['streams']:
                        if formatId == '2':
                            if 'hls' in item['type']:
                                hslUrl = item['url'][0]  # add here random
                                urlsTab.extend(
                                    getDirectM3U8Playlist(
                                        hslUrl,
                                        checkExt=False,
                                        cookieParams=self.defaultParams,
                                        checkContent=True))
                        elif formatId in ['3', '4']:
                            if 'dash' in item['type']:
                                dashUrl = item['url'][0]  # add here random
                                urlsTab.extend(
                                    getMPDLinksWithMeta(
                                        dashUrl,
                                        checkExt=False,
                                        cookieParams=self.defaultParams))
                elif data['_meta'] != None:
                    info = data['_meta']['error']['info']
                    message = []
                    message.append(
                        'Oglądasz już kanał %s na urządeniu %s o adresie: %s.'
                        % (info['channel_name'], info['device'],
                           info['user_ip']))
                    message.append(
                        'W WP Pilocie nie możesz oglądać większej liczby kanałów jednocześnie.'
                    )
                    message.append('Czy chcesz kontynować tutaj?')
                    arg1 = self.sessionEx.waitForFinishOpen(
                        MessageBox,
                        '\n'.join(message),
                        type=MessageBox.TYPE_YESNO)
                    if arg1:
                        url = self.getFullUrl('v1/channels/close', 'api')
                        paramsUrl = dict(self.defaultParams)
                        paramsUrl['header'] = dict(paramsUrl['header'])
                        paramsUrl['header']['Referer'] = self.getFullUrl('tv')
                        paramsUrl['header']['Origin'] = self.MAIN_URL[:-1]
                        paramsUrl['header'][
                            'content-type'] = 'application/json;charset=UTF-8'
                        paramsUrl['raw_post_data'] = True
                        sts, data = self.cm.getPage(
                            url, paramsUrl, '{"channelId":"%s","t":"%s"}' %
                            (info['channel_id'], self.userToken))
                        printDBG("==================== token1[%s] token2[%s]" %
                                 (self.userToken, info['stream_token']))
                        printDBG(data)
                        printDBG("====================")
                        continue

            except Exception:
                printExc()
            break

        if len(urlsTab):
            cookieHeader = self.cm.getCookieHeader(self.COOKIE_FILE)
            for idx in range(len(urlsTab)):
                urlsTab[idx]['url'] = strwithmeta(urlsTab[idx]['url'], {
                    'Cookie': cookieHeader,
                    'User-Agent': self.USER_AGENT
                })

        if len(urlsTab):
            maxBitrate = int(
                config.plugins.iptvplayer.videostar_defquality.value) * 1.3

            def __getLinkQuality(itemLink):
                try:
                    if 'bitrate' in itemLink:
                        return int(itemLink['bitrate'])
                    elif 'bandwidth' in itemLink:
                        return int(itemLink['bandwidth'])
                except Exception:
                    printExc()
                return 0

            oneLink = CSelOneLink(urlsTab, __getLinkQuality, maxBitrate)
            urlsTab = oneLink.getSortedLinks()
            if config.plugins.iptvplayer.videostar_use_defquality.value:
                urlsTab = [urlsTab[0]]

        return urlsTab