From da292ded4ee03525abed849049f26a7948d008d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Thu, 8 Feb 2024 21:24:07 +0100 Subject: [PATCH] [bluesky] add 'list' extractor (#4438) --- gallery_dl/extractor/bluesky.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/gallery_dl/extractor/bluesky.py b/gallery_dl/extractor/bluesky.py index 35b19e6b..64ee7ec3 100644 --- a/gallery_dl/extractor/bluesky.py +++ b/gallery_dl/extractor/bluesky.py @@ -135,6 +135,19 @@ class BlueskyFeedExtractor(BlueskyExtractor): return self.api.get_feed(self.user, self.feed) +class BlueskyListExtractor(BlueskyExtractor): + subcategory = "list" + pattern = BASE_PATTERN + r"/profile/([^/?#]+)/lists/([^/?#]+)" + example = "https://bsky.app/profile/HANDLE/lists/ID" + + def __init__(self, match): + BlueskyExtractor.__init__(self, match) + self.list = match.group(2) + + def posts(self): + return self.api.get_list_feed(self.user, self.list) + + class BlueskyPostExtractor(BlueskyExtractor): subcategory = "post" pattern = BASE_PATTERN + r"/profile/([^/?#]+)/post/([^/?#]+)" @@ -192,6 +205,15 @@ class BlueskyAPI(): } return self._pagination(endpoint, params) + def get_list_feed(self, actor, list): + endpoint = "app.bsky.feed.getListFeed" + params = { + "list" : "at://{}/app.bsky.graph.list/{}".format( + self._did_from_actor(actor), list), + "limit": "100", + } + return self._pagination(endpoint, params) + def get_post_thread(self, actor, post_id): endpoint = "app.bsky.feed.getPostThread" params = {