diff options
Diffstat (limited to 'gallery_dl/extractor/moebooru.py')
| -rw-r--r-- | gallery_dl/extractor/moebooru.py | 53 |
1 files changed, 21 insertions, 32 deletions
diff --git a/gallery_dl/extractor/moebooru.py b/gallery_dl/extractor/moebooru.py index 9fd66e2..ba27994 100644 --- a/gallery_dl/extractor/moebooru.py +++ b/gallery_dl/extractor/moebooru.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright 2020-2023 Mike Fährmann +# Copyright 2020-2025 Mike Fährmann # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as @@ -9,11 +9,9 @@ """Extractors for Moebooru based sites""" from .booru import BooruExtractor -from .. import text - +from .. import text, util import collections import datetime -import re class MoebooruExtractor(BooruExtractor): @@ -22,13 +20,12 @@ class MoebooruExtractor(BooruExtractor): filename_fmt = "{category}_{id}_{md5}.{extension}" page_start = 1 - @staticmethod - def _prepare(post): + def _prepare(self, post): post["date"] = text.parse_timestamp(post["created_at"]) def _html(self, post): - return self.request("{}/post/show/{}".format( - self.root, post["id"])).text + url = f"{self.root}/post/show/{post['id']}" + return self.request(url).text def _tags(self, post, page): tag_container = text.extr(page, '<ul id="tag-', '</ul>') @@ -36,7 +33,7 @@ class MoebooruExtractor(BooruExtractor): return tags = collections.defaultdict(list) - pattern = re.compile(r"tag-type-([^\"' ]+).*?[?;]tags=([^\"'+]+)") + pattern = util.re(r"tag-type-([^\"' ]+).*?[?;]tags=([^\"'+]+)") for tag_type, tag_name in pattern.findall(tag_container): tags[tag_type].append(text.unquote(tag_name)) for key, value in tags.items(): @@ -64,7 +61,7 @@ class MoebooruExtractor(BooruExtractor): params["limit"] = self.per_page while True: - posts = self.request(url, params=params).json() + posts = self.request_json(url, params=params) yield from posts if len(posts) < self.per_page: @@ -101,15 +98,14 @@ class MoebooruTagExtractor(MoebooruExtractor): def __init__(self, match): MoebooruExtractor.__init__(self, match) - tags = match.group(match.lastindex) - self.tags = text.unquote(tags.replace("+", " ")) + self.tags = text.unquote(self.groups[-1].replace("+", " ")) def metadata(self): return {"search_tags": self.tags} def posts(self): params = {"tags": self.tags} - return self._pagination(self.root + "/post.json", params) + return self._pagination(f"{self.root}/post.json", params) class MoebooruPoolExtractor(MoebooruExtractor): @@ -121,12 +117,12 @@ class MoebooruPoolExtractor(MoebooruExtractor): def __init__(self, match): MoebooruExtractor.__init__(self, match) - self.pool_id = match.group(match.lastindex) + self.pool_id = self.groups[-1] def metadata(self): if self.config("metadata"): - url = "{}/pool/show/{}.json".format(self.root, self.pool_id) - pool = self.request(url).json() + url = f"{self.root}/pool/show/{self.pool_id}.json" + pool = self.request_json(url) pool["name"] = pool["name"].replace("_", " ") pool.pop("posts", None) return {"pool": pool} @@ -134,7 +130,7 @@ class MoebooruPoolExtractor(MoebooruExtractor): def posts(self): params = {"tags": "pool:" + self.pool_id} - return self._pagination(self.root + "/post.json", params) + return self._pagination(f"{self.root}/post.json", params) class MoebooruPostExtractor(MoebooruExtractor): @@ -143,13 +139,9 @@ class MoebooruPostExtractor(MoebooruExtractor): pattern = BASE_PATTERN + r"/post/show/(\d+)" example = "https://yande.re/post/show/12345" - def __init__(self, match): - MoebooruExtractor.__init__(self, match) - self.post_id = match.group(match.lastindex) - def posts(self): - params = {"tags": "id:" + self.post_id} - return self.request(self.root + "/post.json", params=params).json() + params = {"tags": "id:" + self.groups[-1]} + return self.request_json(f"{self.root}/post.json", params=params) class MoebooruPopularExtractor(MoebooruExtractor): @@ -162,18 +154,15 @@ class MoebooruPopularExtractor(MoebooruExtractor): def __init__(self, match): MoebooruExtractor.__init__(self, match) - self.scale = match.group(match.lastindex-1) - self.query = match.group(match.lastindex) + self.scale = self.groups[-2] + self.query = self.groups[-1] def metadata(self): self.params = params = text.parse_query(self.query) if "year" in params: - date = "{:>04}-{:>02}-{:>02}".format( - params["year"], - params.get("month", "01"), - params.get("day", "01"), - ) + date = (f"{params['year']:>04}-{params.get('month', '01'):>02}-" + f"{params.get('day', '01'):>02}") else: date = datetime.date.today().isoformat() @@ -189,5 +178,5 @@ class MoebooruPopularExtractor(MoebooruExtractor): return {"date": date, "scale": scale} def posts(self): - url = "{}/post/popular_{}.json".format(self.root, self.scale) - return self.request(url, params=self.params).json() + url = f"{self.root}/post/popular_{self.scale}.json" + return self.request_json(url, params=self.params) |
