diff options
author | Sergey M․ <dstftw@gmail.com> | 2020-11-17 03:40:02 +0700 |
---|---|---|
committer | Sergey M․ <dstftw@gmail.com> | 2020-11-17 03:40:57 +0700 |
commit | 6699b6ce41ca04d1d8782b943dfacfa41e7102eb (patch) | |
tree | 03652b22be79589a2318d58412267300ad035091 | |
parent | 91dcde8a381d1c442e5b56fa1d3652fdd3f4496d (diff) |
[youtube:tab] Fix extraction with cookies provided (closes #27005)
-rw-r--r-- | youtube_dl/extractor/youtube.py | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 248682a41..22af03832 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -2723,7 +2723,7 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor): 'itct': ctp, } - def _entries(self, tab): + def _entries(self, tab, identity_token): continuation = None slr_contents = tab['sectionListRenderer']['contents'] for slr_content in slr_contents: @@ -2768,16 +2768,20 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor): if not continuation: continuation = self._extract_continuation(is_renderer) + headers = { + 'x-youtube-client-name': '1', + 'x-youtube-client-version': '2.20201112.04.01', + } + if identity_token: + headers['x-youtube-identity-token'] = identity_token + for page_num in itertools.count(1): if not continuation: break browse = self._download_json( 'https://www.youtube.com/browse_ajax', None, 'Downloading page %d' % page_num, - headers={ - 'x-youtube-client-name': '1', - 'x-youtube-client-version': '2.20201030.01.00', - }, query=continuation, fatal=False) + headers=headers, query=continuation, fatal=False) if not browse: break response = try_get(browse, lambda x: x[1]['response'], dict) @@ -2848,8 +2852,11 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor): title = channel_title or channel_id if tab_title: title += ' - %s' % tab_title + identity_token = self._search_regex( + r'\bID_TOKEN["\']\s*:\s*["\'](.+?)["\']', webpage, + 'identity token', default=None) return self.playlist_result( - self._entries(selected_tab['content']), + self._entries(selected_tab['content'], identity_token), playlist_id=channel_external_id or channel_id, playlist_title=title) |