def getDirectM3U8Playlist(M3U8Url, checkExt=True, variantCheck=True, cookieParams={}): if checkExt and not M3U8Url.split('?')[0].endswith('.m3u8'): return [] cm = common() meta = strwithmeta(M3U8Url).meta params, postData = cm.getParamsFromUrlWithMeta(M3U8Url) params.update(cookieParams) retPlaylists = [] try: finallM3U8Url = meta.get('iptv_m3u8_custom_base_link', '') if '' == finallM3U8Url: params['return_data'] = False sts, response = cm.getPage(M3U8Url, params, postData) finallM3U8Url = response.geturl() data = response.read().strip() response.close() else: sts, data = cm.getPage(M3U8Url, params, postData) data = data.strip() m3u8Obj = m3u8.inits(data, finallM3U8Url) if m3u8Obj.is_variant: for playlist in m3u8Obj.playlists: item = {} if not variantCheck or playlist.absolute_uri.split('?')[-1].endswith('.m3u8'): meta.update({'iptv_proto':'m3u8', 'iptv_bitrate':playlist.stream_info.bandwidth}) item['url'] = strwithmeta(playlist.absolute_uri, meta) else: meta.pop('iptv_proto', None) item['url'] = decorateUrl(playlist.absolute_uri, meta) item['bitrate'] = playlist.stream_info.bandwidth if None != playlist.stream_info.resolution: item['with'] = playlist.stream_info.resolution[0] item['heigth'] = playlist.stream_info.resolution[1] else: item['with'] = 0 item['heigth'] = 0 item['codec'] = playlist.stream_info.codecs item['name'] = "bitrate: %s res: %dx%d kodek: %s" % ( item['bitrate'], \ item['with'], \ item['heigth'], \ item['codec'] ) retPlaylists.append(item) else: item = {'name':'m3u8', 'url':M3U8Url, 'codec':'unknown', 'with':0, 'heigth':0, 'bitrate':'unknown'} retPlaylists.append(item) except: printExc() return retPlaylists
def pythonUnescape(data): sourceCode = "retData = '''%s'''" % data try: code = compile(sourceCode, '', 'exec') except: printExc('pythonUnescape compile algo code EXCEPTION') return '' vGlobals = {"__builtins__": None, 'string': string} vLocals = { 'paramsTouple': None } try: exec( code, vGlobals, vLocals ) except: printExc('pythonUnescape exec code EXCEPTION') return '' return vLocals['retData']
def pythonUnescape(data): sourceCode = "retData = '''%s'''" % data try: code = compile(sourceCode, '', 'exec') except: printExc('pythonUnescape compile algo code EXCEPTION') return '' vGlobals = {"__builtins__": None, 'string': string} vLocals = {'paramsTouple': None} try: exec(code, vGlobals, vLocals) except: printExc('pythonUnescape exec code EXCEPTION') return '' return vLocals['retData']
def unpackJS(data, decryptionFun, addCode=''): paramsCode = addCode paramsCode += 'paramsTouple = (' + data + ')' try: paramsAlgoObj = compile(paramsCode, '', 'exec') except: printExc('unpackJS compile algo code EXCEPTION') return '' vGlobals = { "__builtins__": None, 'string': string, 'decodeURIComponent': urllib.unquote, 'unescape': urllib.unquote } vLocals = {'paramsTouple': None} try: exec(paramsAlgoObj, vGlobals, vLocals) except: printExc('unpackJS exec code EXCEPTION') return '' # decrypt JS Player params try: return decryptionFun(*vLocals['paramsTouple']) except: printExc('decryptPlayerParams EXCEPTION') return ''
def unpackJS(data, decryptionFun, addCode=''): paramsCode = addCode paramsCode += 'paramsTouple = (' + data + ')' try: paramsAlgoObj = compile(paramsCode, '', 'exec') except: printExc('unpackJS compile algo code EXCEPTION') return '' vGlobals = {"__builtins__": None, 'string': string, 'decodeURIComponent':urllib.unquote, 'unescape':urllib.unquote} vLocals = { 'paramsTouple': None } try: exec( paramsAlgoObj, vGlobals, vLocals ) except: printExc('unpackJS exec code EXCEPTION') return '' # decrypt JS Player params try: return decryptionFun(*vLocals['paramsTouple']) except: printExc('decryptPlayerParams EXCEPTION') return ''
def getDirectM3U8Playlist(M3U8Url, checkExt=True, variantCheck=True, cookieParams={}): if checkExt and not M3U8Url.split('?')[0].endswith('.m3u8'): return [] cm = common() meta = strwithmeta(M3U8Url).meta params, postData = cm.getParamsFromUrlWithMeta(M3U8Url) params.update(cookieParams) retPlaylists = [] try: finallM3U8Url = meta.get('iptv_m3u8_custom_base_link', '') if '' == finallM3U8Url: params['return_data'] = False sts, response = cm.getPage(M3U8Url, params, postData) finallM3U8Url = response.geturl() data = response.read().strip() response.close() else: sts, data = cm.getPage(M3U8Url, params, postData) data = data.strip() m3u8Obj = m3u8.inits(data, finallM3U8Url) if m3u8Obj.is_variant: for playlist in m3u8Obj.playlists: item = {} if not variantCheck or playlist.absolute_uri.split( '?')[-1].endswith('.m3u8'): meta.update({ 'iptv_proto': 'm3u8', 'iptv_bitrate': playlist.stream_info.bandwidth }) item['url'] = strwithmeta(playlist.absolute_uri, meta) else: meta.pop('iptv_proto', None) item['url'] = decorateUrl(playlist.absolute_uri, meta) item['bitrate'] = playlist.stream_info.bandwidth if None != playlist.stream_info.resolution: item['with'] = playlist.stream_info.resolution[0] item['heigth'] = playlist.stream_info.resolution[1] else: item['with'] = 0 item['heigth'] = 0 item['codec'] = playlist.stream_info.codecs item['name'] = "bitrate: %s res: %dx%d kodek: %s" % ( item['bitrate'], \ item['with'], \ item['heigth'], \ item['codec'] ) retPlaylists.append(item) else: item = { 'name': 'm3u8', 'url': M3U8Url, 'codec': 'unknown', 'with': 0, 'heigth': 0, 'bitrate': 'unknown' } retPlaylists.append(item) except: printExc() return retPlaylists