summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/inkbunny.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/inkbunny.py')
-rw-r--r--gallery_dl/extractor/inkbunny.py100
1 files changed, 95 insertions, 5 deletions
diff --git a/gallery_dl/extractor/inkbunny.py b/gallery_dl/extractor/inkbunny.py
index cbe0f43..3d09d79 100644
--- a/gallery_dl/extractor/inkbunny.py
+++ b/gallery_dl/extractor/inkbunny.py
@@ -135,33 +135,123 @@ class InkbunnyUserExtractor(InkbunnyExtractor):
return self.api.search(params)
+class InkbunnyPoolExtractor(InkbunnyExtractor):
+ """Extractor for inkbunny pools"""
+ subcategory = "pool"
+ pattern = (BASE_PATTERN + r"/(?:"
+ r"poolview_process\.php\?pool_id=(\d+)|"
+ r"submissionsviewall\.php\?([^#]+&mode=pool&[^#]+))")
+ test = (
+ ("https://inkbunny.net/poolview_process.php?pool_id=28985", {
+ "count": 9,
+ }),
+ ("https://inkbunny.net/submissionsviewall.php?rid=ffffffffff"
+ "&mode=pool&pool_id=28985&page=1&orderby=pool_order&random=no"),
+ )
+
+ def __init__(self, match):
+ InkbunnyExtractor.__init__(self, match)
+ pid = match.group(1)
+ if pid:
+ self.pool_id = pid
+ self.orderby = "pool_order"
+ else:
+ params = text.parse_query(match.group(2))
+ self.pool_id = params.get("pool_id")
+ self.orderby = params.get("orderby", "pool_order")
+
+ def posts(self):
+ params = {
+ "pool_id": self.pool_id,
+ "orderby": self.orderby,
+ }
+ return self.api.search(params)
+
+
class InkbunnyFavoriteExtractor(InkbunnyExtractor):
"""Extractor for inkbunny user favorites"""
subcategory = "favorite"
- pattern = BASE_PATTERN + r"/userfavorites_process\.php\?favs_user_id=(\d+)"
+ pattern = (BASE_PATTERN + r"/(?:"
+ r"userfavorites_process\.php\?favs_user_id=(\d+)|"
+ r"submissionsviewall\.php\?([^#]+&mode=userfavs&[^#]+))")
test = (
("https://inkbunny.net/userfavorites_process.php?favs_user_id=20969", {
"pattern": r"https://[\w.]+\.metapix\.net/files/full"
r"/\d+/\d+_\w+_.+",
"range": "20-50",
}),
+ ("https://inkbunny.net/submissionsviewall.php?rid=ffffffffff"
+ "&mode=userfavs&random=no&orderby=fav_datetime&page=1&user_id=20969"),
)
def __init__(self, match):
InkbunnyExtractor.__init__(self, match)
- self.user_id = match.group(1)
+ uid = match.group(1)
+ if uid:
+ self.user_id = uid
+ self.orderby = self.config("orderby", "fav_datetime")
+ else:
+ params = text.parse_query(match.group(2))
+ self.user_id = params.get("user_id")
+ self.orderby = params.get("orderby", "fav_datetime")
def posts(self):
- orderby = self.config("orderby", "fav_datetime")
params = {
"favs_user_id": self.user_id,
- "orderby" : orderby,
+ "orderby" : self.orderby,
}
- if orderby and orderby.startswith("unread_"):
+ if self.orderby and self.orderby.startswith("unread_"):
params["unread_submissions"] = "yes"
return self.api.search(params)
+class InkbunnyFollowingExtractor(InkbunnyExtractor):
+ """Extractor for inkbunny user watches"""
+ subcategory = "following"
+ pattern = (BASE_PATTERN + r"/(?:"
+ r"watchlist_process\.php\?mode=watching&user_id=(\d+)|"
+ r"usersviewall\.php\?([^#]+&mode=watching&[^#]+))")
+ test = (
+ (("https://inkbunny.net/watchlist_process.php"
+ "?mode=watching&user_id=20969"), {
+ "pattern": InkbunnyUserExtractor.pattern,
+ "count": ">= 90",
+ }),
+ ("https://inkbunny.net/usersviewall.php?rid=ffffffffff"
+ "&mode=watching&page=1&user_id=20969&orderby=added&namesonly="),
+ )
+
+ def __init__(self, match):
+ InkbunnyExtractor.__init__(self, match)
+ self.user_id = match.group(1) or \
+ text.parse_query(match.group(2)).get("user_id")
+
+ def items(self):
+ url = self.root + "/watchlist_process.php"
+ params = {"mode": "watching", "user_id": self.user_id}
+
+ with self.request(url, params=params) as response:
+ url, _, params = response.url.partition("?")
+ page = response.text
+
+ params = text.parse_query(params)
+ params["page"] = text.parse_int(params.get("page"), 1)
+ data = {"_extractor": InkbunnyUserExtractor}
+
+ while True:
+ cnt = 0
+ for user in text.extract_iter(
+ page, '<a class="widget_userNameSmall" href="', '"',
+ page.index('id="changethumboriginal_form"')):
+ cnt += 1
+ yield Message.Queue, self.root + user, data
+
+ if cnt < 20:
+ return
+ params["page"] += 1
+ page = self.request(url, params=params).text
+
+
class InkbunnyPostExtractor(InkbunnyExtractor):
"""Extractor for individual Inkbunny posts"""
subcategory = "post"