Mike Fährmann 6 months ago
parent 72ac2c750d
commit 9cce461627
No known key found for this signature in database
GPG Key ID: 5680CA389D365A88

@ -2317,6 +2317,16 @@ Description
Extract a user's direct messages as ``dms`` metadata. Extract a user's direct messages as ``dms`` metadata.
extractor.kemonoparty.announcements
-----------------------------------
Type
``bool``
Default
``false``
Description
Extract a user's announcements as ``announcements`` metadata.
extractor.kemonoparty.favorites extractor.kemonoparty.favorites
------------------------------- -------------------------------
Type Type

@ -57,7 +57,7 @@ class KemonopartyExtractor(Extractor):
generators = self._build_file_generators(self.config("files")) generators = self._build_file_generators(self.config("files"))
duplicates = self.config("duplicates") duplicates = self.config("duplicates")
comments = self.config("comments") comments = self.config("comments")
username = dms = None username = dms = announcements = None
# prevent files from being sent with gzip compression # prevent files from being sent with gzip compression
headers = {"Accept-Encoding": "identity"} headers = {"Accept-Encoding": "identity"}
@ -68,6 +68,8 @@ class KemonopartyExtractor(Extractor):
'<meta name="artist_name" content="', '"')[0]) '<meta name="artist_name" content="', '"')[0])
if self.config("dms"): if self.config("dms"):
dms = True dms = True
if self.config("announcements"):
announcements = True
posts = self.posts() posts = self.posts()
max_posts = self.config("max-posts") max_posts = self.config("max-posts")
@ -88,8 +90,12 @@ class KemonopartyExtractor(Extractor):
post["comments"] = self._extract_comments(post) post["comments"] = self._extract_comments(post)
if dms is not None: if dms is not None:
if dms is True: if dms is True:
dms = self._extract_dms(post) dms = self._extract_cards(post, "dms")
post["dms"] = dms post["dms"] = dms
if announcements is not None:
if announcements is True:
announcements = self._extract_cards(post, "announcements")
post["announcements"] = announcements
files = [] files = []
hashes = set() hashes = set()
@ -200,21 +206,21 @@ class KemonopartyExtractor(Extractor):
}) })
return comments return comments
def _extract_dms(self, post): def _extract_cards(self, post, type):
url = "{}/{}/user/{}/dms".format( url = "{}/{}/user/{}/{}".format(
self.root, post["service"], post["user"]) self.root, post["service"], post["user"], type)
page = self.request(url).text page = self.request(url).text
dms = [] cards = []
for dm in text.extract_iter(page, "<article", "</article>"): for card in text.extract_iter(page, "<article", "</article>"):
footer = text.extr(dm, "<footer", "</footer>") footer = text.extr(card, "<footer", "</footer>")
dms.append({ cards.append({
"body": text.unescape(text.extr( "body": text.unescape(text.extr(
dm, "<pre>", "</pre></", card, "<pre>", "</pre></",
).strip()), ).strip()),
"date": text.extr(footer, 'Published: ', '\n'), "date": text.extr(footer, ': ', '\n'),
}) })
return dms return cards
def _parse_datetime(self, date_string): def _parse_datetime(self, date_string):
if len(date_string) > 19: if len(date_string) > 19:

@ -135,6 +135,19 @@ __tests__ = (
}], }],
}, },
{
"#url" : "https://kemono.su/patreon/user/3161935/post/68231671",
"#comment" : "announcements",
"#category": ("", "kemonoparty", "patreon"),
"#class" : kemonoparty.KemonopartyPostExtractor,
"#options" : {"announcements": True},
"announcements": [{
"body": "<div><strong>Thank you so much for the support!</strong><strong><br></strong>This Patreon is more of a tip jar for supporting what I make. I have to clarify that there are <strong>no exclusive Patreon animations</strong> because all are released for the public. You will get earlier access to WIPs. Direct downloads to my works are also available for $5 and $10 Tiers.</div>",
"date": "2023-02",
}],
},
{ {
"#url" : "https://kemono.su/patreon/user/19623797/post/29035449", "#url" : "https://kemono.su/patreon/user/19623797/post/29035449",
"#comment" : "invalid file (#3510)", "#comment" : "invalid file (#3510)",

Loading…
Cancel
Save