diff options
Diffstat (limited to 'gallery_dl/extractor/deviantart.py')
| -rw-r--r-- | gallery_dl/extractor/deviantart.py | 49 |
1 files changed, 34 insertions, 15 deletions
diff --git a/gallery_dl/extractor/deviantart.py b/gallery_dl/extractor/deviantart.py index 70e268d..163d7ba 100644 --- a/gallery_dl/extractor/deviantart.py +++ b/gallery_dl/extractor/deviantart.py @@ -258,19 +258,25 @@ class DeviantartExtractor(Extractor): return Message.Url, txt, deviation @staticmethod - def _find_folder(folders, name): - match = re.compile(name.replace( - "-", r"[^a-z0-9]+") + "$", re.IGNORECASE).match - for folder in folders: - if match(folder["name"]): - return folder + def _find_folder(folders, name, uuid): + if uuid.isdecimal(): + match = re.compile(name.replace( + "-", r"[^a-z0-9]+") + "$", re.IGNORECASE).match + for folder in folders: + if match(folder["name"]): + return folder + else: + for folder in folders: + if folder["folderid"] == uuid: + return folder raise exception.NotFoundError("folder") def _folder_urls(self, folders, category, extractor): - base = "{}/{}/{}/0/".format(self.root, self.user, category) + base = "{}/{}/{}/".format(self.root, self.user, category) for folder in folders: folder["_extractor"] = extractor - yield base + folder["name"], folder + url = "{}{}/{}".format(base, folder["folderid"], folder["name"]) + yield url, folder def _update_content_default(self, deviation, content): public = "premium_folder_data" not in deviation @@ -422,7 +428,8 @@ class DeviantartGalleryExtractor(DeviantartExtractor): }), # group ("https://www.deviantart.com/yakuzafc/gallery", { - "pattern": r"https://www.deviantart.com/yakuzafc/gallery/0/", + "pattern": r"https://www.deviantart.com/yakuzafc/gallery" + r"/\w{8}-\w{4}-\w{4}-\w{4}-\w{12}/", "count": ">= 15", }), # 'folders' option (#276) @@ -461,7 +468,7 @@ class DeviantartFolderExtractor(DeviantartExtractor): subcategory = "folder" directory_fmt = ("{category}", "{username}", "{folder[title]}") archive_fmt = "F_{folder[uuid]}_{index}.{extension}" - pattern = BASE_PATTERN + r"/gallery/(\d+)/([^/?#]+)" + pattern = BASE_PATTERN + r"/gallery/([^/?#]+)/([^/?#]+)" test = ( # user ("https://www.deviantart.com/shimoda7/gallery/722019/Miscellaneous", { @@ -473,6 +480,12 @@ class DeviantartFolderExtractor(DeviantartExtractor): "count": ">= 4", "options": (("original", False),), }), + # uuid + (("https://www.deviantart.com/shimoda7/gallery" + "/B38E3C6A-2029-6B45-757B-3C8D3422AD1A/misc"), { + "count": 5, + "options": (("original", False),), + }), # name starts with '_', special characters (#1451) (("https://www.deviantart.com/justatest235723" "/gallery/69302698/-test-b-c-d-e-f-"), { @@ -491,7 +504,7 @@ class DeviantartFolderExtractor(DeviantartExtractor): def deviations(self): folders = self.api.gallery_folders(self.user) - folder = self._find_folder(folders, self.folder_name) + folder = self._find_folder(folders, self.folder_name, self.folder_id) self.folder = { "title": folder["name"], "uuid" : folder["folderid"], @@ -611,10 +624,15 @@ class DeviantartCollectionExtractor(DeviantartExtractor): directory_fmt = ("{category}", "{username}", "Favourites", "{collection[title]}") archive_fmt = "C_{collection[uuid]}_{index}.{extension}" - pattern = BASE_PATTERN + r"/favourites/(\d+)/([^/?#]+)" + pattern = BASE_PATTERN + r"/favourites/([^/?#]+)/([^/?#]+)" test = ( - (("https://www.deviantart.com/pencilshadings" - "/favourites/70595441/3D-Favorites"), { + (("https://www.deviantart.com/pencilshadings/favourites" + "/70595441/3D-Favorites"), { + "count": ">= 20", + "options": (("original", False),), + }), + (("https://www.deviantart.com/pencilshadings/favourites" + "/F050486B-CB62-3C66-87FB-1105A7F6379F/3D Favorites"), { "count": ">= 20", "options": (("original", False),), }), @@ -630,7 +648,8 @@ class DeviantartCollectionExtractor(DeviantartExtractor): def deviations(self): folders = self.api.collections_folders(self.user) - folder = self._find_folder(folders, self.collection_name) + folder = self._find_folder( + folders, self.collection_name, self.collection_id) self.collection = { "title": folder["name"], "uuid" : folder["folderid"], |
