[utils] Move codes for handling eval() from iqiyi.py
[youtube-dl] / youtube_dl / utils.py
index 900e07a8ec74f529e7bca0eec8b6bafb39ff5faf..fc7e2fb7f11620bd07c5ba90427170ceedd1a3a3 100644 (file)
@@ -2635,3 +2635,23 @@ def base_n(num, n, table=None):
         ret = table[num % n] + ret
         num = num // n
     return ret
+
+
+def decode_packed_codes(code):
+    mobj = re.search(
+        r"'([^']+)',(\d+),(\d+),'([^']+)'\.split\('\|'\),[^,]+,{}",
+        code)
+    obfucasted_code, base, count, symbols = mobj.groups()
+    base = int(base)
+    count = int(count)
+    symbols = symbols.split('|')
+    symbol_table = {}
+
+    while count:
+        count -= 1
+        base_n_count = base_n(count, base)
+        symbol_table[base_n_count] = symbols[count] or base_n_count
+
+    return re.sub(
+        r'\b(\w+)\b', lambda mobj: symbol_table[mobj.group(0)],
+        obfucasted_code)