diff --git a/docs/configuration.rst b/docs/configuration.rst index 08974379..14600c39 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -1506,6 +1506,17 @@ Description * ``"manual"``: Disregard ``has_more`` and only stop when a batch of results is empty. +extractor.deviantart.png +------------------------ +Type + ``bool`` +Default + ``false`` +Description + Download the PNG version of images + for which an original file download is not available. + + extractor.deviantart.public --------------------------- Type diff --git a/gallery_dl/extractor/deviantart.py b/gallery_dl/extractor/deviantart.py index 7697ba02..cbc97d3c 100644 --- a/gallery_dl/extractor/deviantart.py +++ b/gallery_dl/extractor/deviantart.py @@ -43,6 +43,7 @@ class DeviantartExtractor(Extractor): def _init(self): self.jwt = self.config("jwt", False) + self.png = self.config("png", False) self.flat = self.config("flat", True) self.extra = self.config("extra", False) self.quality = self.config("quality", "100") @@ -65,6 +66,10 @@ class DeviantartExtractor(Extractor): self.quality = ",q_{}".format(self.quality) self.quality_sub = re.compile(r",q_\d+").sub + if self.png: + self.png = "-fullview.png?" + self.png_sub = re.compile(r"-fullview\.[a-z0-9]+\?").sub + if self.original != "image": self._update_content = self._update_content_default else: @@ -345,6 +350,9 @@ class DeviantartExtractor(Extractor): if self.quality: content["src"] = self.quality_sub( self.quality, content["src"], 1) + if self.png: + content["src"] = self.png_sub( + self.png, content["src"], 1) return content diff --git a/test/results/deviantart.py b/test/results/deviantart.py index b4f09ecf..1d5153aa 100644 --- a/test/results/deviantart.py +++ b/test/results/deviantart.py @@ -732,8 +732,7 @@ __tests__ = ( "#comment" : "journal", "#category": ("", "deviantart", "deviation"), "#class" : deviantart.DeviantartDeviationExtractor, - "#pattern" : """text: -""", + "#pattern" : """text:\n""", "#sha1_url": "d34b2c9f873423e665a1b8ced20fcb75951694a3", }, @@ -754,6 +753,22 @@ __tests__ = ( "#count" : 0, }, +{ + "#url" : "https://www.deviantart.com/colibriworkshop/art/Crimson-Pandaren-Phoenix-World-of-Warcraft-630984457", + "#comment" : "'png' option (#4846)", + "#category": ("", "deviantart", "deviation"), + "#class" : deviantart.DeviantartDeviationExtractor, + "#options" : {"png": True, "intermediary": False}, + "#sha1_content": "75fb92a820b154c061f7e1f9935260577b2365ec", + "#pattern" : r"https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com" + r"/f/d86d1faa-37a8-4bcb-b421-53331885d763/dafo6q1-5c4c999a-019e-4845-8c29-6fab2d05c8e8\.jpg" + r"/v1/fill/w_1024,h_1297,q_100,strp" + r"/crimson_pandaren_phoenix_world_of_warcraft_by_colibriworkshop_dafo6q1-fullview\.png" + r"\?token=ey.+", + + "extension": "png", +}, + { "#url" : "https://deviantart.com/view/904858796/", "#comment" : "/view/ URLs",