aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--yt_dlp/extractor/youtube.py22
1 files changed, 16 insertions, 6 deletions
diff --git a/yt_dlp/extractor/youtube.py b/yt_dlp/extractor/youtube.py
index e27253e37..b2a9322d7 100644
--- a/yt_dlp/extractor/youtube.py
+++ b/yt_dlp/extractor/youtube.py
@@ -1731,6 +1731,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
'pbj': 1,
'type': 'next',
}
+ if 'itct' in continuation:
+ query['itct'] = continuation['itct']
if parent:
query['action_get_comment_replies'] = 1
else:
@@ -1776,19 +1778,27 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
response = try_get(browse,
(lambda x: x['response'],
- lambda x: x[1]['response'])) or {}
+ lambda x: x[1]['response']), dict) or {}
if response.get('continuationContents'):
break
# YouTube sometimes gives reload: now json if something went wrong (e.g. bad auth)
- if browse.get('reload'):
- raise ExtractorError('Invalid or missing params in continuation request', expected=False)
+ if isinstance(browse, dict):
+ if browse.get('reload'):
+ raise ExtractorError('Invalid or missing params in continuation request', expected=False)
+
+ # TODO: not tested, merged from old extractor
+ err_msg = browse.get('externalErrorMessage')
+ if err_msg:
+ last_error = err_msg
+ continue
- # TODO: not tested, merged from old extractor
- err_msg = browse.get('externalErrorMessage')
+ response_error = try_get(response, lambda x: x['responseContext']['errors']['error'][0], dict) or {}
+ err_msg = response_error.get('externalErrorMessage')
if err_msg:
- raise ExtractorError('YouTube said: %s' % err_msg, expected=False)
+ last_error = err_msg
+ continue
# Youtube sometimes sends incomplete data
# See: https://github.com/ytdl-org/youtube-dl/issues/28194