diff --git a/gallery_dl/extractor/pixiv.py b/gallery_dl/extractor/pixiv.py index c063216a..73c5c1c8 100644 --- a/gallery_dl/extractor/pixiv.py +++ b/gallery_dl/extractor/pixiv.py @@ -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},) diff --git a/test/results/pixiv.py b/test/results/pixiv.py index a65049a5..43b922b8 100644 --- a/test/results/pixiv.py +++ b/test/results/pixiv.py @@ -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)",