From 03b1d42dfd17118f4e53e4a9a631588c0bb4f7e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Sun, 20 Apr 2025 21:06:50 +0200 Subject: [PATCH] [deviantart] simplify 'additionalMedia' extraction --- gallery_dl/extractor/deviantart.py | 36 ++++++++++++++++-------------- 1 file changed, 19 insertions(+), 17 deletions(-) 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"]