]> jfr.im git - yt-dlp.git/commitdiff
[bbc] Get all available formats (#1717)
authornyuszika7h <redacted>
Fri, 19 Nov 2021 14:57:01 +0000 (15:57 +0100)
committerGitHub <redacted>
Fri, 19 Nov 2021 14:57:01 +0000 (20:27 +0530)
Authored by: nyuszika7h

yt_dlp/extractor/bbc.py

index 4e2dcd76b896e0731aa51aab357233ad8533283c..672ed1ffe2c2c4efd60ad7ca41832951a5b821f7 100644 (file)
@@ -451,9 +451,10 @@ def _download_playlist(self, playlist_id):
             playlist = self._download_json(
                 'http://www.bbc.co.uk/programmes/%s/playlist.json' % playlist_id,
                 playlist_id, 'Downloading playlist JSON')
+            formats = []
+            subtitles = {}
 
-            version = playlist.get('defaultAvailableVersion')
-            if version:
+            for version in playlist.get('allAvailableVersions', []):
                 smp_config = version['smpConfig']
                 title = smp_config['title']
                 description = smp_config['summary']
@@ -463,8 +464,18 @@ def _download_playlist(self, playlist_id):
                         continue
                     programme_id = item.get('vpid')
                     duration = int_or_none(item.get('duration'))
-                    formats, subtitles = self._download_media_selector(programme_id)
-                return programme_id, title, description, duration, formats, subtitles
+                    version_formats, version_subtitles = self._download_media_selector(programme_id)
+                    types = version['types']
+                    for f in version_formats:
+                        f['format_note'] = ', '.join(types)
+                        if any('AudioDescribed' in x for x in types):
+                            f['language_preference'] = -10
+                    formats += version_formats
+                    for tag, subformats in (version_subtitles or {}).items():
+                        subtitles.setdefault(tag, [])
+                        subtitles[tag] += subformats
+
+            return programme_id, title, description, duration, formats, subtitles
         except ExtractorError as ee:
             if not (isinstance(ee.cause, compat_HTTPError) and ee.cause.code == 404):
                 raise