aboutsummaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/danbooru.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/danbooru.py')
-rw-r--r--gallery_dl/extractor/danbooru.py26
1 files changed, 20 insertions, 6 deletions
diff --git a/gallery_dl/extractor/danbooru.py b/gallery_dl/extractor/danbooru.py
index f104556..326b53b 100644
--- a/gallery_dl/extractor/danbooru.py
+++ b/gallery_dl/extractor/danbooru.py
@@ -26,6 +26,7 @@ class DanbooruExtractor(BaseExtractor):
BaseExtractor.__init__(self, match)
self.ugoira = self.config("ugoira", False)
self.external = self.config("external", False)
+ self.includes = False
threshold = self.config("threshold")
if isinstance(threshold, int):
@@ -54,6 +55,7 @@ class DanbooruExtractor(BaseExtractor):
includes = ",".join(includes)
elif not isinstance(includes, str):
includes = "artist_commentary,children,notes,parent,uploader"
+ self.includes = includes + ",id"
data = self.metadata()
for post in self.posts():
@@ -77,11 +79,6 @@ class DanbooruExtractor(BaseExtractor):
url = post["large_file_url"]
post["extension"] = "webm"
- if includes:
- meta_url = "{}/posts/{}.json?only={}".format(
- self.root, post["id"], includes)
- post.update(self.request(meta_url).json())
-
if url[0] == "/":
url = self.root + url
@@ -104,6 +101,19 @@ class DanbooruExtractor(BaseExtractor):
posts = self.request(url, params=params).json()
if "posts" in posts:
posts = posts["posts"]
+
+ if self.includes and posts:
+ if not pages and "only" not in params:
+ params["page"] = "b{}".format(posts[0]["id"] + 1)
+ params["only"] = self.includes
+ data = {
+ meta["id"]: meta
+ for meta in self.request(url, params=params).json()
+ }
+ for post in posts:
+ post.update(data[post["id"]])
+ params["only"] = None
+
yield from posts
if len(posts) < self.threshold:
@@ -255,7 +265,11 @@ class DanbooruPostExtractor(DanbooruExtractor):
def posts(self):
url = "{}/posts/{}.json".format(self.root, self.post_id)
- return (self.request(url).json(),)
+ post = self.request(url).json()
+ if self.includes:
+ params = {"only": self.includes}
+ post.update(self.request(url, params=params).json())
+ return (post,)
class DanbooruPopularExtractor(DanbooruExtractor):