diff --git a/docs/supportedsites.md b/docs/supportedsites.md
index c0019210..9af9dff1 100644
--- a/docs/supportedsites.md
+++ b/docs/supportedsites.md
@@ -514,7 +514,7 @@ Consider all listed sites to potentially be NSFW.
| Itaku |
https://itaku.ee/ |
- Followers, Followed Users, Galleries, individual Images, Posts, Search Results, Stars, User Profiles |
+ Bookmarks, Followers, Followed Users, Galleries, individual Images, Posts, Search Results, Stars, User Profiles |
|
diff --git a/gallery_dl/extractor/itaku.py b/gallery_dl/extractor/itaku.py
index 624fcce1..19ffc506 100644
--- a/gallery_dl/extractor/itaku.py
+++ b/gallery_dl/extractor/itaku.py
@@ -86,7 +86,7 @@ class ItakuExtractor(Extractor):
class ItakuGalleryExtractor(ItakuExtractor):
- """Extractor for images from an itaku user gallery"""
+ """Extractor for an itaku user's gallery"""
subcategory = "gallery"
pattern = USER_PATTERN + r"/gallery(?:/(\d+))?"
example = "https://itaku.ee/profile/USER/gallery"
@@ -118,6 +118,7 @@ class ItakuPostsExtractor(ItakuExtractor):
class ItakuStarsExtractor(ItakuExtractor):
+ """Extractor for an itaku user's starred images"""
subcategory = "stars"
pattern = USER_PATTERN + r"/stars(?:/(\d+))?"
example = "https://itaku.ee/profile/USER/stars"
@@ -153,6 +154,28 @@ class ItakuFollowersExtractor(ItakuExtractor):
})
+class ItakuBookmarksExtractor(ItakuExtractor):
+ """Extractor for an itaku bookmarks folder"""
+ subcategory = "bookmarks"
+ pattern = USER_PATTERN + r"/bookmarks/(image|user)/(\d+)"
+ example = "https://itaku.ee/profile/USER/bookmarks/image/12345"
+
+ def _init(self):
+ if self.groups[1] == "user":
+ self.images = util.noop
+ ItakuExtractor._init(self)
+
+ def images(self):
+ return self.api.galleries_images({
+ "bookmark_folder": self.groups[2],
+ })
+
+ def users(self):
+ return self.api.user_profiles({
+ "bookmark_folder": self.groups[2],
+ })
+
+
class ItakuUserExtractor(Dispatch, ItakuExtractor):
"""Extractor for itaku user profiles"""
pattern = USER_PATTERN + r"/?(?:$|\?|#)"
@@ -165,7 +188,7 @@ class ItakuUserExtractor(Dispatch, ItakuExtractor):
(ItakuPostsExtractor , base + "posts"),
(ItakuFollowersExtractor, base + "followers"),
(ItakuFollowingExtractor, base + "following"),
- (ItakuStarsExtractor , base + "stara"),
+ (ItakuStarsExtractor , base + "stars"),
), ("gallery",))
diff --git a/test/results/itaku.py b/test/results/itaku.py
index 39c8ac1e..28357d59 100644
--- a/test/results/itaku.py
+++ b/test/results/itaku.py
@@ -16,6 +16,19 @@ __tests__ = (
),
},
+{
+ "#url" : "https://itaku.ee/profile/piku",
+ "#class" : itaku.ItakuUserExtractor,
+ "#options" : {"include": "all"},
+ "#results" : (
+ "https://itaku.ee/profile/piku/gallery",
+ "https://itaku.ee/profile/piku/posts",
+ "https://itaku.ee/profile/piku/followers",
+ "https://itaku.ee/profile/piku/following",
+ "https://itaku.ee/profile/piku/stars",
+ ),
+},
+
{
"#url" : "https://itaku.ee/profile/piku/gallery",
"#class" : itaku.ItakuGalleryExtractor,
@@ -90,6 +103,25 @@ __tests__ = (
"#count" : 60,
},
+{
+ "#url" : "https://itaku.ee/profile/USER/bookmarks/image/13712",
+ "#class" : itaku.ItakuBookmarksExtractor,
+ "#results" : (
+ "https://itaku.ee/api/media/gallery_imgs/220511_rdGpatf.png",
+ "https://itaku.ee/api/media/gallery_imgs/220504_oUNIAFT.png",
+ "https://itaku.ee/api/media/gallery_vids/sleepy_af_OY5GHWw.mp4",
+ ),
+},
+
+{
+ "#url" : "https://itaku.ee/profile/USER/bookmarks/user/11069",
+ "#class" : itaku.ItakuBookmarksExtractor,
+ "#results" : (
+ "https://itaku.ee/profile/deliciousorange",
+ "https://itaku.ee/profile/piku",
+ ),
+},
+
{
"#url" : "https://itaku.ee/images/100471",
"#class" : itaku.ItakuImageExtractor,