diff options
Diffstat (limited to 'gallery_dl/extractor/fansly.py')
| -rw-r--r-- | gallery_dl/extractor/fansly.py | 36 |
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", |
