X-Git-Url: https://code.delx.au/youtube-cgi/blobdiff_plain/f00fe255ad32e3d1fa209dfd86f76c8d5fd96101..ac7ebf5a8e4a43d9d2e7c250b79a7c2b7eed90d9:/youtube.cgi diff --git a/youtube.cgi b/youtube.cgi index eeb5fd2..dfd5d28 100755 --- a/youtube.cgi +++ b/youtube.cgi @@ -132,8 +132,8 @@ def get_player_config(doc): return json.loads(line[p1:p2]) def extract_js(script): - PREFIX = "(function(){" - SUFFIX = "})();\n" + PREFIX = "var _yt_player={};(function(g){var window=this;" + SUFFIX = ";})(_yt_player);\n" assert script.startswith(PREFIX) assert script.endswith(SUFFIX) @@ -158,30 +158,36 @@ def decode_signature(js_url, signature): "code": json.dumps(extract_js(script)), } p = subprocess.Popen( - "js", + "nodejs", shell=True, close_fds=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE ) js_decode_script = (""" - var vm = require("vm"); + var vm = require('vm'); var sandbox = { - window: { - location: {}, - history: { - pushState: function(){} - } + location: { + hash: '', + href: '', + protocol: 'http:' + }, + history: { + pushState: function(){} }, document: {}, - navigator: {}, + navigator: { + userAgent: '' + }, signature: %(signature)s, transformed_signature: null }; + sandbox.window = sandbox; - var execstring = ";transformed_signature = %(func_name)s(signature);"; - vm.runInNewContext(%(code)s + execstring, sandbox); + var code_string = %(code)s + ';'; + var exec_string = 'transformed_signature = %(func_name)s(signature);'; + vm.runInNewContext(code_string + exec_string, sandbox); console.log(sandbox.transformed_signature); """ % params)