]> jfr.im git - yt-dlp.git/commitdiff
[generic] Allow further processing of json_ld URL
authorpukkandan <redacted>
Wed, 2 Feb 2022 01:58:01 +0000 (07:28 +0530)
committerpukkandan <redacted>
Wed, 2 Feb 2022 02:03:16 +0000 (07:33 +0530)
Closes #2578

yt_dlp/extractor/common.py
yt_dlp/extractor/generic.py

index a2f160a82194c35e2bb553c15eb8bb494c886bca..31b1bab3b7ce517ba891bbf91d4a3fc18fb2e37a 100644 (file)
@@ -1447,7 +1447,7 @@ def extract_chapter_information(e):
                 'title': part.get('name'),
                 'start_time': part.get('startOffset'),
                 'end_time': part.get('endOffset'),
-            } for part in e.get('hasPart', []) if part.get('@type') == 'Clip']
+            } for part in variadic(e.get('hasPart') or []) if part.get('@type') == 'Clip']
             for idx, (last_c, current_c, next_c) in enumerate(zip(
                     [{'end_time': 0}] + chapters, chapters, chapters[1:])):
                 current_c['end_time'] = current_c['end_time'] or next_c['start_time']
index 131319d25a6c1cfd726ce6af3b9cb906af5bf3f5..2b59d076f8a20a1717c6a742e8f1825cdf0bcc76 100644 (file)
@@ -3815,13 +3815,16 @@ def _real_extract(self, url):
 
         # Looking for http://schema.org/VideoObject
         json_ld = self._search_json_ld(webpage, video_id, default={})
-        if json_ld.get('url'):
+        if json_ld.get('url') not in (url, None):
             self.report_detected('JSON LD')
-            if determine_ext(json_ld.get('url')) == 'm3u8':
+            if determine_ext(json_ld['url']) == 'm3u8':
                 json_ld['formats'], json_ld['subtitles'] = self._extract_m3u8_formats_and_subtitles(
                     json_ld['url'], video_id, 'mp4')
                 json_ld.pop('url')
                 self._sort_formats(json_ld['formats'])
+            else:
+                json_ld['_type'] = 'url_transparent'
+                json_ld['url'] = smuggle_url(json_ld['url'], {'force_videoid': video_id, 'to_generic': True})
             return merge_dicts(json_ld, info_dict)
 
         def check_video(vurl):