summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/kemonoparty.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/kemonoparty.py')
-rw-r--r--gallery_dl/extractor/kemonoparty.py50
1 files changed, 35 insertions, 15 deletions
diff --git a/gallery_dl/extractor/kemonoparty.py b/gallery_dl/extractor/kemonoparty.py
index 9c77b7a..b0c24de 100644
--- a/gallery_dl/extractor/kemonoparty.py
+++ b/gallery_dl/extractor/kemonoparty.py
@@ -57,7 +57,7 @@ class KemonopartyExtractor(Extractor):
generators = self._build_file_generators(self.config("files"))
duplicates = self.config("duplicates")
comments = self.config("comments")
- username = dms = None
+ username = dms = announcements = None
# prevent files from being sent with gzip compression
headers = {"Accept-Encoding": "identity"}
@@ -68,6 +68,8 @@ class KemonopartyExtractor(Extractor):
'<meta name="artist_name" content="', '"')[0])
if self.config("dms"):
dms = True
+ if self.config("announcements"):
+ announcements = True
posts = self.posts()
max_posts = self.config("max-posts")
@@ -80,7 +82,7 @@ class KemonopartyExtractor(Extractor):
self.root, post["service"], post["user"], post["id"])
post["_http_headers"] = headers
post["date"] = self._parse_datetime(
- post["published"] or post["added"])
+ post.get("published") or post.get("added") or "")
if username:
post["username"] = username
@@ -88,8 +90,12 @@ class KemonopartyExtractor(Extractor):
post["comments"] = self._extract_comments(post)
if dms is not None:
if dms is True:
- dms = self._extract_dms(post)
+ dms = self._extract_cards(post, "dms")
post["dms"] = dms
+ if announcements is not None:
+ if announcements is True:
+ announcements = self._extract_cards(post, "announcements")
+ post["announcements"] = announcements
files = []
hashes = set()
@@ -156,7 +162,7 @@ class KemonopartyExtractor(Extractor):
def _file(self, post):
file = post["file"]
- if not file:
+ if not file or "path" not in file:
return ()
file["type"] = "file"
return (file,)
@@ -200,21 +206,21 @@ class KemonopartyExtractor(Extractor):
})
return comments
- def _extract_dms(self, post):
- url = "{}/{}/user/{}/dms".format(
- self.root, post["service"], post["user"])
+ def _extract_cards(self, post, type):
+ url = "{}/{}/user/{}/{}".format(
+ self.root, post["service"], post["user"], type)
page = self.request(url).text
- dms = []
- for dm in text.extract_iter(page, "<article", "</article>"):
- footer = text.extr(dm, "<footer", "</footer>")
- dms.append({
+ cards = []
+ for card in text.extract_iter(page, "<article", "</article>"):
+ footer = text.extr(card, "<footer", "</footer>")
+ cards.append({
"body": text.unescape(text.extr(
- dm, "<pre>", "</pre></",
+ card, "<pre>", "</pre></",
).strip()),
- "date": text.extr(footer, 'Published: ', '\n'),
+ "date": text.extr(footer, ': ', '\n'),
})
- return dms
+ return cards
def _parse_datetime(self, date_string):
if len(date_string) > 19:
@@ -494,7 +500,8 @@ class KemonopartyFavoriteExtractor(KemonopartyExtractor):
def __init__(self, match):
KemonopartyExtractor.__init__(self, match)
- self.favorites = (text.parse_query(match.group(3)).get("type") or
+ self.params = text.parse_query(match.group(3))
+ self.favorites = (self.params.get("type") or
self.config("favorites") or
"artist")
@@ -502,9 +509,17 @@ class KemonopartyFavoriteExtractor(KemonopartyExtractor):
self._prepare_ddosguard_cookies()
self.login()
+ sort = self.params.get("sort")
+ order = self.params.get("order") or "desc"
+
if self.favorites == "artist":
users = self.request(
self.root + "/api/v1/account/favorites?type=artist").json()
+
+ if not sort:
+ sort = "updated"
+ users.sort(key=lambda x: x[sort], reverse=(order == "desc"))
+
for user in users:
user["_extractor"] = KemonopartyUserExtractor
url = "{}/{}/user/{}".format(
@@ -514,6 +529,11 @@ class KemonopartyFavoriteExtractor(KemonopartyExtractor):
elif self.favorites == "post":
posts = self.request(
self.root + "/api/v1/account/favorites?type=post").json()
+
+ if not sort:
+ sort = "faved_seq"
+ posts.sort(key=lambda x: x[sort], reverse=(order == "desc"))
+
for post in posts:
post["_extractor"] = KemonopartyPostExtractor
url = "{}/{}/user/{}/post/{}".format(