From 45261e063bc83516504261910b72c25daf86d4b8 Mon Sep 17 00:00:00 2001 From: coletdjnz Date: Sat, 26 Jun 2021 06:01:10 +1200 Subject: [PATCH] [youtube:comments] Fix error handling and add `itct` to params (#446) Should close #439 (untested) Authored by: colethedj --- yt_dlp/extractor/youtube.py | 22 ++++++++++++++++------ 1 file 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') + # TODO: not tested, merged from old extractor + err_msg = browse.get('externalErrorMessage') + if err_msg: + last_error = err_msg + continue + + 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