diff --git a/docs/configuration.rst b/docs/configuration.rst index 3b6da408..cb6d9dc9 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -373,6 +373,7 @@ Description * ``mangoxo`` * ``pillowfort`` * ``sankaku`` + * ``seisoparty`` * ``subscribestar`` * ``tapas`` * ``tsumino`` diff --git a/docs/supportedsites.md b/docs/supportedsites.md index 466ca885..13b0fa34 100644 --- a/docs/supportedsites.md +++ b/docs/supportedsites.md @@ -671,7 +671,7 @@ Consider all sites to be NSFW unless otherwise known. Seiso https://seiso.party/ Favorites, Posts, User Profiles - + Supported Sen Manga diff --git a/gallery_dl/extractor/seisoparty.py b/gallery_dl/extractor/seisoparty.py index 91b43332..a2a24e0c 100644 --- a/gallery_dl/extractor/seisoparty.py +++ b/gallery_dl/extractor/seisoparty.py @@ -9,7 +9,8 @@ """Extractors for https://seiso.party/""" from .common import Extractor, Message -from .. import text +from .. import text, exception +from ..cache import cache import re @@ -52,6 +53,25 @@ class SeisopartyExtractor(Extractor): "files" : self._find_files(page), } + def login(self): + username, password = self._get_auth_info() + if username: + self._update_cookies(self._login_impl(username, password)) + + @cache(maxage=28*24*3600, keyarg=1) + def _login_impl(self, username, password): + self.log.info("Logging in as %s", username) + + url = self.root + "/account/login" + data = {"username": username, "password": password} + + response = self.request(url, method="POST", data=data) + if response.url.endswith("/account/login") and \ + "Username or password is incorrect" in response.text: + raise exception.AuthenticationError() + + return {c.name: c.value for c in response.history[0].cookies} + class SeisopartyUserExtractor(SeisopartyExtractor): """Extractor for all posts from a seiso.party user listing""" @@ -144,10 +164,12 @@ class SeisopartyFavoriteExtractor(SeisopartyExtractor): pattern = r"(?:https?://)?seiso\.party/favorites/artists/?(?:\?([^#]+))?" test = ( ("https://seiso.party/favorites/artists", { - "count": 0, + "pattern": SeisopartyUserExtractor.pattern, + "url": "0c862434bc3bbbe84cbf41c3a6152473a8cde683", + "count": 3, }), - ("https://seiso.party/favorites/artists?page=2&sort=id", { - "count": 0, + ("https://seiso.party/favorites/artists?sort=id&sort_direction=asc", { + "url": "629a8b9c6d3a8a64f521908bdb3d7426ac03f8d3", }), ) @@ -157,6 +179,7 @@ class SeisopartyFavoriteExtractor(SeisopartyExtractor): def items(self): self._prepare_ddosguard_cookies() + self.login() url = self.root + "/favorites/artists" data = {"_extractor": SeisopartyUserExtractor} diff --git a/scripts/supportedsites.py b/scripts/supportedsites.py index 03689877..ba857952 100755 --- a/scripts/supportedsites.py +++ b/scripts/supportedsites.py @@ -238,6 +238,7 @@ AUTH_MAP = { "reddit" : _OAUTH, "sankaku" : "Supported", "seiga" : "Required", + "seisoparty" : "Supported", "smugmug" : _OAUTH, "subscribestar" : "Supported", "tapas" : "Supported",