- single revision https://kemono.party/SERVICE/user/12345/post/12345/revision/12345 - all revisions https://kemono.party/SERVICE/user/12345/post/12345/revisions
This commit is contained in:
@@ -211,6 +211,10 @@ class KemonopartyExtractor(Extractor):
|
||||
self.root, server)
|
||||
return self.request(url).json()
|
||||
|
||||
@memcache(keyarg=1)
|
||||
def _post_revisions(self, url):
|
||||
return self.request(url + "/revisions").json()
|
||||
|
||||
|
||||
def _validate(response):
|
||||
return (response.headers["content-length"] != "9" or
|
||||
@@ -248,11 +252,12 @@ class KemonopartyUserExtractor(KemonopartyExtractor):
|
||||
class KemonopartyPostExtractor(KemonopartyExtractor):
|
||||
"""Extractor for a single kemono.party post"""
|
||||
subcategory = "post"
|
||||
pattern = USER_PATTERN + r"/post/([^/?#]+)"
|
||||
pattern = USER_PATTERN + r"/post/([^/?#]+)(/revisions?(?:/(\d*))?)?"
|
||||
example = "https://kemono.party/SERVICE/user/12345/post/12345"
|
||||
|
||||
def __init__(self, match):
|
||||
_, _, service, user_id, post_id = match.groups()
|
||||
_, _, service, user_id, post_id, self.revision, self.revision_id = \
|
||||
match.groups()
|
||||
self.subcategory = service
|
||||
KemonopartyExtractor.__init__(self, match)
|
||||
self.api_url = "{}/api/v1/{}/user/{}/post/{}".format(
|
||||
@@ -260,7 +265,18 @@ class KemonopartyPostExtractor(KemonopartyExtractor):
|
||||
self.user_url = "{}/{}/user/{}".format(self.root, service, user_id)
|
||||
|
||||
def posts(self):
|
||||
return (self.request(self.api_url).json(),)
|
||||
if not self.revision:
|
||||
return (self.request(self.api_url).json(),)
|
||||
|
||||
revs = self._post_revisions(self.api_url)
|
||||
if not self.revision_id:
|
||||
return revs
|
||||
|
||||
for rev in revs:
|
||||
if str(rev["revision_id"]) == self.revision_id:
|
||||
return (rev,)
|
||||
|
||||
raise exception.NotFoundError("revision")
|
||||
|
||||
|
||||
class KemonopartyDiscordExtractor(KemonopartyExtractor):
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
# published by the Free Software Foundation.
|
||||
|
||||
from gallery_dl.extractor import kemonoparty
|
||||
from gallery_dl import exception
|
||||
|
||||
|
||||
__tests__ = (
|
||||
@@ -154,6 +155,37 @@ __tests__ = (
|
||||
"#class" : kemonoparty.KemonopartyPostExtractor,
|
||||
},
|
||||
|
||||
{
|
||||
"#url" : "https://kemono.party/patreon/user/3161935/post/68231671/revision/134996",
|
||||
"#comment" : "revisions (#4498)",
|
||||
"#category": ("", "kemonoparty", "patreon"),
|
||||
"#class" : kemonoparty.KemonopartyPostExtractor,
|
||||
"#urls" : "https://kemono.party/data/88/52/88521f71822dfa2f42df3beba319ea4fceda2a2d6dc59da0276a75238f743f86.jpg",
|
||||
|
||||
"revision_id": 134996,
|
||||
},
|
||||
|
||||
{
|
||||
"#url" : "https://kemono.party/patreon/user/3161935/post/68231671/revisions",
|
||||
"#comment" : "revisions (#4498)",
|
||||
"#category": ("", "kemonoparty", "patreon"),
|
||||
"#class" : kemonoparty.KemonopartyPostExtractor,
|
||||
"#pattern" : r"https://kemono\.party/data/88/52/88521f71822dfa2f42df3beba319ea4fceda2a2d6dc59da0276a75238f743f86\.jpg",
|
||||
"#count" : 9,
|
||||
"#archive" : False,
|
||||
|
||||
"revision_id": range(134996, 3052965),
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
"#url" : "https://kemono.party/patreon/user/3161935/post/68231671/revision/12345",
|
||||
"#comment" : "revisions (#4498)",
|
||||
"#category": ("", "kemonoparty", "patreon"),
|
||||
"#class" : kemonoparty.KemonopartyPostExtractor,
|
||||
"#exception": exception.NotFoundError,
|
||||
},
|
||||
|
||||
{
|
||||
"#url" : "https://kemono.party/discord/server/488668827274444803#608504710906904576",
|
||||
"#category": ("", "kemonoparty", "discord"),
|
||||
|
||||
Reference in New Issue
Block a user