aboutsummaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/bluesky.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/bluesky.py')
-rw-r--r--gallery_dl/extractor/bluesky.py20
1 files changed, 18 insertions, 2 deletions
diff --git a/gallery_dl/extractor/bluesky.py b/gallery_dl/extractor/bluesky.py
index bbff17c..f60ea15 100644
--- a/gallery_dl/extractor/bluesky.py
+++ b/gallery_dl/extractor/bluesky.py
@@ -75,10 +75,13 @@ class BlueskyExtractor(Extractor):
quote = embed["record"]
if "record" in quote:
quote = quote["record"]
+ value = quote.pop("value", None)
+ if value is None:
+ break
quote["quote_id"] = self._pid(post)
quote["quote_by"] = post["author"]
embed = quote.get("embed")
- quote.update(quote.pop("value"))
+ quote.update(value)
post = quote
def posts(self):
@@ -202,6 +205,7 @@ class BlueskyUserExtractor(BlueskyExtractor):
def items(self):
base = "{}/profile/{}/".format(self.root, self.user)
return self._dispatch_extractors((
+ (BlueskyInfoExtractor , base + "info"),
(BlueskyAvatarExtractor , base + "avatar"),
(BlueskyBackgroundExtractor, base + "banner"),
(BlueskyPostsExtractor , base + "posts"),
@@ -298,6 +302,17 @@ class BlueskyPostExtractor(BlueskyExtractor):
return self.api.get_post_thread(self.user, self.post_id)
+class BlueskyInfoExtractor(BlueskyExtractor):
+ subcategory = "info"
+ pattern = USER_PATTERN + r"/info"
+ example = "https://bsky.app/profile/HANDLE/info"
+
+ def items(self):
+ self._metadata_user = True
+ self.api._did_from_actor(self.user)
+ return iter(((Message.Directory, self._user),))
+
+
class BlueskyAvatarExtractor(BlueskyExtractor):
subcategory = "avatar"
filename_fmt = "avatar_{post_id}.{extension}"
@@ -324,7 +339,8 @@ class BlueskySearchExtractor(BlueskyExtractor):
example = "https://bsky.app/search?q=QUERY"
def posts(self):
- return self.api.search_posts(self.user)
+ query = text.unquote(self.user.replace("+", " "))
+ return self.api.search_posts(query)
class BlueskyHashtagExtractor(BlueskyExtractor):