[Letv] Fix test_Letv and test_Letv_1 failures in python 3
[youtube-dl] / youtube_dl / extractor / letv.py
index d5839263c8da99c38336b632d3728e39b96db66f..9ed81a1992acc8e527844e0242e6392abe37884f 100644 (file)
@@ -1,14 +1,21 @@
 # coding: utf-8
 from __future__ import unicode_literals
 
-import os.path
+import datetime
 import re
 import time
-import datetime
 
 from .common import InfoExtractor
-from ..compat import (compat_urlparse, compat_urllib_parse)
-from ..utils import (ExtractorError, parse_iso8601)
+from ..compat import (
+    compat_urllib_parse,
+    compat_urllib_request,
+    compat_urlparse,
+)
+from ..utils import (
+    determine_ext,
+    ExtractorError,
+    parse_iso8601,
+)
 
 
 class LetvIE(InfoExtractor):
@@ -33,18 +40,26 @@ class LetvIE(InfoExtractor):
             'title': '美人天下01',
             'description': 'md5:f88573d9d7225ada1359eaf0dbf8bcda',
         },
-        'expected_warnings': [
-            'publish time'
-        ]
+    }, {
+        'note': 'This video is available only in Mainland China, thus a proxy is needed',
+        'url': 'http://www.letv.com/ptv/vplay/1118082.html',
+        'md5': 'f80936fbe20fb2f58648e81386ff7927',
+        'info_dict': {
+            'id': '1118082',
+            'ext': 'mp4',
+            'title': '与龙共舞 完整版',
+            'description': 'md5:7506a5eeb1722bb9d4068f85024e3986',
+        },
+        'params': {
+            'cn_verification_proxy': 'http://proxy.uku.im:8888'
+        },
     }]
-    # http://www.letv.com/ptv/vplay/1118082.html
-    # This video is available only in Mainland China
 
     @staticmethod
     def urshift(val, n):
         return val >> n if val >= 0 else (val + 0x100000000) >> n
 
-    # ror() and calcTimeKey() are reversed from a embedded swf file in KLetvPlayer.swf
+    # ror() and calc_time_key() are reversed from a embedded swf file in KLetvPlayer.swf
     def ror(self, param1, param2):
         _loc3_ = 0
         while _loc3_ < param2:
@@ -52,7 +67,7 @@ class LetvIE(InfoExtractor):
             _loc3_ += 1
         return param1
 
-    def calcTimeKey(self, param1):
+    def calc_time_key(self, param1):
         _loc2_ = 773625421
         _loc3_ = self.ror(param1, _loc2_ % 13)
         _loc3_ = _loc3_ ^ _loc2_
@@ -67,11 +82,18 @@ class LetvIE(InfoExtractor):
             'platid': 1,
             'splatid': 101,
             'format': 1,
-            'tkey': self.calcTimeKey(int(time.time())),
+            'tkey': self.calc_time_key(int(time.time())),
             'domain': 'www.letv.com'
         }
+        play_json_req = compat_urllib_request.Request(
+            'http://api.letv.com/mms/out/video/playJson?' + compat_urllib_parse.urlencode(params)
+        )
+        cn_verification_proxy = self._downloader.params.get('cn_verification_proxy')
+        if cn_verification_proxy:
+            play_json_req.add_header('Ytdl-request-proxy', cn_verification_proxy)
+
         play_json = self._download_json(
-            'http://api.letv.com/mms/out/video/playJson?' + compat_urllib_parse.urlencode(params),
+            play_json_req,
             media_id, 'playJson data')
 
         # Check for errors
@@ -108,7 +130,8 @@ class LetvIE(InfoExtractor):
 
                 url_info_dict = {
                     'url': media_url,
-                    'ext': os.path.splitext(dispatch[format_id][1])[1][1:]
+                    'ext': determine_ext(dispatch[format_id][1]),
+                    'format_id': format_id,
                 }
 
                 if format_id[-1:] == 'p':
@@ -117,7 +140,7 @@ class LetvIE(InfoExtractor):
                 urls.append(url_info_dict)
 
         publish_time = parse_iso8601(self._html_search_regex(
-            r'发布时间&nbsp;([^<>]+) ', page, 'publish time', fatal=False),
+            r'发布时间&nbsp;([^<>]+) ', page, 'publish time', default=None),
             delimiter=' ', timezone=datetime.timedelta(hours=8))
         description = self._html_search_meta('description', page, fatal=False)