diff --git a/gallery_dl/extractor/patreon.py b/gallery_dl/extractor/patreon.py index 517f371b..ab5932de 100644 --- a/gallery_dl/extractor/patreon.py +++ b/gallery_dl/extractor/patreon.py @@ -35,28 +35,27 @@ class PatreonExtractor(Extractor): for post in self.posts(): yield Message.Directory, post + ids = set() post["num"] = 0 content = post.get("content") postfile = post.get("post_file") - if postfile: - post["num"] += 1 - post["type"] = "postfile" - text.nameext_from_url(postfile["name"], post) - yield Message.Url, postfile["url"], post - postfile_id = "/" + postfile["url"].split("/")[-2] + "/" - for image in post["images"]: url = image.get("download_url") if not url: continue - if postfile and postfile_id in url: - postfile = None - continue + ids.add(url.split("/")[-2]) + name = image.get("file_name") or self._filename(url) or url + post["num"] += 1 post["type"] = "image" - text.nameext_from_url(self._filename(url) or url, post) - yield Message.Url, url, post + yield Message.Url, url, text.nameext_from_url(name, post) + + if postfile and postfile["url"].split("/")[-2] not in ids: + post["num"] += 1 + post["type"] = "postfile" + text.nameext_from_url(postfile["name"], post) + yield Message.Url, postfile["url"], post for attachment in post["attachments"]: post["num"] += 1 @@ -140,9 +139,10 @@ class PatreonExtractor(Extractor): return ( "https://www.patreon.com/api/" + endpoint + - "?include=user,attachments,user_defined_tags,campaign,poll.choices" - ",poll.current_user_responses.user,poll.current_user_responses.cho" - "ice,poll.current_user_responses.poll,access_rules.tier.null" + "?include=user,images,attachments,user_defined_tags,campaign,poll." + "choices,poll.current_user_responses.user,poll.current_user_respon" + "ses.choice,poll.current_user_responses.poll,access_rules.tier.nul" + "l" "&fields[post]=change_visibility_at,comment_count,content,current_" "user_can_delete,current_user_can_view,current_user_has_liked,embe"