]> code.delx.au - youtube-cgi/commitdiff
fixed JS function finder
authorJames Bunton <jamesbunton@delx.net.au>
Fri, 20 Jun 2014 22:52:02 +0000 (08:52 +1000)
committerJames Bunton <jamesbunton@delx.net.au>
Fri, 20 Jun 2014 22:52:02 +0000 (08:52 +1000)
youtube.cgi

index fc10e08eeb21a4f5c6fbf37e3b1fc8ae51bb1de5..11d25382834538cca991e9ad4fe70c36d858aaec 100755 (executable)
@@ -84,9 +84,10 @@ def urlopen(url, offset=None):
 
     global referrer
     req = urllib2.Request(url)
-    if referrer:
+    if not referrer:
+        referrer = url
+    else:
         req.add_header("Referer", referrer)
-    referrer = url
 
     req.add_header("User-Agent", USER_AGENT)
 
@@ -141,9 +142,18 @@ def extract_function(output, script, func_name):
     for dep in deps:
         extract_function(output, script, dep)
 
+def find_func_name(script):
+    FUNC_NAME = R"([a-zA-Z0-9$]+)"
+    FUNC_PARAMS = R"(\([a-zA-Z]+\.s\))"
+    PATTERN = FUNC_NAME + FUNC_PARAMS + ";"
+
+    match = re.search(PATTERN, script)
+    func_name = match.groups()[0]
+    return func_name
+
 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]
+    func_name = find_func_name(script)
 
     codes = []
     extract_function(codes, script, func_name)