summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/fansly.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/fansly.py')
-rw-r--r--gallery_dl/extractor/fansly.py36
1 files changed, 22 insertions, 14 deletions
diff --git a/gallery_dl/extractor/fansly.py b/gallery_dl/extractor/fansly.py
index ba60b15..8848501 100644
--- a/gallery_dl/extractor/fansly.py
+++ b/gallery_dl/extractor/fansly.py
@@ -25,11 +25,12 @@ class FanslyExtractor(Extractor):
def _init(self):
self.api = FanslyAPI(self)
+ self.previews = self.config("previews", True)
if fmts := self.config("formats"):
self.formats = set(fmts)
else:
- self.formats = {1, 2, 3, 4, 302, 303}
+ self.formats = None
def items(self):
for post in self.posts():
@@ -88,23 +89,29 @@ class FanslyExtractor(Extractor):
exc.__class__.__name__, exc)
return files
- def _extract_attachment(self, files, post, attachment):
- media = attachment["media"]
+ def _extract_attachment(self, files, post, attachment, preview=False):
+ media = attachment["preview" if preview else "media"]
variants = media.pop("variants") or []
if media.get("locations"):
variants.append(media)
+ fmts = self.formats
formats = [
(variant["width"], (type-500 if type > 256 else type), variant)
for variant in variants
if variant.get("locations") and
- (type := variant["type"]) in self.formats
+ (type := variant["type"]) and
+ (fmts is None or type in fmts)
]
try:
variant = max(formats)[-1]
except Exception:
+ if self.previews and "preview" in attachment and not preview:
+ self.log.info("%s/%s: Downloading Preview",
+ post["id"], attachment["id"])
+ return self._extract_attachment(files, post, attachment, True)
return self.log.warning("%s/%s: No format available",
post["id"], attachment["id"])
@@ -118,6 +125,7 @@ class FanslyExtractor(Extractor):
file = {
**variant,
+ "preview": preview,
"format": variant["type"],
"date": self.parse_timestamp(media["createdAt"]),
"date_updated": self.parse_timestamp(media["updatedAt"]),
@@ -135,7 +143,7 @@ class FanslyExtractor(Extractor):
files.append({
"file": file,
- "url": f"ytdl:{location['location']}",
+ "url": "ytdl:" + location["location"],
"_fallback": fallback,
"_ytdl_manifest":
"dash" if mime == "application/dash+xml" else "hls",
@@ -155,7 +163,7 @@ class FanslyExtractor(Extractor):
class FanslyPostExtractor(FanslyExtractor):
subcategory = "post"
- pattern = rf"{BASE_PATTERN}/post/(\d+)"
+ pattern = BASE_PATTERN + r"/post/(\d+)"
example = "https://fansly.com/post/1234567890"
def posts(self):
@@ -164,7 +172,7 @@ class FanslyPostExtractor(FanslyExtractor):
class FanslyHomeExtractor(FanslyExtractor):
subcategory = "home"
- pattern = rf"{BASE_PATTERN}/home(?:/(?:subscribed()|list/(\d+)))?"
+ pattern = BASE_PATTERN + r"/home(?:/(?:subscribed()|list/(\d+)))?"
example = "https://fansly.com/home"
def posts(self):
@@ -180,11 +188,11 @@ class FanslyHomeExtractor(FanslyExtractor):
class FanslyListExtractor(FanslyExtractor):
subcategory = "list"
- pattern = rf"{BASE_PATTERN}/lists/(\d+)"
+ pattern = BASE_PATTERN + r"/lists/(\d+)"
example = "https://fansly.com/lists/1234567890"
def items(self):
- base = f"{self.root}/"
+ base = self.root + "/"
for account in self.api.lists_itemsnew(self.groups[0]):
account["_extractor"] = FanslyCreatorPostsExtractor
url = f"{base}{account['username']}/posts"
@@ -193,11 +201,11 @@ class FanslyListExtractor(FanslyExtractor):
class FanslyListsExtractor(FanslyExtractor):
subcategory = "lists"
- pattern = rf"{BASE_PATTERN}/lists"
+ pattern = BASE_PATTERN + r"/lists"
example = "https://fansly.com/lists"
def items(self):
- base = f"{self.root}/lists/"
+ base = self.root + "/lists/"
for list in self.api.lists_account():
list["_extractor"] = FanslyListExtractor
url = f"{base}{list['id']}#{list['label']}"
@@ -206,7 +214,7 @@ class FanslyListsExtractor(FanslyExtractor):
class FanslyCreatorPostsExtractor(FanslyExtractor):
subcategory = "creator-posts"
- pattern = rf"{BASE_PATTERN}/([^/?#]+)/posts(?:/wall/(\d+))?"
+ pattern = BASE_PATTERN + r"/([^/?#]+)/posts(?:/wall/(\d+))?"
example = "https://fansly.com/CREATOR/posts"
def posts_wall(self, account, wall):
@@ -215,7 +223,7 @@ class FanslyCreatorPostsExtractor(FanslyExtractor):
class FanslyCreatorMediaExtractor(FanslyExtractor):
subcategory = "creator-media"
- pattern = rf"{BASE_PATTERN}/([^/?#]+)/media(?:/wall/(\d+))?"
+ pattern = BASE_PATTERN + r"/([^/?#]+)/media(?:/wall/(\d+))?"
example = "https://fansly.com/CREATOR/media"
def posts_wall(self, account, wall):
@@ -308,7 +316,7 @@ class FanslyAPI():
return self._pagination(endpoint, params)
def timeline_new(self, account_id, wall_id):
- endpoint = f"/v1/timelinenew/{account_id}"
+ endpoint = "/v1/timelinenew/" + str(account_id)
params = {
"before" : "0",
"after" : "0",