diff options
Diffstat (limited to 'gallery_dl/extractor/boosty.py')
| -rw-r--r-- | gallery_dl/extractor/boosty.py | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/gallery_dl/extractor/boosty.py b/gallery_dl/extractor/boosty.py index 22f3259..5add768 100644 --- a/gallery_dl/extractor/boosty.py +++ b/gallery_dl/extractor/boosty.py @@ -49,6 +49,9 @@ class BoostyExtractor(Extractor): self.videos = videos def items(self): + headers = self.api.headers.copy() + del headers["Accept"] + for post in self.posts(): if not post.get("hasAccess"): self.log.warning("Not allowed to access post %s", post["id"]) @@ -61,9 +64,10 @@ class BoostyExtractor(Extractor): "post" : post, "user" : post.pop("user", None), "count": len(files), + "_http_headers": headers, } - yield Message.Directory, data + yield Message.Directory, "", data for data["num"], file in enumerate(files, 1): data["file"] = file url = file["url"] @@ -78,7 +82,7 @@ class BoostyExtractor(Extractor): post["links"] = links = [] if "createdAt" in post: - post["date"] = text.parse_timestamp(post["createdAt"]) + post["date"] = self.parse_timestamp(post["createdAt"]) for block in post["data"]: try: @@ -159,7 +163,7 @@ class BoostyExtractor(Extractor): class BoostyUserExtractor(BoostyExtractor): """Extractor for boosty.to user profiles""" subcategory = "user" - pattern = BASE_PATTERN + r"/([^/?#]+)(?:\?([^#]+))?$" + pattern = rf"{BASE_PATTERN}/([^/?#]+)(?:\?([^#]+))?$" example = "https://boosty.to/USER" def posts(self): @@ -175,7 +179,7 @@ class BoostyMediaExtractor(BoostyExtractor): subcategory = "media" directory_fmt = "{category}", "{user[blogUrl]} ({user[id]})", "media" filename_fmt = "{post[id]}_{num}.{extension}" - pattern = BASE_PATTERN + r"/([^/?#]+)/media/([^/?#]+)(?:\?([^#]+))?" + pattern = rf"{BASE_PATTERN}/([^/?#]+)/media/([^/?#]+)(?:\?([^#]+))?" example = "https://boosty.to/USER/media/all" def posts(self): @@ -188,7 +192,7 @@ class BoostyMediaExtractor(BoostyExtractor): class BoostyFeedExtractor(BoostyExtractor): """Extractor for your boosty.to subscription feed""" subcategory = "feed" - pattern = BASE_PATTERN + r"/(?:\?([^#]+))?(?:$|#)" + pattern = rf"{BASE_PATTERN}/(?:\?([^#]+))?(?:$|#)" example = "https://boosty.to/" def posts(self): @@ -199,7 +203,7 @@ class BoostyFeedExtractor(BoostyExtractor): class BoostyPostExtractor(BoostyExtractor): """Extractor for boosty.to posts""" subcategory = "post" - pattern = BASE_PATTERN + r"/([^/?#]+)/posts/([0-9a-f-]+)" + pattern = rf"{BASE_PATTERN}/([^/?#]+)/posts/([0-9a-f-]+)" example = "https://boosty.to/USER/posts/01234567-89ab-cdef-0123-456789abcd" def posts(self): @@ -212,7 +216,7 @@ class BoostyPostExtractor(BoostyExtractor): class BoostyFollowingExtractor(BoostyExtractor): """Extractor for your boosty.to subscribed users""" subcategory = "following" - pattern = BASE_PATTERN + r"/app/settings/subscriptions" + pattern = rf"{BASE_PATTERN}/app/settings/subscriptions" example = "https://boosty.to/app/settings/subscriptions" def items(self): @@ -227,7 +231,7 @@ class BoostyDirectMessagesExtractor(BoostyExtractor): subcategory = "direct-messages" directory_fmt = ("{category}", "{user[blogUrl]} ({user[id]})", "Direct Messages") - pattern = BASE_PATTERN + r"/app/messages/?\?dialogId=(\d+)" + pattern = rf"{BASE_PATTERN}/app/messages/?\?dialogId=(\d+)" example = "https://boosty.to/app/messages?dialogId=12345" def items(self): @@ -260,7 +264,7 @@ class BoostyDirectMessagesExtractor(BoostyExtractor): "count": len(files), } - yield Message.Directory, data + yield Message.Directory, "", data for data["num"], file in enumerate(files, 1): data["file"] = file url = file["url"] @@ -280,8 +284,12 @@ class BoostyAPI(): if not access_token: if auth := self.extractor.cookies.get("auth", domain=".boosty.to"): - access_token = text.extr( - text.unquote(auth), '"accessToken":"', '"') + auth = text.unquote(auth) + access_token = text.extr(auth, '"accessToken":"', '"') + if expires := text.extr(auth, '"expiresAt":', ','): + import time + if text.parse_int(expires) < time.time() * 1000: + extractor.log.warning("'auth' cookie tokens expired") if access_token: self.headers["Authorization"] = "Bearer " + access_token |
