]> jfr.im git - yt-dlp.git/blobdiff - yt_dlp/extractor/rutv.py
[ie/mlbtv] Fix extraction (#10296)
[yt-dlp.git] / yt_dlp / extractor / rutv.py
index 0b07dc5ad875c4051ccbe3bee868b5336af526cc..9bd26ad03e9bd00ca968e3e674ceaeac29d01811 100644 (file)
@@ -1,11 +1,7 @@
 import re
 
 from .common import InfoExtractor
-from ..utils import (
-    ExtractorError,
-    int_or_none,
-    str_to_int
-)
+from ..utils import ExtractorError, int_or_none, str_to_int
 
 
 class RUTVIE(InfoExtractor):
@@ -128,20 +124,20 @@ def _real_extract(self, url):
         is_live = video_type == 'live'
 
         json_data = self._download_json(
-            'http://player.vgtrk.com/iframe/data%s/id/%s' % ('live' if is_live else 'video', video_id),
+            'http://player.vgtrk.com/iframe/data{}/id/{}'.format('live' if is_live else 'video', video_id),
             video_id, 'Downloading JSON')
 
         if json_data['errors']:
-            raise ExtractorError('%s said: %s' % (self.IE_NAME, json_data['errors']), expected=True)
+            raise ExtractorError('{} said: {}'.format(self.IE_NAME, json_data['errors']), expected=True)
 
         playlist = json_data['data']['playlist']
         medialist = playlist['medialist']
         media = medialist[0]
 
         if media['errors']:
-            raise ExtractorError('%s said: %s' % (self.IE_NAME, media['errors']), expected=True)
+            raise ExtractorError('{} said: {}'.format(self.IE_NAME, media['errors']), expected=True)
 
-        view_count = playlist.get('count_views')
+        view_count = int_or_none(playlist.get('count_views'))
         priority_transport = playlist['priority_transport']
 
         thumbnail = media['picture']
@@ -152,6 +148,7 @@ def _real_extract(self, url):
         duration = int_or_none(media.get('duration'))
 
         formats = []
+        subtitles = {}
 
         for transport, links in media['sources'].items():
             for quality, url in links.items():
@@ -171,23 +168,23 @@ def _real_extract(self, url):
                         'vbr': str_to_int(quality),
                     }
                 elif transport == 'm3u8':
-                    formats.extend(self._extract_m3u8_formats(
-                        url, video_id, 'mp4', quality=preference, m3u8_id='hls'))
+                    fmt, subs = self._extract_m3u8_formats_and_subtitles(
+                        url, video_id, 'mp4', quality=preference, m3u8_id='hls')
+                    formats.extend(fmt)
+                    self._merge_subtitles(subs, target=subtitles)
                     continue
                 else:
                     fmt = {
-                        'url': url
+                        'url': url,
                     }
                 fmt.update({
                     'width': int_or_none(quality, default=height, invscale=width, scale=height),
                     'height': int_or_none(quality, default=height),
-                    'format_id': '%s-%s' % (transport, quality),
+                    'format_id': f'{transport}-{quality}',
                     'source_preference': preference,
                 })
                 formats.append(fmt)
 
-        self._sort_formats(formats)
-
         return {
             'id': video_id,
             'title': title,
@@ -196,5 +193,7 @@ def _real_extract(self, url):
             'view_count': view_count,
             'duration': duration,
             'formats': formats,
+            'subtitles': subtitles,
             'is_live': is_live,
+            '_format_sort_fields': ('source', ),
         }