[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:
Mike Fährmann
2020-07-26 23:12:45 +02:00
parent e50c75628c
commit b921fee24d
2 changed files with 18 additions and 23 deletions

View File

@@ -159,7 +159,7 @@ class InkbunnyPostExtractor(InkbunnyExtractor):
self.submission_id = match.group(1)
def posts(self):
return self.api.detail(self.submission_id)
return self.api.detail(({"submission_id": self.submission_id},))
class InkbunnyAPI():
@@ -171,16 +171,22 @@ class InkbunnyAPI():
def __init__(self, extractor):
self.extractor = extractor
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"""
params = {"submission_ids": submission_ids}
if self.metadata:
params["show_description"] = "yes"
params["show_writing"] = "yes"
params["show_pools"] = "yes"
return self._call("submissions", params)["submissions"]
ids = {
sub["submission_id"]: idx
for idx, sub in enumerate(submissions)
}
params = {
"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):
"""Perform a search"""
@@ -221,22 +227,20 @@ class InkbunnyAPI():
return data
def _pagination_search(self, params):
params["page"] = 1
params["get_rid"] = "yes"
params["submission_ids_only"] = "yes"
while True:
data = self._call("search", params)
yield from self.detail(
",".join(s["submission_id"] for s in data["submissions"]))
yield from self.detail(data["submissions"])
if data["page"] >= data["pages_count"]:
return
if "get_rid" in params:
del params["get_rid"]
params["rid"] = data["rid"]
params["page"] = 2
else:
params["page"] += 1
params["page"] += 1
@cache(maxage=360*24*3600, keyarg=1)