From 0cf643b234ff2f4d017a980dbaefdb14ed6e4db6 Mon Sep 17 00:00:00 2001 From: Matthew Date: Thu, 10 Nov 2022 16:33:03 +1300 Subject: [PATCH] [extractor/youtube] Differentiate between no and disabled comments (#5491) `comments` and `comment_count` will be set to None, as opposed to an empty list and 0, respectively. Fixes https://github.com/yt-dlp/yt-dlp/issues/5068 Authored by: coletdjnz, pukkandan --- yt_dlp/extractor/common.py | 5 +++++ yt_dlp/extractor/youtube.py | 1 + 2 files changed, 6 insertions(+) diff --git a/yt_dlp/extractor/common.py b/yt_dlp/extractor/common.py index 20ed52216..34650cf4e 100644 --- a/yt_dlp/extractor/common.py +++ b/yt_dlp/extractor/common.py @@ -3738,6 +3738,9 @@ class InfoExtractor: def _get_subtitles(self, *args, **kwargs): raise NotImplementedError('This method must be implemented by subclasses') + class CommentsDisabled(Exception): + """Raise in _get_comments if comments are disabled for the video""" + def extract_comments(self, *args, **kwargs): if not self.get_param('getcomments'): return None @@ -3753,6 +3756,8 @@ class InfoExtractor: interrupted = False except KeyboardInterrupt: self.to_screen('Interrupted by user') + except self.CommentsDisabled: + return {'comments': None, 'comment_count': None} except Exception as e: if self.get_param('ignoreerrors') is not True: raise diff --git a/yt_dlp/extractor/youtube.py b/yt_dlp/extractor/youtube.py index 7e3c17ae0..5b7c94c4e 100644 --- a/yt_dlp/extractor/youtube.py +++ b/yt_dlp/extractor/youtube.py @@ -3270,6 +3270,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor): message = self._get_text(root_continuation_data, ('contents', ..., 'messageRenderer', 'text'), max_runs=1) if message and not parent and tracker['running_total'] == 0: self.report_warning(f'Youtube said: {message}', video_id=video_id, only_once=True) + raise self.CommentsDisabled @staticmethod def _generate_comment_continuation(video_id):