[iqiyi] Cache encryption keys
authorYen Chi Hsuan <yan12125@gmail.com>
Sat, 6 Jun 2015 18:47:36 +0000 (02:47 +0800)
committerYen Chi Hsuan <yan12125@gmail.com>
Sat, 6 Jun 2015 18:47:36 +0000 (02:47 +0800)
youtube_dl/extractor/iqiyi.py

index 15481b84b71760a6e3a3e5cf519b86029169c8be..9106dd07491c18b6521ad3894d16ea56238aa9aa 100644 (file)
@@ -3,6 +3,7 @@ from __future__ import unicode_literals
 
 import hashlib
 import math
+import os.path
 import random
 import re
 import time
@@ -11,7 +12,10 @@ import zlib
 
 from .common import InfoExtractor
 from ..compat import compat_urllib_parse
-from ..utils import ExtractorError
+from ..utils import (
+    ExtractorError,
+    url_basename,
+)
 
 
 class IqiyiIE(InfoExtractor):
@@ -207,12 +211,20 @@ class IqiyiIE(InfoExtractor):
         return raw_data
 
     def get_enc_key(self, swf_url, video_id):
+        filename, _ = os.path.splitext(url_basename(swf_url))
+        enc_key_json = self._downloader.cache.load('iqiyi-enc-key', filename)
+        if enc_key_json is not None:
+            return enc_key_json[0]
+
         req = self._request_webpage(
             swf_url, video_id, note='download swf content')
         cn = req.read()
         cn = zlib.decompress(cn[8:])
         pt = re.compile(b'MixerRemote\x08(?P<enc_key>.+?)\$&vv')
         enc_key = self._search_regex(pt, cn, 'enc_key').decode('utf8')
+
+        self._downloader.cache.store('iqiyi-enc-key', filename, [enc_key])
+
         return enc_key
 
     def _real_extract(self, url):