summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/gelbooru_v02.py
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2021-10-05 23:30:05 -0400
committerLibravatarUnit 193 <unit193@unit193.net>2021-10-05 23:30:05 -0400
commit34ba2951b8c523713425c98addb9256ea05c946f (patch)
tree6ec7e96d0c6e6f6e94b6b97ecd8c0a414ceef93d /gallery_dl/extractor/gelbooru_v02.py
parent3f5483df9075ae526f4c54f4cbe80edeabf6d4cc (diff)
New upstream version 1.19.0.upstream/1.19.0
Diffstat (limited to 'gallery_dl/extractor/gelbooru_v02.py')
-rw-r--r--gallery_dl/extractor/gelbooru_v02.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/gallery_dl/extractor/gelbooru_v02.py b/gallery_dl/extractor/gelbooru_v02.py
index 1b877b3..e09e190 100644
--- a/gallery_dl/extractor/gelbooru_v02.py
+++ b/gallery_dl/extractor/gelbooru_v02.py
@@ -176,6 +176,58 @@ class GelbooruV02PoolExtractor(GelbooruV02Extractor):
yield post.attrib
+class GelbooruV02FavoriteExtractor(GelbooruV02Extractor):
+ subcategory = "favorite"
+ directory_fmt = ("{category}", "favorites", "{favorite_id}")
+ archive_fmt = "f_{favorite_id}_{id}"
+ per_page = 50
+ pattern = BASE_PATTERN + r"/index\.php\?page=favorites&s=view&id=(\d+)"
+ test = (
+ ("https://rule34.xxx/index.php?page=favorites&s=view&id=1030218", {
+ "count": 3,
+ }),
+ ("https://safebooru.org/index.php?page=favorites&s=view&id=17567", {
+ "count": 2,
+ }),
+ ("https://realbooru.com/index.php?page=favorites&s=view&id=274", {
+ "count": 4,
+ }),
+ ("https://tbib.org/index.php?page=favorites&s=view&id=7881", {
+ "count": 3,
+ }),
+ )
+
+ def __init__(self, match):
+ GelbooruV02Extractor.__init__(self, match)
+ self.favorite_id = match.group(match.lastindex)
+
+ def metadata(self):
+ return {"favorite_id": text.parse_int(self.favorite_id)}
+
+ def posts(self):
+ url = self.root + "/index.php"
+ params = {
+ "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):
subcategory = "post"
archive_fmt = "{id}"