[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

@@ -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
-------------------------- --------------------------
=========== ===== =========== =====

View File

@@ -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)