diff options
| author | 2025-10-14 00:23:10 -0400 | |
|---|---|---|
| committer | 2025-10-14 00:23:10 -0400 | |
| commit | 33f8a8a37a9cba738ef25fb99955f0730da9eb48 (patch) | |
| tree | b51fb48b160f5e5e034e6b4542e6f00703bae7ec /gallery_dl/extractor/bluesky.py | |
| parent | bbe7fac03d881662a458e7fbf870c9d71f5257f4 (diff) | |
New upstream version 1.30.10.upstream/1.30.10
Diffstat (limited to 'gallery_dl/extractor/bluesky.py')
| -rw-r--r-- | gallery_dl/extractor/bluesky.py | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/gallery_dl/extractor/bluesky.py b/gallery_dl/extractor/bluesky.py index e2c5334..e8c5707 100644 --- a/gallery_dl/extractor/bluesky.py +++ b/gallery_dl/extractor/bluesky.py @@ -44,6 +44,8 @@ class BlueskyExtractor(Extractor): for post in self.posts(): if "post" in post: post = post["post"] + elif "item" in post: + post = post["item"] if self._user_did and post["author"]["did"] != self._user_did: self.log.debug("Skipping %s (repost)", self._pid(post)) continue @@ -148,9 +150,15 @@ class BlueskyExtractor(Extractor): if "images" in media: for image in media["images"]: - files.append(self._extract_media(image, "image")) + try: + files.append(self._extract_media(image, "image")) + except Exception: + pass if "video" in media and self.videos: - files.append(self._extract_media(media, "video")) + try: + files.append(self._extract_media(media, "video")) + except Exception: + pass post["count"] = len(files) return files @@ -372,6 +380,15 @@ class BlueskyHashtagExtractor(BlueskyExtractor): return self.api.search_posts("#"+hashtag, order) +class BlueskyBookmarkExtractor(BlueskyExtractor): + subcategory = "bookmark" + pattern = BASE_PATTERN + r"/saved" + example = "https://bsky.app/saved" + + def posts(self): + return self.api.get_bookmarks() + + class BlueskyAPI(): """Interface for the Bluesky API @@ -407,6 +424,10 @@ class BlueskyAPI(): } return self._pagination(endpoint, params) + def get_bookmarks(self): + endpoint = "app.bsky.bookmark.getBookmarks" + return self._pagination(endpoint, {}, "bookmarks", check_empty=True) + def get_feed(self, actor, feed): endpoint = "app.bsky.feed.getFeed" uri = (f"at://{self._did_from_actor(actor)}" |
