]> jfr.im git - yt-dlp.git/commitdiff
[BravoTV] Improve metadata extraction (#483)
authorKevin O'Connor <redacted>
Sun, 11 Jul 2021 11:06:26 +0000 (07:06 -0400)
committerGitHub <redacted>
Sun, 11 Jul 2021 11:06:26 +0000 (16:36 +0530)
Authored by: kevinoconnor7

yt_dlp/extractor/bravotv.py

index bae2aedce5d200a6081e63e8d50287dc7d05f3a8..e4758baca8e7b929c8fe648a1cea4a0896963006 100644 (file)
@@ -8,6 +8,9 @@
     smuggle_url,
     update_url_query,
     int_or_none,
+    float_or_none,
+    try_get,
+    dict_get,
 )
 
 
@@ -24,6 +27,11 @@ class BravoTVIE(AdobePassIE):
             'uploader': 'NBCU-BRAV',
             'upload_date': '20190314',
             'timestamp': 1552591860,
+            'season_number': 16,
+            'episode_number': 15,
+            'series': 'Top Chef',
+            'episode': 'The Top Chef Season 16 Winner Is...',
+            'duration': 190.0,
         }
     }, {
         'url': 'http://www.bravotv.com/below-deck/season-3/ep-14-reunion-part-1',
@@ -79,12 +87,34 @@ def _real_extract(self, url):
                 'episode_number': int_or_none(metadata.get('episode_num')),
             })
             query['switch'] = 'progressive'
+
+        tp_url = 'http://link.theplatform.com/s/%s/%s' % (account_pid, tp_path)
+
+        tp_metadata = self._download_json(
+            update_url_query(tp_url, {'format': 'preview'}),
+            display_id, fatal=False)
+        if tp_metadata:
+            info.update({
+                'title': tp_metadata.get('title'),
+                'description': tp_metadata.get('description'),
+                'duration': float_or_none(tp_metadata.get('duration'), 1000),
+                'season_number': int_or_none(
+                    dict_get(tp_metadata, ('pl1$seasonNumber', 'nbcu$seasonNumber'))),
+                'episode_number': int_or_none(
+                    dict_get(tp_metadata, ('pl1$episodeNumber', 'nbcu$episodeNumber'))),
+                # For some reason the series is sometimes wrapped into a single element array.
+                'series': try_get(
+                    dict_get(tp_metadata, ('pl1$show', 'nbcu$show')),
+                    lambda x: x[0] if isinstance(x, list) else x,
+                    expected_type=str),
+                'episode': dict_get(
+                    tp_metadata, ('pl1$episodeName', 'nbcu$episodeName', 'title')),
+            })
+
         info.update({
             '_type': 'url_transparent',
             'id': release_pid,
-            'url': smuggle_url(update_url_query(
-                'http://link.theplatform.com/s/%s/%s' % (account_pid, tp_path),
-                query), {'force_smil_url': True}),
+            'url': smuggle_url(update_url_query(tp_url, query), {'force_smil_url': True}),
             'ie_key': 'ThePlatform',
         })
         return info