summary refs log tree commit diff
diff options
context:
space:
mode:
authorSergey M․ <dstftw@gmail.com>2021-05-30 03:05:22 +0700
committerSergey M․ <dstftw@gmail.com>2021-05-30 03:05:22 +0700
commit6511b8e8d7db78d4ba3706df5122a74e1c9b9b57 (patch)
tree32c159d8d2d24d910359e2b139e1500bf3e2168e
parentf3cd1d9cec91943a459a0662cbcffe3b2e1f6675 (diff)
downloadyoutube-dl-6511b8e8d7db78d4ba3706df5122a74e1c9b9b57.tar.gz
youtube-dl-6511b8e8d7db78d4ba3706df5122a74e1c9b9b57.tar.xz
youtube-dl-6511b8e8d7db78d4ba3706df5122a74e1c9b9b57.zip
[ted] Prefer own formats over external sources (closes #29142)
-rw-r--r--youtube_dl/extractor/ted.py24
1 files changed, 14 insertions, 10 deletions
diff --git a/youtube_dl/extractor/ted.py b/youtube_dl/extractor/ted.py
index 63e2455b2..f09f1a3f9 100644
--- a/youtube_dl/extractor/ted.py
+++ b/youtube_dl/extractor/ted.py
@@ -123,6 +123,10 @@ class TEDIE(InfoExtractor):
         'params': {
             'skip_download': True,
         },
+    }, {
+        # with own formats and private Youtube external
+        'url': 'https://www.ted.com/talks/spencer_wells_a_family_tree_for_humanity',
+        'only_matching': True,
     }]
 
     _NATIVE_FORMATS = {
@@ -210,16 +214,6 @@ class TEDIE(InfoExtractor):
 
         player_talk = talk_info['player_talks'][0]
 
-        external = player_talk.get('external')
-        if isinstance(external, dict):
-            service = external.get('service')
-            if isinstance(service, compat_str):
-                ext_url = None
-                if service.lower() == 'youtube':
-                    ext_url = external.get('code')
-
-                return self.url_result(ext_url or external['uri'])
-
         resources_ = player_talk.get('resources') or talk_info.get('resources')
 
         http_url = None
@@ -294,6 +288,16 @@ class TEDIE(InfoExtractor):
                 'vcodec': 'none',
             })
 
+        if not formats:
+            external = player_talk.get('external')
+            if isinstance(external, dict):
+                service = external.get('service')
+                if isinstance(service, compat_str):
+                    ext_url = None
+                    if service.lower() == 'youtube':
+                        ext_url = external.get('code')
+                    return self.url_result(ext_url or external['uri'])
+
         self._sort_formats(formats)
 
         video_id = compat_str(talk_info['id'])