diff options
| author | 2025-03-15 18:05:15 -0400 | |
|---|---|---|
| committer | 2025-03-15 18:05:15 -0400 | |
| commit | 8026a3c45446030d7af524bfc487d3462c8114ef (patch) | |
| tree | 0818c682a06f620c08a8b6b4c07f4935bd79493a /gallery_dl/extractor/furaffinity.py | |
| parent | 243d1f1beb4e4eb75a524f1aff948c47761a4f1d (diff) | |
New upstream version 1.29.2.upstream/1.29.2
Diffstat (limited to 'gallery_dl/extractor/furaffinity.py')
| -rw-r--r-- | gallery_dl/extractor/furaffinity.py | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/gallery_dl/extractor/furaffinity.py b/gallery_dl/extractor/furaffinity.py index 216aeb1..565fd71 100644 --- a/gallery_dl/extractor/furaffinity.py +++ b/gallery_dl/extractor/furaffinity.py @@ -97,6 +97,7 @@ class FuraffinityExtractor(Extractor): if self._new_layout: data["tags"] = text.split_html(extr( 'class="tags-row">', '</section>')) + data["scraps"] = (extr(' submissions">', "<") == "Scraps") data["title"] = text.unescape(extr("<h2><p>", "</p></h2>")) data["artist_url"] = extr('title="', '"').strip() data["artist"] = extr(">", "<") @@ -121,6 +122,8 @@ class FuraffinityExtractor(Extractor): folders.append(folder) else: # old site layout + data["scraps"] = ( + "/scraps/" in extr('class="minigallery-title', "</a>")) data["title"] = text.unescape(extr("<h2>", "</h2>")) data["artist_url"] = extr('title="', '"').strip() data["artist"] = extr(">", "<") @@ -153,12 +156,13 @@ class FuraffinityExtractor(Extractor): def _process_description(description): return text.unescape(text.remove_html(description, "", "")) - def _pagination(self, path): + def _pagination(self, path, folder=None): num = 1 + folder = "" if folder is None else "/folder/{}/a".format(folder) while True: - url = "{}/{}/{}/{}/".format( - self.root, path, self.user, num) + url = "{}/{}/{}{}/{}/".format( + self.root, path, self.user, folder, num) page = self.request(url).text post_id = None @@ -232,13 +236,31 @@ class FuraffinityExtractor(Extractor): class FuraffinityGalleryExtractor(FuraffinityExtractor): """Extractor for a furaffinity user's gallery""" subcategory = "gallery" - pattern = BASE_PATTERN + r"/gallery/([^/?#]+)" + pattern = BASE_PATTERN + r"/gallery/([^/?#]+)(?:$|/(?!folder/))" example = "https://www.furaffinity.net/gallery/USER/" def posts(self): return self._pagination("gallery") +class FuraffinityFolderExtractor(FuraffinityExtractor): + """Extractor for a FurAffinity folder""" + subcategory = "folder" + directory_fmt = ("{category}", "{user!l}", + "Folders", "{folder_id}{folder_name:? //}") + pattern = BASE_PATTERN + r"/gallery/([^/?#]+)/folder/(\d+)(?:/([^/?#]+))?" + example = "https://www.furaffinity.net/gallery/USER/folder/12345/FOLDER" + + def metadata(self): + return { + "folder_id" : self.groups[1], + "folder_name": self.groups[2] or "", + } + + def posts(self): + return self._pagination("gallery", self.groups[1]) + + class FuraffinityScrapsExtractor(FuraffinityExtractor): """Extractor for a furaffinity user's scraps""" subcategory = "scraps" |
