From: James Bunton Date: Thu, 8 Aug 2013 08:51:17 +0000 (+1000) Subject: grab all dependent JS functions for signature generation X-Git-Url: https://code.delx.au/youtube-cgi/commitdiff_plain/72632096a78cec42c319ffd6ed44171c855d3b16 grab all dependent JS functions for signature generation --- diff --git a/youtube.cgi b/youtube.cgi index 45c8574..7e76456 100755 --- a/youtube.cgi +++ b/youtube.cgi @@ -145,12 +145,23 @@ def get_player_config(doc): convert_from_old_itag(player_config) return player_config -def decode_signature(js_url, s): - script = urlopen(js_url).read() - func_name = re.search(R"\b([a-z]+)\([a-z]+\.s\);", script).groups()[0] +def extract_function(output, script, func_name): p1 = script.find("function " + func_name) p2 = script.find("}", p1) - func_block = script[p1:p2+1] + code = script[p1:p2+1] + output.append(code) + deps = re.findall(R"[^\.]\b([a-zA-Z]+)\(", code) + deps = set(deps) + deps.remove(func_name) + for dep in deps: + extract_function(output, script, dep) + +def decode_signature(js_url, s): + script = urlopen(js_url).read() + func_name = re.search(R"\b([a-zA-Z]+)\([a-zA-Z]+\.s\);", script).groups()[0] + + codes = [] + extract_function(codes, script, func_name) p = subprocess.Popen( "js", @@ -159,7 +170,8 @@ def decode_signature(js_url, s): stdin=subprocess.PIPE, stdout=subprocess.PIPE ) - p.stdin.write(func_block + "\n") + for code in codes: + p.stdin.write(code + "\n") p.stdin.write("console.log(%s('%s'));\n" % (func_name, s)) p.stdin.close()