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