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",