aboutsummaryrefslogtreecommitdiff
path: root/youtube_dl
diff options
context:
space:
mode:
authorYen Chi Hsuan <yan12125@gmail.com>2016-02-26 14:58:29 +0800
committerYen Chi Hsuan <yan12125@gmail.com>2016-02-26 14:58:29 +0800
commitf52354a88927eb66bcb1f603d2d91162b5bd2b5f (patch)
tree82c74cfcd7f572e5d70547035fbf62960b8114a0 /youtube_dl
parent59f898b7a72284efb994a8c6baee7771046226dd (diff)
downloadyoutube-dl-f52354a88927eb66bcb1f603d2d91162b5bd2b5f.tar.xz
[utils] Move codes for handling eval() from iqiyi.py
Diffstat (limited to 'youtube_dl')
-rw-r--r--youtube_dl/extractor/iqiyi.py24
-rw-r--r--youtube_dl/utils.py20
2 files changed, 22 insertions, 22 deletions
diff --git a/youtube_dl/extractor/iqiyi.py b/youtube_dl/extractor/iqiyi.py
index 76ecd55a4..2b3952210 100644
--- a/youtube_dl/extractor/iqiyi.py
+++ b/youtube_dl/extractor/iqiyi.py
@@ -18,7 +18,7 @@ from ..compat import (
compat_urllib_parse_urlparse,
)
from ..utils import (
- base_n,
+ decode_packed_codes,
ExtractorError,
ohdave_rsa_encrypt,
remove_start,
@@ -130,28 +130,8 @@ class IqiyiSDKInterpreter(object):
def __init__(self, sdk_code):
self.sdk_code = sdk_code
- def decode_eval_codes(self):
- self.sdk_code = self.sdk_code[5:-3]
-
- mobj = re.search(
- r"'([^']+)',62,(\d+),'([^']+)'\.split\('\|'\),[^,]+,{}",
- self.sdk_code)
- obfucasted_code, count, symbols = mobj.groups()
- count = int(count)
- symbols = symbols.split('|')
- symbol_table = {}
-
- while count:
- count -= 1
- b62count = base_n(count, 62)
- symbol_table[b62count] = symbols[count] or b62count
-
- self.sdk_code = re.sub(
- r'\b(\w+)\b', lambda mobj: symbol_table[mobj.group(0)],
- obfucasted_code)
-
def run(self, target, ip, timestamp):
- self.decode_eval_codes()
+ self.sdk_code = decode_packed_codes(self.sdk_code)
functions = re.findall(r'input=([a-zA-Z0-9]+)\(input', self.sdk_code)
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py
index 900e07a8e..fc7e2fb7f 100644
--- a/youtube_dl/utils.py
+++ b/youtube_dl/utils.py
@@ -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)