[danbooru] fix Ugoira for instances without 'Ugoira:FrameMimeType'

(#7630)

fixes regression introduced in 1866f8b97b
This commit is contained in:
Mike Fährmann
2025-06-07 07:47:03 +02:00
parent 3e423937d2
commit 6e120f2551
2 changed files with 28 additions and 13 deletions

View File

@@ -129,7 +129,7 @@ class DanbooruExtractor(BaseExtractor):
first = True
while True:
posts = self.request(url, params=params).json()
posts = self.request_json(url, params=params)
if isinstance(posts, dict):
posts = posts["posts"]
@@ -142,8 +142,7 @@ class DanbooruExtractor(BaseExtractor):
}
data = {
meta["id"]: meta
for meta in self.request(
url, params=params_meta).json()
for meta in self.request_json(url, params=params_meta)
}
for post in posts:
post.update(data[post["id"]])
@@ -165,13 +164,17 @@ class DanbooruExtractor(BaseExtractor):
first = False
def _ugoira_frames(self, post):
data = self.request("{}/posts/{}.json?only=media_metadata".format(
data = self.request_json("{}/posts/{}.json?only=media_metadata".format(
self.root, post["id"])
).json()["media_metadata"]["metadata"]
)["media_metadata"]["metadata"]
if "Ugoira:FrameMimeType" in data:
ext = data["Ugoira:FrameMimeType"].rpartition("/")[2]
if ext == "jpeg":
ext = "jpg"
else:
ext = data["ZIP:ZipFileName"].rpartition(".")[2]
fmt = ("{:>06}." + ext).format
delays = data["Ugoira:FrameDelays"]
return [{"file": fmt(index), "delay": delay}
@@ -202,7 +205,7 @@ class DanbooruExtractor(BaseExtractor):
def _collection_metadata(self, cid, ctype, cname=None):
url = "{}/{}s/{}.json".format(self.root, cname or ctype, cid)
collection = self.request(url).json()
collection = self.request_json(url)
collection["name"] = collection["name"].replace("_", " ")
self.post_ids = collection.pop("post_ids", ())
return {ctype: collection}
@@ -318,10 +321,10 @@ class DanbooruPostExtractor(DanbooruExtractor):
def posts(self):
url = "{}/posts/{}.json".format(self.root, self.groups[-1])
post = self.request(url).json()
post = self.request_json(url)
if self.includes:
params = {"only": self.includes}
post.update(self.request(url, params=params).json())
post.update(self.request_json(url, params=params))
return (post,)
@@ -360,7 +363,7 @@ class DanbooruArtistExtractor(DanbooruExtractor):
def artists(self):
url = "{}/artists/{}.json".format(self.root, self.groups[-1])
return (self.request(url).json(),)
return (self.request_json(url),)
class DanbooruArtistSearchExtractor(DanbooruExtractor):
@@ -377,7 +380,7 @@ class DanbooruArtistSearchExtractor(DanbooruExtractor):
params["page"] = text.parse_int(params.get("page"), 1)
while True:
artists = self.request(url, params=params).json()
artists = self.request_json(url, params=params)
yield from artists

View File

@@ -35,6 +35,18 @@ __tests__ = (
"#sha1_content": "54d548743cd67799a62c77cbae97cfa0fec1b7e9",
},
{
"#url" : "https://aibooru.online/posts/18315",
"#comment" : "ugoira ()",
"#category": ("Danbooru", "aibooru", "post"),
"#class" : danbooru.DanbooruPostExtractor,
"#options" : {"ugoira": True},
"#urls" : "https://cdn.aibooru.download/original/f9/6b/f96b2b3254884ab527fab0a7e9c39ba9.zip",
"_ugoira_frame_data": "len:list:60",
"_ugoira_original" : False,
},
{
"#url" : "https://aibooru.online/explore/posts/popular",
"#category": ("Danbooru", "aibooru", "popular"),