diff options
Diffstat (limited to 'gallery_dl/extractor/deviantart.py')
| -rw-r--r-- | gallery_dl/extractor/deviantart.py | 61 |
1 files changed, 40 insertions, 21 deletions
diff --git a/gallery_dl/extractor/deviantart.py b/gallery_dl/extractor/deviantart.py index bcfbe73..0cf4f88 100644 --- a/gallery_dl/extractor/deviantart.py +++ b/gallery_dl/extractor/deviantart.py @@ -62,7 +62,12 @@ class DeviantartExtractor(Extractor): self.unwatch = None if self.quality: - self.quality = ",q_{}".format(self.quality) + if self.quality == "png": + self.quality = "-fullview.png?" + self.quality_sub = re.compile(r"-fullview\.[a-z0-9]+\?").sub + else: + self.quality = ",q_{}".format(self.quality) + self.quality_sub = re.compile(r",q_\d+").sub if self.original != "image": self._update_content = self._update_content_default @@ -119,6 +124,12 @@ class DeviantartExtractor(Extractor): "Skipping %s (deleted)", deviation["deviationid"]) continue + tier_access = deviation.get("tier_access") + if tier_access == "locked": + self.log.debug( + "Skipping %s (access locked)", deviation["deviationid"]) + continue + if "premium_folder_data" in deviation: data = self._fetch_premium(deviation) if not data: @@ -129,26 +140,7 @@ class DeviantartExtractor(Extractor): yield Message.Directory, deviation if "content" in deviation: - content = deviation["content"] - - if self.original and deviation["is_downloadable"]: - self._update_content(deviation, content) - elif self.jwt: - self._update_token(deviation, content) - elif content["src"].startswith("https://images-wixmp-"): - if self.intermediary and deviation["index"] <= 790677560: - # https://github.com/r888888888/danbooru/issues/4069 - intermediary, count = re.subn( - r"(/f/[^/]+/[^/]+)/v\d+/.*", - r"/intermediary\1", content["src"], 1) - if count: - deviation["is_original"] = False - deviation["_fallback"] = (content["src"],) - content["src"] = intermediary - if self.quality: - content["src"] = re.sub( - r",q_\d+", self.quality, content["src"], 1) - + content = self._extract_content(deviation) yield self.commit(deviation, content) elif deviation["is_downloadable"]: @@ -333,6 +325,33 @@ class DeviantartExtractor(Extractor): deviation["extension"] = "txt" return Message.Url, txt, deviation + def _extract_content(self, deviation): + content = deviation["content"] + + if self.original and deviation["is_downloadable"]: + self._update_content(deviation, content) + return content + + if self.jwt: + self._update_token(deviation, content) + return content + + if content["src"].startswith("https://images-wixmp-"): + if self.intermediary and deviation["index"] <= 790677560: + # https://github.com/r888888888/danbooru/issues/4069 + intermediary, count = re.subn( + r"(/f/[^/]+/[^/]+)/v\d+/.*", + r"/intermediary\1", content["src"], 1) + if count: + deviation["is_original"] = False + deviation["_fallback"] = (content["src"],) + content["src"] = intermediary + if self.quality: + content["src"] = self.quality_sub( + self.quality, content["src"], 1) + + return content + @staticmethod def _find_folder(folders, name, uuid): if uuid.isdecimal(): |
