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}]
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)
def getResolvedVideoLink(self, videoUrl): printDBG("BilaSportPwApi.getResolvedVideoLink [%s]" % videoUrl) urlsTab = [] meta = strwithmeta(videoUrl).meta baseUrl = self.cm.getBaseUrl(videoUrl.meta.get('Referer', '')) scriptUrl = videoUrl.meta.get('priv_script_url', '') if scriptUrl: sts, data = self.getPage(scriptUrl) if not sts: return [] hash = '/tmp/%s' % hexlify(md5(data).digest()) data = 'btoa=function(t){return Duktape.enc("base64",t)},XMLHttpRequest=function(){},XMLHttpRequest.prototype.open=function(t,e,n,o,p){print(str(e))};' + data + 'tmp = new XMLHttpRequest();' try: with open(hash + '.js', 'w') as f: f.write(data) except Exception: printExc() return [] duktape_execute('-c "%s.byte" "%s.js" ' % (hash, hash)) rm(hash + '.js') scriptUrl = hash sts, data = self.getPage(videoUrl) if not sts or '#EXTM3U' not in data: return urlsTab keyUrl = set( re.compile('''#EXT\-X\-KEY.*?URI=['"](https?://[^"]+?)['"]'''). findall(data)) if len(keyUrl): keyUrl = keyUrl.pop() proto = keyUrl.split('://', 1)[0] pyCmd = GetPyScriptCmd( 'livesports') + ' "%s" "%s" "%s" "%s" "%s" "%s" "%s" ' % ( config.plugins.iptvplayer.bilasportpw_port.value, videoUrl, baseUrl, scriptUrl, self.HTTP_HEADER['User-Agent'], self.COOKIE_FILE, GetDukPath()) meta = {'iptv_proto': 'em3u8'} meta['iptv_m3u8_key_uri_replace_old'] = '%s://' % proto meta[ 'iptv_m3u8_key_uri_replace_new'] = 'http://127.0.0.1:{0}/{1}/'.format( config.plugins.iptvplayer.bilasportpw_port.value, proto) meta['iptv_refresh_cmd'] = pyCmd videoUrl = urlparser.decorateUrl("ext://url/" + videoUrl, meta) else: videoUrl = urlparser.decorateUrl(videoUrl, meta) return [{'name': 'direct', 'url': videoUrl}]
def _detectCmdBuilder(path): cmd = GetPyScriptCmd( 'subparserversion') + ' "%s" ' % resolveFilename( SCOPE_PLUGINS, 'Extensions/IPTVPlayer/libs/') return cmd
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