Skip to content

Commit

Permalink
[pixiv] fix 'sanity_level' workaround (#4327)
Browse files Browse the repository at this point in the history
The App API now returns
https://s.pximg.net/common/images/limit_unviewable_360.png
as URL for "Work cannot be displayed" artworks.
  • Loading branch information
mikf committed Jan 27, 2025
1 parent 61d80df commit db9cee2
Showing 1 changed file with 29 additions and 13 deletions.
42 changes: 29 additions & 13 deletions gallery_dl/extractor/pixiv.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,10 @@ class PixivExtractor(Extractor):
filename_fmt = "{id}_p{num}.{extension}"
archive_fmt = "{id}{suffix}.{extension}"
cookies_domain = ".pixiv.net"
sanity_url = "https://s.pximg.net/common/images/limit_sanity_level_360.png"
mypixiv_url = "https://s.pximg.net/common/images/limit_mypixiv_360.png"
limit_url = "https://s.pximg.net/common/images/limit_"
# https://s.pximg.net/common/images/limit_sanity_level_360.png
# https://s.pximg.net/common/images/limit_unviewable_360.png
# https://s.pximg.net/common/images/limit_mypixiv_360.png

def _init(self):
self.api = PixivAppAPI(self)
Expand Down Expand Up @@ -117,16 +119,30 @@ def _extract_files(self, work):
]

url = meta_single_page["original_image_url"]
if url == self.sanity_url:
work["_ajax"] = True
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 url.startswith(self.limit_url):
work_id = work["id"]
self.log.debug("%s: %s", work_id, url)

limit_type = url.rpartition("/")[2]
if limit_type in (
"limit_", # for '_extend_sanity()' inserts
"limit_unviewable_360.png",
"limit_sanity_level_360.png",
):
work["_ajax"] = True
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)

elif limit_type == "limit_mypixiv_360.png":
work["_mypixiv"] = True
self.log.warning("%s: 'My pixiv' locked", work_id)

elif url == self.mypixiv_url:
work["_mypixiv"] = True
self.log.warning("%s: 'My pixiv' locked", work["id"])
else:
work["_mypixiv"] = True # stop further processing
self.log.error("%s: Unknown 'limit' URL type: %s",
work_id, limit_type)

elif work["type"] != "ugoira":
return ({"url": url, "_fallback": self._fallback_image(url)},)
Expand Down Expand Up @@ -430,7 +446,7 @@ def _extend_sanity(self, works, ajax_ids):
elif ajax_id > work_id:
index -= 1
self.log.debug("Inserting work %s", ajax_id)
yield self._make_work(ajax_id, self.sanity_url, user)
yield self._make_work(ajax_id, self.limit_url, user)

else: # ajax_id < work_id
break
Expand All @@ -440,7 +456,7 @@ def _extend_sanity(self, works, ajax_ids):
while index >= 0:
ajax_id = ajax_ids[index]
self.log.debug("Inserting work %s", ajax_id)
yield self._make_work(ajax_id, self.sanity_url, user)
yield self._make_work(ajax_id, self.limit_url, user)
index -= 1


Expand Down

0 comments on commit db9cee2

Please sign in to comment.