[letv] LetvCloud: Detect ext instead of the hardcoded one
authorYen Chi Hsuan <yan12125@gmail.com>
Tue, 19 Jan 2016 20:00:37 +0000 (04:00 +0800)
committerYen Chi Hsuan <yan12125@gmail.com>
Tue, 19 Jan 2016 20:00:37 +0000 (04:00 +0800)
youtube_dl/extractor/letv.py

index b15ac163ed4c2165659dbd7687ac92a6eee21362..08bdae8a2182be28d2f7c5b3bc6d3fdcb66e1a49 100644 (file)
@@ -19,6 +19,7 @@ from ..utils import (
     int_or_none,
     str_or_none,
     encode_data_uri,
+    url_basename,
 )
 
 
@@ -295,12 +296,17 @@ class LetvCloudIE(InfoExtractor):
             else:
                 raise ExtractorError('Letv cloud returned an unknwon error')
 
+        def b64decode(s):
+            return base64.b64decode(s.encode('utf-8')).decode('utf-8')
+
         formats = []
         for media in play_json['data']['video_info']['media'].values():
             play_url = media['play_url']
+            url = b64decode(play_url['main_url'])
+            decoded_url = b64decode(url_basename(url))
             formats.append({
-                'url': base64.b64decode(play_url['main_url'].encode('utf-8')).decode('utf-8'),
-                'ext': 'mp4',
+                'url': url,
+                'ext': determine_ext(decoded_url),
                 'format_id': int_or_none(play_url.get('vtype')),
                 'format_note': str_or_none(play_url.get('definition')),
                 'width': int_or_none(play_url.get('vwidth')),