summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/seisoparty.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/seisoparty.py')
-rw-r--r--gallery_dl/extractor/seisoparty.py65
1 files changed, 64 insertions, 1 deletions
diff --git a/gallery_dl/extractor/seisoparty.py b/gallery_dl/extractor/seisoparty.py
index 28e049b..a2a24e0 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"""
@@ -136,3 +156,46 @@ class SeisopartyPostExtractor(SeisopartyExtractor):
url = "{}/post/{}/{}/{}".format(
self.root, self.service, self.user_id, self.post_id)
return (self._parse_post(self.request(url).text, self.post_id),)
+
+
+class SeisopartyFavoriteExtractor(SeisopartyExtractor):
+ """Extractor for seiso.party favorites"""
+ subcategory = "favorite"
+ pattern = r"(?:https?://)?seiso\.party/favorites/artists/?(?:\?([^#]+))?"
+ test = (
+ ("https://seiso.party/favorites/artists", {
+ "pattern": SeisopartyUserExtractor.pattern,
+ "url": "0c862434bc3bbbe84cbf41c3a6152473a8cde683",
+ "count": 3,
+ }),
+ ("https://seiso.party/favorites/artists?sort=id&sort_direction=asc", {
+ "url": "629a8b9c6d3a8a64f521908bdb3d7426ac03f8d3",
+ }),
+ )
+
+ def __init__(self, match):
+ SeisopartyExtractor.__init__(self, match)
+ self.query = match.group(1)
+
+ def items(self):
+ self._prepare_ddosguard_cookies()
+ self.login()
+
+ url = self.root + "/favorites/artists"
+ data = {"_extractor": SeisopartyUserExtractor}
+ params = text.parse_query(self.query)
+ params["page"] = text.parse_int(params.get("page"), 1)
+
+ while True:
+ page = self.request(url, params=params).text
+
+ cnt = 0
+ for card in text.extract_iter(
+ page, '<div class="artist-card', '</a>'):
+ path = text.extract(card, '<a href="', '"')[0]
+ yield Message.Queue, self.root + path, data
+ cnt += 1
+
+ if cnt < 25:
+ return
+ params["page"] += 1