[wdr] Extent subtitles extraction and improve overall extraction (closes #22672,...
authorSergey M․ <dstftw@gmail.com>
Fri, 11 Dec 2020 21:48:56 +0000 (04:48 +0700)
committerSergey M․ <dstftw@gmail.com>
Fri, 11 Dec 2020 21:52:35 +0000 (04:52 +0700)
youtube_dl/extractor/wdr.py

index ba97d983bc479f881bcefe49607e4aae2894e0c8..2903d189ea387673f872c629409cad8d34caefc6 100644 (file)
@@ -17,6 +17,7 @@ from ..utils import (
     unified_strdate,
     update_url_query,
     urlhandle_detect_ext,
+    url_or_none,
 )
 
 
@@ -42,16 +43,20 @@ class WDRIE(InfoExtractor):
         is_live = metadata.get('mediaType') == 'live'
 
         tracker_data = metadata['trackerData']
+        title = tracker_data['trackerClipTitle']
+
         media_resource = metadata['mediaResource']
 
         formats = []
 
         # check if the metadata contains a direct URL to a file
-        for kind, media_resource in media_resource.items():
+        for kind, media in media_resource.items():
+            if not isinstance(media, dict):
+                continue
             if kind not in ('dflt', 'alt'):
                 continue
 
-            for tag_name, medium_url in media_resource.items():
+            for tag_name, medium_url in media.items():
                 if tag_name not in ('videoURL', 'audioURL'):
                     continue
 
@@ -88,8 +93,16 @@ class WDRIE(InfoExtractor):
                 'url': caption_url,
                 'ext': 'ttml',
             }]
-
-        title = tracker_data['trackerClipTitle']
+        captions_hash = media_resource.get('captionsHash')
+        if isinstance(captions_hash, dict):
+            for ext, format_url in captions_hash.items():
+                format_url = url_or_none(format_url)
+                if not format_url:
+                    continue
+                subtitles.setdefault('de', []).append({
+                    'url': format_url,
+                    'ext': determine_ext(format_url, None) or ext,
+                })
 
         return {
             'id': tracker_data.get('trackerClipId', video_id),