[youtube:tab] Reload with unavailable videos for all playlists

If the unavailable video is in a later page, the warning and button are not shown in the initial webpage
So we force all playlists' initial page to reload with the correct params
This commit is contained in:
pukkandan 2021-04-17 07:49:49 +05:30
parent b7da73eb19
commit 5d34200268
No known key found for this signature in database
GPG key ID: 0F00D95A001F4698

View file

@ -2641,6 +2641,16 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):
'expected_warnings': [ 'expected_warnings': [
'YouTube said: INFO - Unavailable videos are hidden', 'YouTube said: INFO - Unavailable videos are hidden',
] ]
}, {
'note': 'Playlist with unavailable videos in a later page',
'url': 'https://www.youtube.com/playlist?list=UU8l9frL61Yl5KFOl87nIm2w',
'info_dict': {
'title': 'Uploads from BlankTV',
'id': 'UU8l9frL61Yl5KFOl87nIm2w',
'uploader': 'BlankTV',
'uploader_id': 'UC8l9frL61Yl5KFOl87nIm2w',
},
'playlist_mincount': 20000,
}, { }, {
# https://github.com/ytdl-org/youtube-dl/issues/21844 # https://github.com/ytdl-org/youtube-dl/issues/21844
'url': 'https://www.youtube.com/playlist?list=PLzH6n4zXuckpfMu_4Ff8E7Z1behQks5ba', 'url': 'https://www.youtube.com/playlist?list=PLzH6n4zXuckpfMu_4Ff8E7Z1behQks5ba',
@ -3311,7 +3321,10 @@ def _reload_with_unavailable_videos(self, item_id, data, webpage):
Get playlist with unavailable videos if the 'show unavailable videos' button exists. Get playlist with unavailable videos if the 'show unavailable videos' button exists.
""" """
sidebar_renderer = try_get( sidebar_renderer = try_get(
data, lambda x: x['sidebar']['playlistSidebarRenderer']['items'], list) or [] data, lambda x: x['sidebar']['playlistSidebarRenderer']['items'], list)
if not sidebar_renderer:
return
browse_id = params = None
for item in sidebar_renderer: for item in sidebar_renderer:
if not isinstance(item, dict): if not isinstance(item, dict):
continue continue
@ -3330,8 +3343,8 @@ def _reload_with_unavailable_videos(self, item_id, data, webpage):
nav_item_renderer, lambda x: x['navigationEndpoint']['browseEndpoint'], dict) or {} nav_item_renderer, lambda x: x['navigationEndpoint']['browseEndpoint'], dict) or {}
browse_id = browse_endpoint.get('browseId') browse_id = browse_endpoint.get('browseId')
params = browse_endpoint.get('params') params = browse_endpoint.get('params')
if not browse_id or not params: break
return
ytcfg = self._extract_ytcfg(item_id, webpage) ytcfg = self._extract_ytcfg(item_id, webpage)
headers = self._generate_api_headers( headers = self._generate_api_headers(
ytcfg, account_syncid=self._extract_account_syncid(ytcfg), ytcfg, account_syncid=self._extract_account_syncid(ytcfg),
@ -3339,8 +3352,8 @@ def _reload_with_unavailable_videos(self, item_id, data, webpage):
visitor_data=try_get( visitor_data=try_get(
self._extract_context(ytcfg), lambda x: x['client']['visitorData'], compat_str)) self._extract_context(ytcfg), lambda x: x['client']['visitorData'], compat_str))
query = { query = {
'params': params, 'params': params or 'wgYCCAA=',
'browseId': browse_id 'browseId': browse_id or 'VL%s' % item_id
} }
return self._extract_response( return self._extract_response(
item_id=item_id, headers=headers, query=query, item_id=item_id, headers=headers, query=query,