aboutsummaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/deviantart.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/deviantart.py')
-rw-r--r--gallery_dl/extractor/deviantart.py63
1 files changed, 44 insertions, 19 deletions
diff --git a/gallery_dl/extractor/deviantart.py b/gallery_dl/extractor/deviantart.py
index 4b5f1d7..bcfbe73 100644
--- a/gallery_dl/extractor/deviantart.py
+++ b/gallery_dl/extractor/deviantart.py
@@ -38,7 +38,7 @@ class DeviantartExtractor(Extractor):
def __init__(self, match):
Extractor.__init__(self, match)
- self.user = (match.group(1) or match.group(2)).lower()
+ self.user = (match.group(1) or match.group(2) or "").lower()
self.offset = 0
def _init(self):
@@ -452,9 +452,11 @@ class DeviantartExtractor(Extractor):
return None
dev = self.api.deviation(deviation["deviationid"], False)
- folder = dev["premium_folder_data"]
+ folder = deviation["premium_folder_data"]
username = dev["author"]["username"]
- has_access = folder["has_access"]
+
+ # premium_folder_data is no longer present when user has access (#5063)
+ has_access = ("premium_folder_data" not in dev) or folder["has_access"]
if not has_access and folder["type"] == "watchers" and \
self.config("auto-watch"):
@@ -547,22 +549,45 @@ class DeviantartAvatarExtractor(DeviantartExtractor):
example = "https://www.deviantart.com/USER/avatar/"
def deviations(self):
- profile = self.api.user_profile(self.user.lower())
- if profile:
- url = profile["user"]["usericon"]
- return ({
- "author" : profile["user"],
- "category" : "avatar",
- "index" : text.parse_int(url.rpartition("?")[2]),
- "is_deleted" : False,
- "is_downloadable": False,
- "published_time" : 0,
- "title" : "avatar",
- "content" : {
- "src": url.replace("/avatars/", "/avatars-big/", 1),
- },
- },)
- return ()
+ name = self.user.lower()
+ profile = self.api.user_profile(name)
+ if not profile:
+ return ()
+
+ user = profile["user"]
+ icon = user["usericon"]
+ index = icon.rpartition("?")[2]
+
+ formats = self.config("formats")
+ if not formats:
+ url = icon.replace("/avatars/", "/avatars-big/", 1)
+ return (self._make_deviation(url, user, index, ""),)
+
+ if isinstance(formats, str):
+ formats = formats.replace(" ", "").split(",")
+
+ results = []
+ for fmt in formats:
+ fmt, _, ext = fmt.rpartition(".")
+ if fmt:
+ fmt = "-" + fmt
+ url = "https://a.deviantart.net/avatars{}/{}/{}/{}.{}?{}".format(
+ fmt, name[0], name[1], name, ext, index)
+ results.append(self._make_deviation(url, user, index, fmt))
+ return results
+
+ def _make_deviation(self, url, user, index, fmt):
+ return {
+ "author" : user,
+ "category" : "avatar",
+ "index" : text.parse_int(index),
+ "is_deleted" : False,
+ "is_downloadable": False,
+ "published_time" : 0,
+ "title" : "avatar" + fmt,
+ "stats" : {"comments": 0},
+ "content" : {"src": url},
+ }
class DeviantartBackgroundExtractor(DeviantartExtractor):