summary refs log tree commit diff
diff options
context:
space:
mode:
authorzraktvor <=>2021-04-10 15:11:35 +0200
committerSergey M․ <dstftw@gmail.com>2021-04-17 01:13:10 +0700
commitea87ed8394127c4bf824688b8780eaf5a804e7a3 (patch)
tree9b78e0e475d1a0519eb2a13baa5c3a2dbf1aae25
parentd01e261a15abd779decae6e0858d8586f7a71621 (diff)
downloadyoutube-dl-ea87ed8394127c4bf824688b8780eaf5a804e7a3.tar.gz
youtube-dl-ea87ed8394127c4bf824688b8780eaf5a804e7a3.tar.xz
youtube-dl-ea87ed8394127c4bf824688b8780eaf5a804e7a3.zip
[youtube:tab] Detect series playlist on playlists page (closes #28723)
-rw-r--r--youtube_dl/extractor/youtube.py24
1 files changed, 23 insertions, 1 deletions
diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py
index 7fa9b473a..581687d96 100644
--- a/youtube_dl/extractor/youtube.py
+++ b/youtube_dl/extractor/youtube.py
@@ -2020,6 +2020,15 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):
             'description': 'md5:be97ee0f14ee314f1f002cf187166ee2',
         },
     }, {
+        # playlists, series
+        'url': 'https://www.youtube.com/c/3blue1brown/playlists?view=50&sort=dd&shelf_id=3',
+        'playlist_mincount': 5,
+        'info_dict': {
+            'id': 'UCYO_jab_esuFRV4b17AJtAw',
+            'title': '3Blue1Brown - Playlists',
+            'description': 'md5:e1384e8a133307dd10edee76e875d62f',
+        },
+    }, {
         # playlists, singlepage
         'url': 'https://www.youtube.com/user/ThirstForScience/playlists',
         'playlist_mincount': 4,
@@ -2311,7 +2320,7 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):
 
     @staticmethod
     def _extract_grid_item_renderer(item):
-        for item_kind in ('Playlist', 'Video', 'Channel'):
+        for item_kind in ('Playlist', 'Video', 'Channel', 'Show'):
             renderer = item.get('grid%sRenderer' % item_kind)
             if renderer:
                 return renderer
@@ -2344,6 +2353,19 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):
                 yield self.url_result(
                     'https://www.youtube.com/channel/%s' % channel_id,
                     ie=YoutubeTabIE.ie_key(), video_title=title)
+            # show
+            if playlist_id is None:  # needs to check for playlist_id, or non-series playlists are recognized twice
+                show_playlist_url = try_get(
+                    renderer, lambda x: x['navigationEndpoint']['commandMetadata']['webCommandMetadata']['url'],
+                    compat_str)
+                if show_playlist_url:
+                    playlist_id = self._search_regex(r'/playlist\?list=([0-9a-zA-Z-_]+)', show_playlist_url,
+                                                     'playlist id', default=None)
+                    if playlist_id:
+                        title = try_get(renderer, lambda x: x['title']['simpleText'], compat_str)
+                        yield self.url_result(
+                            "https://www.youtube.com/playlist?list=%s" % playlist_id,
+                            ie=YoutubeTabIE.ie_key(), video_id=playlist_id, video_title=title)
 
     def _shelf_entries_from_content(self, shelf_renderer):
         content = shelf_renderer.get('content')