diff options
| author | 2022-08-29 02:17:16 -0400 | |
|---|---|---|
| committer | 2022-08-29 02:17:16 -0400 | |
| commit | a768930761f7f20587ae40a8cacca0e55c85290a (patch) | |
| tree | 5a4163db912b93fc45f717e5e43fd5be3e66f16c /gallery_dl/extractor/gelbooru_v02.py | |
| parent | ae2a0f5622beaa6f402526f8a7b939419283a090 (diff) | |
New upstream version 1.23.0.upstream/1.23.0
Diffstat (limited to 'gallery_dl/extractor/gelbooru_v02.py')
| -rw-r--r-- | gallery_dl/extractor/gelbooru_v02.py | 55 |
1 files changed, 36 insertions, 19 deletions
diff --git a/gallery_dl/extractor/gelbooru_v02.py b/gallery_dl/extractor/gelbooru_v02.py index 35a3448..8214614 100644 --- a/gallery_dl/extractor/gelbooru_v02.py +++ b/gallery_dl/extractor/gelbooru_v02.py @@ -21,6 +21,9 @@ class GelbooruV02Extractor(booru.BooruExtractor): def __init__(self, match): booru.BooruExtractor.__init__(self, match) + self.api_key = self.config("api-key") + self.user_id = self.config("user-id") + try: self.api_root = INSTANCES[self.category]["api_root"] except KeyError: @@ -59,6 +62,24 @@ class GelbooruV02Extractor(booru.BooruExtractor): return params["pid"] += 1 + def _pagination_html(self, params): + url = self.root + "/index.php" + params["pid"] = self.page_start * self.per_page + + data = {} + while True: + num_ids = 0 + page = self.request(url, params=params).text + + for data["id"] in text.extract_iter(page, '" id="p', '"'): + num_ids += 1 + for post in self._api_request(data): + yield post.attrib + + if num_ids < self.per_page: + return + params["pid"] += self.per_page + @staticmethod def _prepare(post): post["date"] = text.parse_datetime( @@ -204,7 +225,12 @@ class GelbooruV02PoolExtractor(GelbooruV02Extractor): def __init__(self, match): GelbooruV02Extractor.__init__(self, match) self.pool_id = match.group(match.lastindex) - self.post_ids = () + + if self.category == "rule34": + self.posts = self._posts_pages + self.per_page = 45 + else: + self.post_ids = () def skip(self, num): self.page_start += num @@ -232,6 +258,13 @@ class GelbooruV02PoolExtractor(GelbooruV02Extractor): for post in self._api_request(params): yield post.attrib + def _posts_pages(self): + return self._pagination_html({ + "page": "pool", + "s" : "show", + "id" : self.pool_id, + }) + class GelbooruV02FavoriteExtractor(GelbooruV02Extractor): subcategory = "favorite" @@ -265,27 +298,11 @@ class GelbooruV02FavoriteExtractor(GelbooruV02Extractor): return {"favorite_id": text.parse_int(self.favorite_id)} def posts(self): - url = self.root + "/index.php" - params = { + return self._pagination_html({ "page": "favorites", "s" : "view", "id" : self.favorite_id, - "pid" : self.page_start * self.per_page, - } - - data = {} - while True: - num_ids = 0 - page = self.request(url, params=params).text - - for data["id"] in text.extract_iter(page, '" id="p', '"'): - num_ids += 1 - for post in self._api_request(data): - yield post.attrib - - if num_ids < self.per_page: - return - params["pid"] += self.per_page + }) class GelbooruV02PostExtractor(GelbooruV02Extractor): |
