diff --git a/gallery_dl/extractor/deviantart.py b/gallery_dl/extractor/deviantart.py index c754379f..98f8e5e9 100644 --- a/gallery_dl/extractor/deviantart.py +++ b/gallery_dl/extractor/deviantart.py @@ -93,9 +93,11 @@ class DeviantartExtractor(Extractor): if content["src"].startswith("https://images-wixmp-"): if deviation["index"] <= 790677560: # https://github.com/r888888888/danbooru/issues/4069 - content["src"] = re.sub( + intermediary, count = re.subn( r"(/f/[^/]+/[^/]+)/v\d+/.*", r"/intermediary\1", content["src"]) + if count and self._check_url(intermediary): + content["src"] = intermediary if self.quality: content["src"] = re.sub( r"q_\d+", self.quality, content["src"]) @@ -261,6 +263,9 @@ class DeviantartExtractor(Extractor): if mtype and mtype.startswith("image/"): content.update(data) + def _check_url(self, url): + return self.request(url, method="HEAD", fatal=False).status_code < 400 + class DeviantartUserExtractor(DeviantartExtractor): """Extractor for an artist's user profile""" @@ -737,8 +742,10 @@ class DeviantartExtractorV2(DeviantartExtractor): if src.startswith("https://images-wixmp-"): if deviation["index"] <= 790677560: # https://github.com/r888888888/danbooru/issues/4069 - src = re.sub( + intermediary, count = re.subn( r"(/f/[^/]+/[^/]+)/v\d+/.*", r"/intermediary\1", src) + if count and self._check_url(intermediary): + src = intermediary if self.quality: src = re.sub(r"q_\d+", self.quality, src)