示例#1
0
    def getResolvedVideoLink(self, videoUrl):
        printDBG("MLBStreamTVApi.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.mlbstreamtv_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.mlbstreamtv_port.value, proto)
            meta['iptv_refresh_cmd'] = pyCmd

        videoUrl = self.up.decorateUrl("ext://url/" + videoUrl, meta)

        return [{'name': 'direct', 'url': videoUrl}]
示例#2
0
    def startExecution(self):
        login = config.plugins.iptvplayer.myjd_login.value
        password = config.plugins.iptvplayer.myjd_password.value
        jdname = config.plugins.iptvplayer.myjd_jdname.value

        captcha = {
            'siteKey': self.sitekey,
            'sameOrigin': True,
            'siteUrl': self.referer,
            'contextUrl': '/'.join(self.referer.split('/')[:3]),
            'boundToDomain': True,
            'stoken': None
        }
        try:
            captcha = base64.b64encode(json.dumps(captcha))
        except Exception:
            printExc()
        if getDebugMode() == '': debug = 0
        else: debug = 1

        cmd = GetPyScriptCmd('fakejd') + ' "%s" "%s" "%s" "%s" "%s" %d' % (
            GetPluginDir('libs/'), login, password, jdname, captcha, debug)

        self["console"].setText(_('JDownloader script execution'))

        self.workconsole['console'] = eConsoleAppContainer()
        self.workconsole['close_conn'] = eConnectCallback(
            self.workconsole['console'].appClosed, self._scriptClosed)
        self.workconsole['stderr_conn'] = eConnectCallback(
            self.workconsole['console'].stderrAvail, self._scriptStderrAvail)
        self.workconsole['stdout_conn'] = eConnectCallback(
            self.workconsole['console'].stdoutAvail, self._scriptStdoutAvail)
        self.workconsole["console"].execute(E2PrioFix(cmd, 0))
        printDBG(">>> EXEC CMD [%s]" % cmd)
示例#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}]
示例#4
0
 def _detectCmdBuilder(path):
     cmd = GetPyScriptCmd(
         'subparserversion') + ' "%s" ' % resolveFilename(
             SCOPE_PLUGINS, 'Extensions/IPTVPlayer/libs/')
     return cmd
示例#5
0
 def getVideoLink(self, cItem):
     printDBG("TelewizjadaNetApi.getVideoLink")
     url = cItem['url']
     sourceId = str(url.meta['id'])
     
     mainCon = {'url':self.mainConnectData.get('connect_to_live_url', ''), 'token':self.mainConnectData.get('connect_to_live_token', '')}
     
     sts, data = self.cm.getPage(cItem['url'], self.http_params)
     if not sts: return []
     
     params = dict(self.http_params)
     params['header'] = dict(params['header'])
     params['header']['Referer'] = cItem['url']
     params['header']['Origin']  = self.MAIN_URL[:-1]
     
     liveCon = {}
     url = self.mainConnectData.get('api_path', '') + '/live?wt=' + self.mainConnectData.get('wt', '')
     sts, data = self.cm.getPage(url, self.http_params2)
     if not sts: return []
     try:
         liveCon = byteify(json.loads(data))
     except Exception:
         printExc()
         return []
     
     url = self.mainConnectData.get('api_path', '') + "/play?id=%swatchToken=%s" % (sourceId, self.mainConnectData.get('wt', ''))
     sts, data = self.cm.getPage(url, self.http_params2)
     if not sts: return []
     
     try:
         def to_byte_array(inArray):
             import struct
             outArray = []
             for item in inArray:
                 outArray.append(struct.pack('>l', item))
             return ''.join(outArray)
         
         data = byteify(json.loads(data))
         ciphertext = to_byte_array(data['window']['encServers']['ciphertext']['words'])
         iv = to_byte_array(data['window']['encServers']['iv']['words'])
         key = to_byte_array(data['window']['encServers']['key']['words'])
         salt = to_byte_array(data['window']['encServers']['salt']['words'])
         
         tmp = self.cryptoJS_AES_decrypt(ciphertext, 'number-one', salt)
         printDBG(tmp)
         tmp = byteify(json.loads(tmp))
     
     except Exception:
         printExc()
         return []
     
     urlsTab = []
     try:
         if isinstance(tmp, list):
             tmp = tmp[0]
         
         if isinstance(tmp, dict):
             baseUrl1     = liveCon['url']
             streamToken1 = liveCon['token']
             baseUrl2     = tmp['server']
             streamToken2 = tmp['token']
             
             serverId = str(tmp['id'])
             
             printDBG("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
             printDBG(tmp)
             printDBG("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
             
             #def _getSocketIoUrl1(baseUrl, params):
             #    t1 = self.getTimestamp(time()*1000)
             
             t1 = self.getTimestamp(time()*1000)
             url = baseUrl1 + '/socket.io/?EIO=3&transport=polling&t=' + t1
             sts, data = self.cm.getPage(url, self.http_params2)
             if sts:
                 baseParams1 = data[data.find('{'):]
                 baseParams1 = byteify(json.loads(baseParams1))
                 printDBG("=========================================================")
                 printDBG([data])
             else:
                 baseParams1 = {'sid':''}
             printDBG(baseParams1)
             printDBG("=========================================================")
             
             t2 = self.getTimestamp(time()*1000)
             url = baseUrl2.replace(":8000",":8004") + '/socket.io/?EIO=3&transport=polling&t=' + t2
             sts, data = self.cm.getPage(url, self.http_params3)
             baseParams2 = data[data.find('{'):]
             baseParams2 = byteify(json.loads(baseParams2))
             printDBG("=========================================================")
             printDBG([data])
             printDBG(baseParams2)
             printDBG("=========================================================")
             
             #=====================
             t1 = self.getTimestamp(time()*1000)
             url = baseUrl1 + '/socket.io/?EIO=3&transport=polling&t={0}&sid={1}'.format(t1, baseParams1['sid'])
             sts, data = self.cm.getPage(url, self.http_params2)
             if sts:
                 printDBG("=========================================================")
                 printDBG(data.split('\x00\x02\xff'))
                 printDBG("=========================================================")
             
             t2 = self.getTimestamp(time()*1000)
             url = baseUrl2.replace(":8000",":8004") + '/socket.io/?EIO=3&transport=polling&t={0}&sid={1}'.format(t2, baseParams2['sid'])
             sts, data = self.cm.getPage(url, self.http_params3)
             printDBG("=========================================================")
             printDBG(data.split('\x00\x02\xff'))
             printDBG("=========================================================")
             
             #=====================
             #raw_post_data
             t1 = self.getTimestamp(time()*1000)
             url = baseUrl1 + '/socket.io/?EIO=3&transport=polling&t={0}&sid={1}'.format(t1, baseParams1['sid'])
             self.http_params2['raw_post_data'] = True
             sts, data = self.cm.getPage(url, self.http_params2, '92:42["authorize",{"token":"%s"}]' % streamToken1)
             printDBG("=========================================================")
             printDBG([data])
             printDBG("=========================================================")
                 
             if 0:
                 t1 = self.getTimestamp(time()*1000)
                 url = baseUrl1 + '/socket.io/?EIO=3&transport=polling&t={0}&sid={1}'.format(t1, baseParams1['sid'])
                 sts, data = self.cm.getPage(url, self.http_params2)
                 printDBG("=========================================================")
                 printDBG([data])
                 printDBG("=========================================================")
             
             #+++++
             t2 = self.getTimestamp(time()*1000)
             url = baseUrl2.replace(":8000",":8004") + '/socket.io/?EIO=3&transport=polling&t={0}&sid={1}'.format(t2, baseParams2['sid'])
             self.http_params3['raw_post_data'] = True
             sts, data = self.cm.getPage(url, self.http_params3, '82:42["authorize","%s"]' % streamToken2)
             printDBG("=========================================================")
             printDBG([data])
             printDBG("=========================================================")
             
             t2 = self.getTimestamp(time()*1000)
             url = baseUrl2.replace(":8000",":8004") + '/socket.io/?EIO=3&transport=polling&t={0}&sid={1}'.format(t2, baseParams2['sid'])
             sts, data = self.cm.getPage(url, self.http_params3)
             data = byteify( json.loads(data[data.find('42')+2:]) ) 
             stoken = data[1]['stoken']
             printDBG("=========================================================")
             printDBG([data])
             printDBG("=========================================================")
             
             n = sha256(serverId + '_' + sourceId + '_' + stoken + '_rabbit_foot').hexdigest()
             url = self.mainConnectData['api_path'] + '/request-stream' + "?token=" + streamToken2 + "&server=" + serverId + "&source=" + sourceId + "&cs=" + n
             sts, data = self.cm.getPage(url, self.http_params)
             data = byteify( json.loads(data) ) 
             streamId = str(data['id'])
             
             if 0:
                 t2 = self.getTimestamp(time()*1000)
                 url = baseUrl2.replace(":8000",":8004") + '/socket.io/?EIO=3&transport=polling&t={0}&sid={1}'.format(t2, baseParams2['sid'])
                 self.http_params3['raw_post_data'] = True
                 sts, data = self.cm.getPage(url, self.http_params3, '84:42["subscribe","%s"]' % streamId)
             
             wsUrl2 = baseUrl2.replace(":8000",":8004").replace('http://', 'ws://') + '/socket.io/?EIO=3&transport=websocket&sid={0}'.format(baseParams2['sid'])
             wsUrl1 = baseUrl1.replace('http://', 'ws://') + '/socket.io/?EIO=3&transport=websocket&sid={0}'.format(baseParams1['sid'])
             
             libsPath = GetPluginDir('libs/')
             
             pyCmd = GetPyScriptCmd('pierwszatv') + ' "%s" "%s" "%s" "%s" "%s" "%s" "%s" "%s" ' % (self.http_params['header']['User-Agent'], baseUrl2, wsUrl2, wsUrl1, stoken, streamId, libsPath, baseParams2['sid'])
             vidUrl = strwithmeta("ext://url/" + cItem['url'], {'iptv_proto':'em3u8', 'iptv_refresh_cmd':pyCmd, 'Referer':cItem['url'], 'User-Agent':self.http_params['header']['User-Agent']})
             
             printDBG("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
             printDBG(pyCmd)
             printDBG("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
             #return []
             return [{'name':'pierwsza_hls', 'url':vidUrl}]
         
     except Exception:
         printExc()
         return []
     
     return urlsTab