]> jfr.im git - yt-dlp.git/commitdiff
[extractor/youtube] Differentiate between no and disabled comments (#5491)
authorMatthew <redacted>
Thu, 10 Nov 2022 03:33:03 +0000 (16:33 +1300)
committerGitHub <redacted>
Thu, 10 Nov 2022 03:33:03 +0000 (03:33 +0000)
`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
yt_dlp/extractor/youtube.py

index 20ed5221637df16b1eb7eff9f875a28ccf13dc78..34650cf4e118545c2fae9050ffe81b190512ed5b 100644 (file)
@@ -3738,6 +3738,9 @@ def extract_subtitles(self, *args, **kwargs):
     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 @@ def extractor():
                 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
index 7e3c17ae00f14b33038c783e95d41151bf38cd8e..5b7c94c4ec83a63ec9e7309565ec1608847eeae4 100644 (file)
@@ -3270,6 +3270,7 @@ def extract_thread(contents):
         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):