diff options
| author | 2025-12-20 05:49:11 -0500 | |
|---|---|---|
| committer | 2025-12-20 05:49:11 -0500 | |
| commit | c586ea4b3c871f5696626f9820e8c88a4e78f4a6 (patch) | |
| tree | e6d7bae96282c3d147159f091d451e53bdaa2efe /gallery_dl/extractor/fanbox.py | |
| parent | 01a2bf622c31072d1322884584404b9bd59b28cc (diff) | |
| parent | a24ec1647aeac35a63b744ea856011ad6e06be3b (diff) | |
Update upstream source from tag 'upstream/1.31.1'
Update to upstream version '1.31.1'
with Debian dir b5d91c25143175f933b1c69c7e82249cd7e145ab
Diffstat (limited to 'gallery_dl/extractor/fanbox.py')
| -rw-r--r-- | gallery_dl/extractor/fanbox.py | 63 |
1 files changed, 39 insertions, 24 deletions
diff --git a/gallery_dl/extractor/fanbox.py b/gallery_dl/extractor/fanbox.py index 70b06e7..036b388 100644 --- a/gallery_dl/extractor/fanbox.py +++ b/gallery_dl/extractor/fanbox.py @@ -66,18 +66,17 @@ class FanboxExtractor(Extractor): if fee_max is not None and fee_max < item["feeRequired"]: self.log.warning("Skipping post %s (feeRequired of %s > %s)", item["id"], item["feeRequired"], fee_max) - continue - - try: - url = "https://api.fanbox.cc/post.info?postId=" + item["id"] - body = self.request_json(url, headers=self.headers)["body"] - content_body, post = self._extract_post(body) - except Exception as exc: - self.log.warning("Skipping post %s (%s: %s)", - item["id"], exc.__class__.__name__, exc) - continue - - yield Message.Directory, post + else: + try: + url = ("https://api.fanbox.cc/post.info?postId=" + + item["id"]) + item = self.request_json(url, headers=self.headers)["body"] + except Exception as exc: + self.log.warning("Skipping post %s (%s: %s)", + item["id"], exc.__class__.__name__, exc) + + content_body, post = self._extract_post(item) + yield Message.Directory, "", post yield from self._get_urls_from_post(content_body, post) def posts(self): @@ -128,15 +127,19 @@ class FanboxExtractor(Extractor): if file.get("extension", "").lower() in exts ] - post["date"] = text.parse_datetime(post["publishedDatetime"]) + try: + post["date"] = self.parse_datetime_iso(post["publishedDatetime"]) + except Exception: + post["date"] = None post["text"] = content_body.get("text") if content_body else None post["isCoverImage"] = False - if self._meta_user: - post["user"] = self._get_user_data(post["creatorId"]) - if self._meta_plan: + cid = post.get("creatorId") + if self._meta_user and cid is not None: + post["user"] = self._get_user_data(cid) + if self._meta_plan and cid is not None: plans = self._get_plan_data(post["creatorId"]) - fee = post["feeRequired"] + fee = post.get("feeRequired") or 0 try: post["plan"] = plans[fee] except KeyError: @@ -147,7 +150,7 @@ class FanboxExtractor(Extractor): plan["fee"] = fee post["plan"] = plans[fee] = plan if self._meta_comments: - if post["commentCount"]: + if post.get("commentCount"): post["comments"] = list(self._get_comment_data(post["id"])) else: post["commentd"] = () @@ -216,7 +219,7 @@ class FanboxExtractor(Extractor): def _get_urls_from_post(self, content_body, post): num = 0 if cover_image := post.get("coverImageUrl"): - cover_image = util.re("/c/[0-9a-z_]+").sub("", cover_image) + cover_image = text.re("/c/[0-9a-z_]+").sub("", cover_image) final_post = post.copy() final_post["isCoverImage"] = True final_post["fileUrl"] = cover_image @@ -352,7 +355,7 @@ class FanboxExtractor(Extractor): class FanboxCreatorExtractor(FanboxExtractor): """Extractor for a Fanbox creator's works""" subcategory = "creator" - pattern = USER_PATTERN + r"(?:/posts)?/?$" + pattern = rf"{USER_PATTERN}(?:/posts)?/?$" example = "https://USER.fanbox.cc/" def posts(self): @@ -362,15 +365,26 @@ class FanboxCreatorExtractor(FanboxExtractor): def _pagination_creator(self, url): urls = self.request_json(url, headers=self.headers)["body"] + if offset := self.config("offset"): + quotient, remainder = divmod(offset, 10) + if quotient: + urls = urls[quotient:] + else: + remainder = None + for url in urls: url = text.ensure_http_scheme(url) - yield from self.request_json(url, headers=self.headers)["body"] + posts = self.request_json(url, headers=self.headers)["body"] + if remainder: + posts = posts[remainder:] + remainder = None + yield from posts class FanboxPostExtractor(FanboxExtractor): """Extractor for media from a single Fanbox post""" subcategory = "post" - pattern = USER_PATTERN + r"/posts/(\d+)" + pattern = rf"{USER_PATTERN}/posts/(\d+)" example = "https://USER.fanbox.cc/posts/12345" def posts(self): @@ -380,7 +394,7 @@ class FanboxPostExtractor(FanboxExtractor): class FanboxHomeExtractor(FanboxExtractor): """Extractor for your Fanbox home feed""" subcategory = "home" - pattern = BASE_PATTERN + r"/?$" + pattern = rf"{BASE_PATTERN}/?$" example = "https://fanbox.cc/" def posts(self): @@ -391,7 +405,7 @@ class FanboxHomeExtractor(FanboxExtractor): class FanboxSupportingExtractor(FanboxExtractor): """Extractor for your supported Fanbox users feed""" subcategory = "supporting" - pattern = BASE_PATTERN + r"/home/supporting" + pattern = rf"{BASE_PATTERN}/home/supporting" example = "https://fanbox.cc/home/supporting" def posts(self): @@ -403,6 +417,7 @@ class FanboxRedirectExtractor(Extractor): """Extractor for pixiv redirects to fanbox.cc""" category = "fanbox" subcategory = "redirect" + cookies_domain = None pattern = r"(?:https?://)?(?:www\.)?pixiv\.net/fanbox/creator/(\d+)" example = "https://www.pixiv.net/fanbox/creator/12345" |
