diff --git a/gallery_dl/extractor/deviantart.py b/gallery_dl/extractor/deviantart.py index 378c7ecc..72bfcdcf 100644 --- a/gallery_dl/extractor/deviantart.py +++ b/gallery_dl/extractor/deviantart.py @@ -1276,28 +1276,30 @@ class DeviantartDeviationExtractor(DeviantartExtractor): deviation = self.api.deviation(uuid) deviation["_page"] = page - - _dev_info = text.extr( - page, '\\"deviationExtended\\":', ',\\"deviation\\":', None) - # Clean up escaped quotes - _json_str = re.sub( - r'(?02}.{extension}") - self.archive_fmt = ("g_{_username}_{index}{index_file:?_//}." - "{extension}") - deviation["index_file"] = 0 + deviation["num"] = deviation["count"] = 1 + + additional_media = text.extr(page, ',\\"additionalMedia\\":', '}],\\"') + if not additional_media: + yield deviation + return + + self.filename_fmt = ("{category}_{index}_{index_file}_{title}_" + "{num:>02}.{extension}") + self.archive_fmt = ("g_{_username}_{index}{index_file:?_//}." + "{extension}") + + additional_media = util.json_loads( + # unescape quotes: \" -> " + # unescape backslashes: \\ -> \ + # add closing braces + additional_media.replace('\\"', '"').replace("\\\\", "\\") + "}]") + deviation["count"] = 1 + len(additional_media) - deviation["num"] = 1 yield deviation for index, post in enumerate(additional_media): - uri = post["media"]["baseUri"].encode().decode("unicode-escape") + uri = post["media"]["baseUri"] deviation["content"]["src"] = uri deviation["num"] += 1 deviation["index_file"] = post["fileId"]