[gelbooru_v02] use total number of posts as end marker (#5830)

… and potentially retry on empty responses
pull/5870/head
Mike Fährmann 2 months ago
parent 6110e3f940
commit 51fd14f87d
No known key found for this signature in database
GPG Key ID: 5680CA389D365A88

@ -36,7 +36,9 @@ class GelbooruV02Extractor(booru.BooruExtractor):
params["pid"] = self.page_start params["pid"] = self.page_start
params["limit"] = self.per_page params["limit"] = self.per_page
post = None post = total = None
count = 0
while True: while True:
try: try:
root = self._api_request(params) root = self._api_request(params)
@ -50,12 +52,29 @@ class GelbooruV02Extractor(booru.BooruExtractor):
params["pid"] = 0 params["pid"] = 0
continue continue
if total is None:
try:
total = int(root.attrib["count"])
self.log.debug("%s posts in total", total)
except Exception as exc:
total = 0
self.log.debug(
"Failed to get total number of posts (%s: %s)",
exc.__class__.__name__, exc)
post = None post = None
for post in root: for post in root:
yield post.attrib yield post.attrib
if len(root) < self.per_page: num = len(root)
return count += num
if num < self.per_page:
if not total or count >= total:
return
if not num:
self.log.debug("Empty response - Retrying")
continue
params["pid"] += 1 params["pid"] += 1
def _pagination_html(self, params): def _pagination_html(self, params):

Loading…
Cancel
Save