From d6c6c8a4a0712b94be109a20436d711d3d280bd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Mon, 13 Jun 2022 18:56:25 +0200 Subject: [PATCH] [twitter] improve '"replies": "self"' (#2665) If a username is given in the input URL, only download from replies by that user. --- gallery_dl/extractor/twitter.py | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/gallery_dl/extractor/twitter.py b/gallery_dl/extractor/twitter.py index 138bcfd7fb..3f8073ed1a 100644 --- a/gallery_dl/extractor/twitter.py +++ b/gallery_dl/extractor/twitter.py @@ -40,6 +40,7 @@ def __init__(self, match): self.quoted = self.config("quoted", False) self.videos = self.config("videos", True) self.cards = self.config("cards", False) + self._user_id = None self._user_cache = {} self._init_sizes() @@ -79,7 +80,8 @@ def items(self): if "in_reply_to_user_id_str" in data and ( not self.replies or ( self.replies == "self" and - data["in_reply_to_user_id_str"] != data["user_id_str"] + (self._user_id or data["in_reply_to_user_id_str"]) != + data["user_id_str"] ) ): self.log.debug("Skipping %s (reply)", data["id_str"]) @@ -1031,19 +1033,23 @@ def user_by_screen_name(self, screen_name): def _user_id_by_screen_name(self, screen_name): if screen_name.startswith("id:"): self._user = util.SENTINEL - return screen_name[3:] + user_id = screen_name[3:] - user = () - try: - user = self._user = self.user_by_screen_name(screen_name) - return user["rest_id"] - except KeyError: - if "unavailable_message" in user: - raise exception.NotFoundError("{} ({})".format( - user["unavailable_message"].get("text"), - user.get("reason")), False) - else: - raise exception.NotFoundError("user") + else: + user = () + try: + user = self._user = self.user_by_screen_name(screen_name) + user_id = user["rest_id"] + except KeyError: + if "unavailable_message" in user: + raise exception.NotFoundError("{} ({})".format( + user["unavailable_message"].get("text"), + user.get("reason")), False) + else: + raise exception.NotFoundError("user") + + self.extractor._user_id = user_id + return user_id @cache(maxage=3600) def _guest_token(self):