kopia lustrzana https://github.com/yt-dlp/yt-dlp
[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 paramspull/248/head
rodzic
b7da73eb19
commit
5d34200268
|
@ -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 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):
|
||||||
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,22 +3343,22 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):
|
||||||
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),
|
||||||
identity_token=self._extract_identity_token(webpage, item_id=item_id),
|
identity_token=self._extract_identity_token(webpage, item_id=item_id),
|
||||||
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,
|
||||||
check_get_keys='contents', fatal=False,
|
check_get_keys='contents', fatal=False,
|
||||||
note='Downloading API JSON with unavailable videos')
|
note='Downloading API JSON with unavailable videos')
|
||||||
|
|
||||||
def _extract_response(self, item_id, query, note='Downloading API JSON', headers=None,
|
def _extract_response(self, item_id, query, note='Downloading API JSON', headers=None,
|
||||||
ytcfg=None, check_get_keys=None, ep='browse', fatal=True):
|
ytcfg=None, check_get_keys=None, ep='browse', fatal=True):
|
||||||
|
|
Ładowanie…
Reference in New Issue