aboutsummaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/boosty.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/boosty.py')
-rw-r--r--gallery_dl/extractor/boosty.py30
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