[youtube] Improve extraction in 429 error conditions (closes #24283)
parent
0ec9d4e565
commit
f93abcf1da
|
@ -1790,11 +1790,19 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||
query['el'] = el
|
||||
if sts:
|
||||
query['sts'] = sts
|
||||
try:
|
||||
video_info_webpage = self._download_webpage(
|
||||
'%s://www.youtube.com/get_video_info' % proto,
|
||||
video_id, note=False,
|
||||
errnote='unable to download video info webpage',
|
||||
fatal=False, query=query)
|
||||
query=query)
|
||||
except ExtractorError as e:
|
||||
# Skip further retries if we get 429 since solving
|
||||
# captcha only unblocks access to website but
|
||||
# not get_video_info end point
|
||||
if isinstance(e.cause, compat_HTTPError) and e.cause.code == 429:
|
||||
break
|
||||
continue
|
||||
if not video_info_webpage:
|
||||
continue
|
||||
get_video_info = compat_parse_qs(video_info_webpage)
|
||||
|
@ -1833,13 +1841,16 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||
if messages:
|
||||
return '\n'.join(messages)
|
||||
|
||||
if not video_info:
|
||||
if not video_info and not player_response:
|
||||
unavailable_message = extract_unavailable_message()
|
||||
if not unavailable_message:
|
||||
unavailable_message = 'Unable to extract video data'
|
||||
raise ExtractorError(
|
||||
'YouTube said: %s' % unavailable_message, expected=True, video_id=video_id)
|
||||
|
||||
if not isinstance(video_info, dict):
|
||||
video_info = {}
|
||||
|
||||
video_details = try_get(
|
||||
player_response, lambda x: x['videoDetails'], dict) or {}
|
||||
|
||||
|
|
Loading…
Reference in New Issue