From 64bbc7969d88f43d0879b8a7c623ec371d614ec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Thu, 3 Mar 2022 01:51:52 +0100 Subject: [PATCH] [twitter] warn about age-restricted Tweets (#2354) --- gallery_dl/extractor/twitter.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gallery_dl/extractor/twitter.py b/gallery_dl/extractor/twitter.py index 51a4a3733d..7505d0db76 100644 --- a/gallery_dl/extractor/twitter.py +++ b/gallery_dl/extractor/twitter.py @@ -765,6 +765,7 @@ def __init__(self, extractor): "__fs_dont_mention_me_view_api_enabled": False, } + self._nsfw_warning = True self._json_dumps = json.JSONEncoder(separators=(",", ":")).encode self._user = None @@ -1147,6 +1148,10 @@ def _pagination_tweets(self, endpoint, variables, path=None): tweets.extend(entry["content"]["items"]) elif esw("conversationthread-"): tweets.extend(entry["content"]["items"]) + elif esw("tombstone-"): + self._report_tombstone( + entry, + entry["content"]["itemContent"]["tombstoneInfo"]) elif esw("cursor-bottom-"): cursor = entry["content"] if not cursor.get("stopOnEmptyResponse", True): @@ -1158,6 +1163,9 @@ def _pagination_tweets(self, endpoint, variables, path=None): try: tweet = ((entry.get("content") or entry["item"]) ["itemContent"]["tweet_results"]["result"]) + if "tombstone" in tweet: + self._report_tombstone(entry, tweet["tombstone"]) + continue legacy = tweet["legacy"] except KeyError: extr.log.debug( @@ -1244,3 +1252,11 @@ def _pagination_users(self, endpoint, variables, path=None): if stop or not cursor or not entry: return variables["cursor"] = cursor + + def _report_tombstone(self, entry, tombstone): + text = (tombstone.get("richText") or tombstone["text"])["text"] + if text.startswith("Age-restricted") and self._nsfw_warning: + self.extractor.log.warning(text) + self._nsfw_warning = False + self.extractor.log.debug( + "Skipping %s (%s)", entry["entryId"].rpartition("-")[2], text)