diff options
Diffstat (limited to 'gallery_dl/extractor/bluesky.py')
| -rw-r--r-- | gallery_dl/extractor/bluesky.py | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/gallery_dl/extractor/bluesky.py b/gallery_dl/extractor/bluesky.py index e8c5707..c981608 100644 --- a/gallery_dl/extractor/bluesky.py +++ b/gallery_dl/extractor/bluesky.py @@ -14,7 +14,7 @@ from ..cache import cache, memcache BASE_PATTERN = (r"(?:https?://)?" r"(?:(?:www\.)?(?:c|[fv]x)?bs[ky]y[ex]?\.app|main\.bsky\.dev)") -USER_PATTERN = BASE_PATTERN + r"/profile/([^/?#]+)" +USER_PATTERN = rf"{BASE_PATTERN}/profile/([^/?#]+)" class BlueskyExtractor(Extractor): @@ -60,7 +60,7 @@ class BlueskyExtractor(Extractor): self._prepare(post) files = self._extract_files(post) - yield Message.Directory, post + yield Message.Directory, "", post if files: did = post["author"]["did"] base = (f"{self.api.service_endpoint(did)}/xrpc" @@ -135,8 +135,7 @@ class BlueskyExtractor(Extractor): post["instance"] = self.instance post["post_id"] = self._pid(post) - post["date"] = text.parse_datetime( - post["createdAt"][:19], "%Y-%m-%dT%H:%M:%S") + post["date"] = self.parse_datetime_iso(post["createdAt"][:19]) def _extract_files(self, post): if "embed" not in post: @@ -217,7 +216,7 @@ class BlueskyExtractor(Extractor): class BlueskyUserExtractor(Dispatch, BlueskyExtractor): - pattern = USER_PATTERN + r"$" + pattern = rf"{USER_PATTERN}$" example = "https://bsky.app/profile/HANDLE" def items(self): @@ -238,7 +237,7 @@ class BlueskyUserExtractor(Dispatch, BlueskyExtractor): class BlueskyPostsExtractor(BlueskyExtractor): subcategory = "posts" - pattern = USER_PATTERN + r"/posts" + pattern = rf"{USER_PATTERN}/posts" example = "https://bsky.app/profile/HANDLE/posts" def posts(self): @@ -248,7 +247,7 @@ class BlueskyPostsExtractor(BlueskyExtractor): class BlueskyRepliesExtractor(BlueskyExtractor): subcategory = "replies" - pattern = USER_PATTERN + r"/replies" + pattern = rf"{USER_PATTERN}/replies" example = "https://bsky.app/profile/HANDLE/replies" def posts(self): @@ -258,7 +257,7 @@ class BlueskyRepliesExtractor(BlueskyExtractor): class BlueskyMediaExtractor(BlueskyExtractor): subcategory = "media" - pattern = USER_PATTERN + r"/media" + pattern = rf"{USER_PATTERN}/media" example = "https://bsky.app/profile/HANDLE/media" def posts(self): @@ -268,7 +267,7 @@ class BlueskyMediaExtractor(BlueskyExtractor): class BlueskyVideoExtractor(BlueskyExtractor): subcategory = "video" - pattern = USER_PATTERN + r"/video" + pattern = rf"{USER_PATTERN}/video" example = "https://bsky.app/profile/HANDLE/video" def posts(self): @@ -278,7 +277,7 @@ class BlueskyVideoExtractor(BlueskyExtractor): class BlueskyLikesExtractor(BlueskyExtractor): subcategory = "likes" - pattern = USER_PATTERN + r"/likes" + pattern = rf"{USER_PATTERN}/likes" example = "https://bsky.app/profile/HANDLE/likes" def posts(self): @@ -289,7 +288,7 @@ class BlueskyLikesExtractor(BlueskyExtractor): class BlueskyFeedExtractor(BlueskyExtractor): subcategory = "feed" - pattern = USER_PATTERN + r"/feed/([^/?#]+)" + pattern = rf"{USER_PATTERN}/feed/([^/?#]+)" example = "https://bsky.app/profile/HANDLE/feed/NAME" def posts(self): @@ -299,7 +298,7 @@ class BlueskyFeedExtractor(BlueskyExtractor): class BlueskyListExtractor(BlueskyExtractor): subcategory = "list" - pattern = USER_PATTERN + r"/lists/([^/?#]+)" + pattern = rf"{USER_PATTERN}/lists/([^/?#]+)" example = "https://bsky.app/profile/HANDLE/lists/ID" def posts(self): @@ -309,7 +308,7 @@ class BlueskyListExtractor(BlueskyExtractor): class BlueskyFollowingExtractor(BlueskyExtractor): subcategory = "following" - pattern = USER_PATTERN + r"/follows" + pattern = rf"{USER_PATTERN}/follows" example = "https://bsky.app/profile/HANDLE/follows" def items(self): @@ -321,7 +320,7 @@ class BlueskyFollowingExtractor(BlueskyExtractor): class BlueskyPostExtractor(BlueskyExtractor): subcategory = "post" - pattern = USER_PATTERN + r"/post/([^/?#]+)" + pattern = rf"{USER_PATTERN}/post/([^/?#]+)" example = "https://bsky.app/profile/HANDLE/post/ID" def posts(self): @@ -331,19 +330,19 @@ class BlueskyPostExtractor(BlueskyExtractor): class BlueskyInfoExtractor(BlueskyExtractor): subcategory = "info" - pattern = USER_PATTERN + r"/info" + pattern = rf"{USER_PATTERN}/info" example = "https://bsky.app/profile/HANDLE/info" def items(self): self._metadata_user = True self.api._did_from_actor(self.groups[0]) - return iter(((Message.Directory, self._user),)) + return iter(((Message.Directory, "", self._user),)) class BlueskyAvatarExtractor(BlueskyExtractor): subcategory = "avatar" filename_fmt = "avatar_{post_id}.{extension}" - pattern = USER_PATTERN + r"/avatar" + pattern = rf"{USER_PATTERN}/avatar" example = "https://bsky.app/profile/HANDLE/avatar" def posts(self): @@ -353,7 +352,7 @@ class BlueskyAvatarExtractor(BlueskyExtractor): class BlueskyBackgroundExtractor(BlueskyExtractor): subcategory = "background" filename_fmt = "background_{post_id}.{extension}" - pattern = USER_PATTERN + r"/ba(?:nner|ckground)" + pattern = rf"{USER_PATTERN}/ba(?:nner|ckground)" example = "https://bsky.app/profile/HANDLE/banner" def posts(self): @@ -362,7 +361,7 @@ class BlueskyBackgroundExtractor(BlueskyExtractor): class BlueskySearchExtractor(BlueskyExtractor): subcategory = "search" - pattern = BASE_PATTERN + r"/search(?:/|\?q=)(.+)" + pattern = rf"{BASE_PATTERN}/search(?:/|\?q=)(.+)" example = "https://bsky.app/search?q=QUERY" def posts(self): @@ -372,7 +371,7 @@ class BlueskySearchExtractor(BlueskyExtractor): class BlueskyHashtagExtractor(BlueskyExtractor): subcategory = "hashtag" - pattern = BASE_PATTERN + r"/hashtag/([^/?#]+)(?:/(top|latest))?" + pattern = rf"{BASE_PATTERN}/hashtag/([^/?#]+)(?:/(top|latest))?" example = "https://bsky.app/hashtag/NAME" def posts(self): @@ -382,7 +381,7 @@ class BlueskyHashtagExtractor(BlueskyExtractor): class BlueskyBookmarkExtractor(BlueskyExtractor): subcategory = "bookmark" - pattern = BASE_PATTERN + r"/saved" + pattern = rf"{BASE_PATTERN}/saved" example = "https://bsky.app/saved" def posts(self): @@ -401,7 +400,9 @@ class BlueskyAPI(): self.headers = {"Accept": "application/json"} self.username, self.password = extractor._get_auth_info() - if self.username: + if srv := extractor.config("api-server", False): + self.root = srv.rstrip("/") + elif self.username: self.root = "https://bsky.social" else: self.root = "https://api.bsky.app" |
