[pixiv] Implement sanity handling for ugoira works (#4327 #6297 #7285 #7434)

* [pixiv] Implement sanity handling for ugoira works

* [pixiv] fix PEP formatting for sanity ugoira handling

* [pixiv] update Ugoira AJAX error message

* [pixiv] respect disabled 'ugoira' option

* [tests] add 'limit_sanity_level' ugoira test

---------

Co-authored-by: Mike Fährmann <mike_faehrmann@web.de>
This commit is contained in:
prowlguru
2025-05-21 20:01:09 +00:00
committed by GitHub
parent 3ba4404d21
commit b8f3ca6c4e
2 changed files with 33 additions and 3 deletions

View File

@@ -136,7 +136,21 @@ class PixivExtractor(Extractor):
self.log.warning("%s: 'limit_sanity_level' warning", work_id)
if self.sanity_workaround:
body = self._request_ajax("/illust/" + str(work_id))
return self._extract_ajax(work, body)
if work["type"] == "ugoira":
if not self.load_ugoira:
return ()
self.log.info("%s: Retrieving Ugoira AJAX metadata",
work["id"])
try:
self._extract_ajax(work, body)
return self._extract_ugoira(work, url)
except Exception as exc:
self.log.debug("", exc_info=exc)
self.log.warning(
"%s: Unable to extract Ugoira URL. Provide "
"logged-in cookies to access it", work["id"])
else:
return self._extract_ajax(work, body)
elif limit_type == "limit_mypixiv_360.png":
work["_mypixiv"] = True
@@ -161,7 +175,12 @@ class PixivExtractor(Extractor):
return ()
def _extract_ugoira(self, work, img_url):
ugoira = self.api.ugoira_metadata(work["id"])
if work.get("_ajax"):
ugoira = self._request_ajax(
"/illust/" + str(work["id"]) + "/ugoira_meta")
img_url = ugoira["src"]
else:
ugoira = self.api.ugoira_metadata(work["id"])
work["_ugoira_frame_data"] = work["frames"] = frames = ugoira["frames"]
work["_ugoira_original"] = self.load_ugoira_original
work["_http_adjust_extension"] = False
@@ -198,7 +217,10 @@ class PixivExtractor(Extractor):
]
else:
zip_url = ugoira["zip_urls"]["medium"]
if work.get("_ajax"):
zip_url = ugoira["originalSrc"]
else:
zip_url = ugoira["zip_urls"]["medium"]
work["date_url"] = self._date_from_url(zip_url)
url = zip_url.replace("_ugoira600x600", "_ugoira1920x1080", 1)
return ({"url": url},)

View File

@@ -286,6 +286,14 @@ __tests__ = (
],
},
{
"#url" : "https://www.pixiv.net/en/artworks/103841583",
"#comment" : "Ugoira limit_sanity_level_360.png (#4327 #6297 #7285)",
"#class" : pixiv.PixivWorkExtractor,
"#auth" : True,
"#urls" : "https://i.pximg.net/img-zip-ugoira/img/2022/12/23/23/36/13/103841583_ugoira1920x1080.zip",
},
{
"#url" : "https://www.pixiv.net/en/artworks/104582860",
"#comment" : "deleted limit_sanity_level_360.png work (#6339)",