diff --git a/gallery_dl/extractor/kemono.py b/gallery_dl/extractor/kemono.py index fc8f23ca..8387350f 100644 --- a/gallery_dl/extractor/kemono.py +++ b/gallery_dl/extractor/kemono.py @@ -82,6 +82,8 @@ class KemonoExtractor(Extractor): posts = self._revisions(posts) for post in posts: + if "post" in post: + post = post["post"] headers["Referer"] = (f"{self.root}/{post['service']}/user/" f"{post['user']}/post/{post['id']}") post["_http_headers"] = headers @@ -250,11 +252,23 @@ class KemonoExtractor(Extractor): return itertools.chain.from_iterable( self._revisions_post(post) for post in posts) + def _revisions_get(self, post): + if (props := post.get("props")) and "revisions" in props: + return [ + rev[1] + for rev in props["revisions"] + if "revision_id" in rev[1] + ] + return self.api.creator_post_revisions( + post["service"], post["user"], post["id"]) + def _revisions_post(self, post): + revs = self._revisions_get(post) + + if "post" in post: + post = post["post"] post["revision_id"] = 0 - revs = self.api.creator_post_revisions( - post["service"], post["user"], post["id"]) if not revs: post["revision_hash"] = self._revision_hash(post) post["revision_index"] = 1 @@ -285,8 +299,8 @@ class KemonoExtractor(Extractor): return revs - def _revisions_all(self, service, creator_id, post_id): - revs = self.api.creator_post_revisions(service, creator_id, post_id) + def _revisions_all(self, post): + revs = self._revisions_get(post) cnt = idx = len(revs) for rev in revs: @@ -373,11 +387,11 @@ class KemonoPostExtractor(KemonoExtractor): _, _, service, creator_id, post_id, revision, revision_id = self.groups post = self.api.creator_post(service, creator_id, post_id) if not revision: - return (post["post"],) + return (post,) self.revisions = False - revs = self._revisions_all(service, creator_id, post_id) + revs = self._revisions_all(post) if not revision_id: return revs diff --git a/test/results/kemono.py b/test/results/kemono.py index 0d428964..1ad06aef 100644 --- a/test/results/kemono.py +++ b/test/results/kemono.py @@ -5,7 +5,6 @@ # published by the Free Software Foundation. from gallery_dl.extractor import kemono -from gallery_dl import util, exception __tests__ = ( @@ -357,6 +356,8 @@ __tests__ = ( "revision_index": {1, 2, 3}, "revision_count": 3, "revision_hash" : { + "eb2fa4385af730509a42f8f0424bd0b9a0e4bc21", + "a44ad7fa57ebc2473e861c1d7f11de721c809549", "e0e93281495e151b11636c156e52bfe9234c2a40", "bc5713195e14799da40c525381216c5a1a340b0f", "9872bfb536a47cc69d95d2f195cd5c825808f089", @@ -388,7 +389,7 @@ __tests__ = ( "#comment" : "revisions (#4498)", "#category": ("", "kemono", "patreon"), "#class" : kemono.KemonoPostExtractor, - "#exception": exception.NotFoundError, + "#exception": "NotFoundError", }, { @@ -537,7 +538,6 @@ __tests__ = ( "#comment" : "user profile data unavailable (#8382)", "#category": ("", "kemono", "patreon"), "#class" : kemono.KemonoPostExtractor, - "#log" : "patreon/34792417/137409895: 'Creator not found'", "#results" : ( "https://kemono.cr/data/a9/87/a9874d7e1229396b0b2706fd7fa9949eac924e86256d84d077c10ecbace8bd17.bin", "https://kemono.cr/data/a2/eb/a2eba02204086c789d59bc7112510aebf0428455ad1664153bfbb92eb8aa5643.jpg", @@ -545,8 +545,8 @@ __tests__ = ( "title" : "Capella - Re:zero (20P)", "user" : "34792417", - "user_profile": util.NONE, - "username" : util.NONE, + "user_profile": dict, + "username" : "Varas", }, { @@ -785,7 +785,7 @@ __tests__ = ( "#category": ("", "kemono", "discord-server"), "#class" : kemono.KemonoDiscordServerExtractor, "#pattern" : kemono.KemonoDiscordExtractor.pattern, - "#count" : 26, + "#count" : 27, }, { @@ -871,23 +871,7 @@ __tests__ = ( "#category": ("", "kemono", "artists"), "#class" : kemono.KemonoArtistsExtractor, "#pattern" : kemono.KemonoUserExtractor.pattern, - "#results" : ( - "https://kemono.cr/patreon/user/91205314", - "https://kemono.cr/patreon/user/51528107", - "https://kemono.cr/fanbox/user/12812028", - "https://kemono.cr/patreon/user/35237747", - "https://kemono.cr/patreon/user/8296916", - "https://kemono.cr/patreon/user/155095324", - "https://kemono.cr/patreon/user/75988930", - "https://kemono.cr/patreon/user/93703989", - "https://kemono.cr/patreon/user/100292687", - "https://kemono.cr/patreon/user/138609443", - "https://kemono.cr/patreon/user/61646879", - "https://kemono.cr/patreon/user/110669843", - "https://kemono.cr/patreon/user/44343773", - "https://kemono.cr/patreon/user/77920059", - "https://kemono.cr/patreon/user/102386631", - ), + "#count" : range(15, 20), "favorited": int, "id" : str,