diff --git a/docs/supportedsites.rst b/docs/supportedsites.rst index 0b0cf0ca..20b271a8 100644 --- a/docs/supportedsites.rst +++ b/docs/supportedsites.rst @@ -129,7 +129,7 @@ Twitter https://twitter.com/ |twitter-C| VSCO https://vsco.co/ Collections, individual Images, User Profiles Wallhaven https://wallhaven.cc/ individual Images, Search Results Optional (`API Key `__) Warosu https://warosu.org/ Threads -Weasyl https://www.weasyl.com/ Folders, Journals, Submissions +Weasyl https://www.weasyl.com/ Favorites, Folders, Journals, Submissions Webtoon https://www.webtoons.com/ Comics, Episodes Weibo https://www.weibo.com/ Images from Statuses, User Profiles WikiArt.org https://www.wikiart.org/ Artists, Artist Listings, Artworks diff --git a/gallery_dl/extractor/weasyl.py b/gallery_dl/extractor/weasyl.py index e61cb6f4..a39fbf17 100644 --- a/gallery_dl/extractor/weasyl.py +++ b/gallery_dl/extractor/weasyl.py @@ -193,3 +193,44 @@ class WeasylJournalsExtractor(WeasylExtractor): for journalid in text.extract_iter(page, 'href="/journal/', '/'): data = self.retrieve_journal(journalid) yield Message.Url, data["html"], data + + +class WeasylFavoriteExtractor(WeasylExtractor): + subcategory = "favorite" + directory_fmt = ("{category}", "{owner_login}", "Favorites") + pattern = BASE_PATTERN + r"favorites\?userid=(\d+)&feature=submit" + test = ("https://www.weasyl.com/favorites?userid=184616&feature=submit", { + "count": ">= 5", + }) + + def __init__(self, match): + WeasylExtractor.__init__(self, match) + self.userid = match.group(1) + + def items(self): + owner_login = lastid = None + url = self.root + "/favorites" + params = { + "userid" : self.userid, + "feature": "submit", + } + + while True: + page = self.request(url, params=params).text + pos = page.index('id="favorites-content"') + + if not owner_login: + owner_login = text.extract(page, '