From f7f25845758e26a45c817d23f5968d989ef49129 Mon Sep 17 00:00:00 2001 From: NecRaul Date: Thu, 12 Feb 2026 16:12:08 +0400 Subject: [PATCH 1/3] [foolfuuka] use filter to skip posts missing media --- gallery_dl/extractor/foolfuuka.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/gallery_dl/extractor/foolfuuka.py b/gallery_dl/extractor/foolfuuka.py index 88053b4c..54aede22 100644 --- a/gallery_dl/extractor/foolfuuka.py +++ b/gallery_dl/extractor/foolfuuka.py @@ -32,10 +32,8 @@ class FoolfuukaExtractor(BaseExtractor): def items(self): yield Message.Directory, "", self.metadata() - for post in self.posts(): + for post in filter(lambda p: p.get("media"), self.posts()): media = post["media"] - if not media: - continue url = media["media_link"] if not url and "remote_media_link" in media: From 1744eb04cbbe387e4d5696d2eeff9ca4d0f9ddc8 Mon Sep 17 00:00:00 2001 From: NecRaul Date: Thu, 12 Feb 2026 16:34:19 +0400 Subject: [PATCH 2/3] [foolfuuka] early resolution for wsg/gif boards --- gallery_dl/extractor/foolfuuka.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/gallery_dl/extractor/foolfuuka.py b/gallery_dl/extractor/foolfuuka.py index 54aede22..23c5defa 100644 --- a/gallery_dl/extractor/foolfuuka.py +++ b/gallery_dl/extractor/foolfuuka.py @@ -33,11 +33,12 @@ class FoolfuukaExtractor(BaseExtractor): def items(self): yield Message.Directory, "", self.metadata() for post in filter(lambda p: p.get("media"), self.posts()): + board = post["board"]["shortname"] media = post["media"] url = media["media_link"] if not url and "remote_media_link" in media: - url = self.remote(media) + url = self.remote(board, media) if url and url[0] == "/": url = self.root + url @@ -54,8 +55,10 @@ class FoolfuukaExtractor(BaseExtractor): def posts(self): """Return an iterable with all relevant posts""" - def remote(self, media): + def remote(self, board, media): """Resolve a remote media link""" + if board in ["wsg", "gif"]: + return f"https://i.4cdn.org/{board}/{media['media_orig']}" page = self.request(media["remote_media_link"]).text url = text.extr(page, 'http-equiv="Refresh" content="0; url=', '"') @@ -82,7 +85,6 @@ class FoolfuukaExtractor(BaseExtractor): "sci": "warosu.org", "tg" : "archive.4plebs.org", } - board = url.split("/", 4)[3] if board in board_domains: domain = board_domains[board] url = f"https://{domain}/{board}/full_image/{filename}" @@ -96,7 +98,7 @@ class FoolfuukaExtractor(BaseExtractor): return url - def _remote_direct(self, media): + def _remote_direct(self, board, media): return media["remote_media_link"] From df7642ed2f0876ac93057248a36d73bc7652bec6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Thu, 12 Feb 2026 19:31:29 +0100 Subject: [PATCH 3/3] [foolfuuka] simplify - filter posts manually - don't use lists for 'in' checks against constant values --- gallery_dl/extractor/foolfuuka.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gallery_dl/extractor/foolfuuka.py b/gallery_dl/extractor/foolfuuka.py index 23c5defa..21a549b2 100644 --- a/gallery_dl/extractor/foolfuuka.py +++ b/gallery_dl/extractor/foolfuuka.py @@ -32,9 +32,10 @@ class FoolfuukaExtractor(BaseExtractor): def items(self): yield Message.Directory, "", self.metadata() - for post in filter(lambda p: p.get("media"), self.posts()): + for post in self.posts(): + if not (media := post.get("media")): + continue board = post["board"]["shortname"] - media = post["media"] url = media["media_link"] if not url and "remote_media_link" in media: @@ -57,7 +58,7 @@ class FoolfuukaExtractor(BaseExtractor): def remote(self, board, media): """Resolve a remote media link""" - if board in ["wsg", "gif"]: + if board in {"wsg", "gif"}: return f"https://i.4cdn.org/{board}/{media['media_orig']}" page = self.request(media["remote_media_link"]).text url = text.extr(page, 'http-equiv="Refresh" content="0; url=', '"')