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",
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()