[kemono] support '"endpoint": "posts+"' for full metadata (#8028)
alias for "legacy+"
This commit is contained in:
@@ -3395,22 +3395,11 @@ Default
|
||||
Description
|
||||
API endpoint to use for retrieving creator posts.
|
||||
|
||||
``"legacy"``
|
||||
| Use the results from
|
||||
`/v1/{service}/user/{creator_id}/posts-legacy <https://kemono.su/documentation/api#operations-default-get_v1__service__user__creator_id__posts_legacy>`__
|
||||
| Provides less metadata, but is more reliable at returning all posts.
|
||||
| Supports filtering results by ``tag`` query parameter.
|
||||
``"legacy+"``
|
||||
| Use the results from
|
||||
`/v1/{service}/user/{creator_id}/posts-legacy <https://kemono.su/documentation/api#operations-default-get_v1__service__user__creator_id__posts_legacy>`__
|
||||
to retrieve post IDs
|
||||
| and one request to
|
||||
`/v1/{service}/user/{creator_id}/post/{post_id} <https://kemono.su/documentation/api#operations-Posts-get_v1__service__user__creator_id__post__post_id_>`__
|
||||
to get a full set of metadata for each.
|
||||
``"posts"``
|
||||
| Use the results from
|
||||
`/v1/{service}/user/{creator_id} <https://kemono.su/documentation/api#operations-Posts-get_v1__service__user__creator_id_>`__
|
||||
| Provides more metadata, but might not return a creator's first/last posts.
|
||||
``"posts"`` | ``"legacy"``
|
||||
Provides only limited metadata.
|
||||
``"posts+"`` | ``"legacy+"``
|
||||
Provides full metadata,
|
||||
but requires an additional API request for each post.
|
||||
|
||||
|
||||
extractor.kemono.favorites
|
||||
|
||||
@@ -320,23 +320,14 @@ class KemonoUserExtractor(KemonoExtractor):
|
||||
def posts(self):
|
||||
_, _, service, creator_id, query = self.groups
|
||||
params = text.parse_query(query)
|
||||
tag = params.get("tag")
|
||||
|
||||
endpoint = self.config("endpoint")
|
||||
if endpoint == "legacy+":
|
||||
endpoint = self._posts_legacy_plus
|
||||
if self.config("endpoint") in ("posts+", "legacy+"):
|
||||
endpoint = self.api.creator_posts_expand
|
||||
else:
|
||||
endpoint = self.api.creator_posts
|
||||
|
||||
return endpoint(service, creator_id,
|
||||
params.get("o"), params.get("q"), tag)
|
||||
|
||||
def _posts_legacy_plus(self, service, creator_id,
|
||||
offset=0, query=None, tags=None):
|
||||
for post in self.api.creator_posts(
|
||||
service, creator_id, offset, query, tags):
|
||||
yield self.api.creator_post(
|
||||
service, creator_id, post["id"])["post"]
|
||||
params.get("o"), params.get("q"), params.get("tag"))
|
||||
|
||||
|
||||
class KemonoPostsExtractor(KemonoExtractor):
|
||||
@@ -591,6 +582,13 @@ class KemonoAPI():
|
||||
params = {"o": offset, "tag": tags, "q": query}
|
||||
return self._pagination(endpoint, params, 50)
|
||||
|
||||
def creator_posts_expand(self, service, creator_id,
|
||||
offset=0, query=None, tags=None):
|
||||
for post in self.creator_posts(
|
||||
service, creator_id, offset, query, tags):
|
||||
yield self.creator_post(
|
||||
service, creator_id, post["id"])["post"]
|
||||
|
||||
def creator_announcements(self, service, creator_id):
|
||||
endpoint = f"/{service}/user/{creator_id}/announcements"
|
||||
return self._call(endpoint)
|
||||
|
||||
Reference in New Issue
Block a user