summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/deviantart.py
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2021-02-16 21:35:52 -0500
committerLibravatarUnit 193 <unit193@unit193.net>2021-02-16 21:35:52 -0500
commitfc83315c164afd74734adf27e0f7fec2011904aa (patch)
treed5976be93924dc4cd76c41e5e3f13bb44b6516b3 /gallery_dl/extractor/deviantart.py
parent2e29d2158d56879e5578dfabf9e8c0fa2e855ccf (diff)
New upstream version 1.16.5.upstream/1.16.5
Diffstat (limited to 'gallery_dl/extractor/deviantart.py')
-rw-r--r--gallery_dl/extractor/deviantart.py46
1 files changed, 34 insertions, 12 deletions
diff --git a/gallery_dl/extractor/deviantart.py b/gallery_dl/extractor/deviantart.py
index a58401e..2eb3b28 100644
--- a/gallery_dl/extractor/deviantart.py
+++ b/gallery_dl/extractor/deviantart.py
@@ -176,10 +176,11 @@ class DeviantartExtractor(Extractor):
@staticmethod
def commit(deviation, target):
url = target["src"]
+ name = target.get("filename") or url
target = target.copy()
target["filename"] = deviation["filename"]
deviation["target"] = target
- deviation["extension"] = target["extension"] = text.ext_from_url(url)
+ deviation["extension"] = target["extension"] = text.ext_from_url(name)
return Message.Url, url, deviation
def _commit_journal_html(self, deviation, journal):
@@ -722,7 +723,7 @@ class DeviantartPopularExtractor(DeviantartExtractor):
def deviations(self):
return self.api.browse_popular(
- self.search_term, self.time_range, self.category_path, self.offset)
+ self.search_term, self.time_range, self.offset)
def prepare(self, deviation):
DeviantartExtractor.prepare(self, deviation)
@@ -917,13 +918,16 @@ class DeviantartOAuthAPI():
self.client_id,
)
- def browse_popular(self, query=None, timerange=None,
- category_path=None, offset=0):
+ def browse_popular(self, query=None, timerange=None, offset=0):
"""Yield popular deviations"""
endpoint = "browse/popular"
- params = {"q": query, "offset": offset, "limit": 120,
- "timerange": timerange, "category_path": category_path,
- "mature_content": self.mature}
+ params = {
+ "q" : query,
+ "limit" : 50 if self.metadata else 120,
+ "timerange" : timerange,
+ "offset" : offset,
+ "mature_content": self.mature,
+ }
return self._pagination(endpoint, params)
def browse_user_journals(self, username, offset=0):
@@ -1127,13 +1131,31 @@ class DeviantartOAuthAPI():
self.log.info("Collecting folder information for '%s'", username)
folders = self.gallery_folders(username)
+ # create 'folderid'-to-'folder' mapping
+ fmap = {
+ folder["folderid"]: folder
+ for folder in folders
+ }
+
# add parent names to folders, but ignore "Featured" as parent
- fmap = {}
featured = folders[0]["folderid"]
- for folder in folders:
- if folder["parent"] and folder["parent"] != featured:
- folder["name"] = fmap[folder["parent"]] + "/" + folder["name"]
- fmap[folder["folderid"]] = folder["name"]
+ done = False
+
+ while not done:
+ done = True
+ for folder in folders:
+ parent = folder["parent"]
+ if not parent:
+ pass
+ elif parent == featured:
+ folder["parent"] = None
+ else:
+ parent = fmap[parent]
+ if parent["parent"]:
+ done = False
+ else:
+ folder["name"] = parent["name"] + "/" + folder["name"]
+ folder["parent"] = None
# map deviationids to folder names
dmap = collections.defaultdict(list)