[inkbunny] fix submission order (#283)
Getting detailed submission info via /api_submissions.php reordered the input submissions and sorted them by ID. InkbunnyAPI.detail() now sorts them back and ensures they are returned in their original order. This commit also removes the 'metadata' option and always requests submission descriptions.
This commit is contained in:
@@ -873,15 +873,6 @@ Description Controls whether to choose the GIF or MP4 version of an animation.
|
|||||||
=========== =====
|
=========== =====
|
||||||
|
|
||||||
|
|
||||||
extractor.inkbunny.metadata
|
|
||||||
---------------------------
|
|
||||||
=========== =====
|
|
||||||
Type ``bool``
|
|
||||||
Default ``false``
|
|
||||||
Description Fetch ``description``, ``writing``, and ``pools`` metadata fields.
|
|
||||||
=========== =====
|
|
||||||
|
|
||||||
|
|
||||||
extractor.inkbunny.orderby
|
extractor.inkbunny.orderby
|
||||||
--------------------------
|
--------------------------
|
||||||
=========== =====
|
=========== =====
|
||||||
|
|||||||
@@ -159,7 +159,7 @@ class InkbunnyPostExtractor(InkbunnyExtractor):
|
|||||||
self.submission_id = match.group(1)
|
self.submission_id = match.group(1)
|
||||||
|
|
||||||
def posts(self):
|
def posts(self):
|
||||||
return self.api.detail(self.submission_id)
|
return self.api.detail(({"submission_id": self.submission_id},))
|
||||||
|
|
||||||
|
|
||||||
class InkbunnyAPI():
|
class InkbunnyAPI():
|
||||||
@@ -171,16 +171,22 @@ class InkbunnyAPI():
|
|||||||
def __init__(self, extractor):
|
def __init__(self, extractor):
|
||||||
self.extractor = extractor
|
self.extractor = extractor
|
||||||
self.session_id = None
|
self.session_id = None
|
||||||
self.metadata = extractor.config("metadata")
|
|
||||||
|
|
||||||
def detail(self, submission_ids):
|
def detail(self, submissions):
|
||||||
"""Get full details about submissions with the given IDs"""
|
"""Get full details about submissions with the given IDs"""
|
||||||
params = {"submission_ids": submission_ids}
|
ids = {
|
||||||
if self.metadata:
|
sub["submission_id"]: idx
|
||||||
params["show_description"] = "yes"
|
for idx, sub in enumerate(submissions)
|
||||||
params["show_writing"] = "yes"
|
}
|
||||||
params["show_pools"] = "yes"
|
params = {
|
||||||
return self._call("submissions", params)["submissions"]
|
"submission_ids": ",".join(ids),
|
||||||
|
"show_description": "yes",
|
||||||
|
}
|
||||||
|
|
||||||
|
submissions = [None] * len(ids)
|
||||||
|
for sub in self._call("submissions", params)["submissions"]:
|
||||||
|
submissions[ids[sub["submission_id"]]] = sub
|
||||||
|
return submissions
|
||||||
|
|
||||||
def search(self, params):
|
def search(self, params):
|
||||||
"""Perform a search"""
|
"""Perform a search"""
|
||||||
@@ -221,22 +227,20 @@ class InkbunnyAPI():
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
def _pagination_search(self, params):
|
def _pagination_search(self, params):
|
||||||
|
params["page"] = 1
|
||||||
params["get_rid"] = "yes"
|
params["get_rid"] = "yes"
|
||||||
params["submission_ids_only"] = "yes"
|
params["submission_ids_only"] = "yes"
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
data = self._call("search", params)
|
data = self._call("search", params)
|
||||||
yield from self.detail(
|
yield from self.detail(data["submissions"])
|
||||||
",".join(s["submission_id"] for s in data["submissions"]))
|
|
||||||
|
|
||||||
if data["page"] >= data["pages_count"]:
|
if data["page"] >= data["pages_count"]:
|
||||||
return
|
return
|
||||||
if "get_rid" in params:
|
if "get_rid" in params:
|
||||||
del params["get_rid"]
|
del params["get_rid"]
|
||||||
params["rid"] = data["rid"]
|
params["rid"] = data["rid"]
|
||||||
params["page"] = 2
|
params["page"] += 1
|
||||||
else:
|
|
||||||
params["page"] += 1
|
|
||||||
|
|
||||||
|
|
||||||
@cache(maxage=360*24*3600, keyarg=1)
|
@cache(maxage=360*24*3600, keyarg=1)
|
||||||
|
|||||||
Reference in New Issue
Block a user