[civitai] add 'user-collections' extractor (#8005)
This commit is contained in:
@@ -1888,6 +1888,7 @@ Description
|
||||
* ``"user-posts"``
|
||||
* ``"user-images"``
|
||||
* ``"user-videos"``
|
||||
* ``"user-collections"``
|
||||
|
||||
It is possible to use ``"all"`` instead of listing all values separately.
|
||||
Note
|
||||
|
||||
@@ -190,7 +190,7 @@ Consider all listed sites to potentially be NSFW.
|
||||
<tr>
|
||||
<td>Civitai</td>
|
||||
<td>https://www.civitai.com/</td>
|
||||
<td>Collections, Generated Files, individual Images, Image Listings, Models, Model Listings, Posts, Post Listings, Image Searches, Model Searches, Tag Searches, User Profiles, User Images, Image Reactions, User Models, User Posts, User Videos, Video Reactions</td>
|
||||
<td>Collections, Generated Files, individual Images, Image Listings, Models, Model Listings, Posts, Post Listings, Image Searches, Model Searches, Tag Searches, User Profiles, User Collections, User Images, Image Reactions, User Models, User Posts, User Videos, Video Reactions</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
||||
@@ -483,6 +483,7 @@ class CivitaiUserExtractor(Dispatch, CivitaiExtractor):
|
||||
(CivitaiUserPostsExtractor , base + "posts"),
|
||||
(CivitaiUserImagesExtractor, base + "images"),
|
||||
(CivitaiUserVideosExtractor, base + "videos"),
|
||||
(CivitaiUserCollectionsExtractor, base + "collections"),
|
||||
), ("user-images", "user-videos"))
|
||||
|
||||
|
||||
@@ -551,6 +552,22 @@ class CivitaiUserVideosExtractor(CivitaiExtractor):
|
||||
images = CivitaiUserImagesExtractor.images
|
||||
|
||||
|
||||
class CivitaiUserCollectionsExtractor(CivitaiExtractor):
|
||||
subcategory = "user-collections"
|
||||
pattern = USER_PATTERN + r"/collections/?(?:\?([^#]+))?"
|
||||
example = "https://civitai.com/user/USER/collections"
|
||||
|
||||
def items(self):
|
||||
user, query = self.groups
|
||||
params = self._parse_query(query)
|
||||
params["userId"] = self.api.user(text.unquote(user))[0]["id"]
|
||||
|
||||
base = f"{self.root}/collections/"
|
||||
for collection in self.api.collections(params):
|
||||
collection["_extractor"] = CivitaiCollectionExtractor
|
||||
yield Message.Queue, f"{base}{collection['id']}", collection
|
||||
|
||||
|
||||
class CivitaiGeneratedExtractor(CivitaiExtractor):
|
||||
"""Extractor for your generated files feed"""
|
||||
subcategory = "generated"
|
||||
@@ -785,6 +802,18 @@ class CivitaiTrpcAPI():
|
||||
params = {"id": int(collection_id)}
|
||||
return self._call(endpoint, params)["collection"]
|
||||
|
||||
def collections(self, params, defaults=True):
|
||||
endpoint = "collection.getInfinite"
|
||||
|
||||
if defaults:
|
||||
params = self._merge_params(params, {
|
||||
"browsingLevel": self.nsfw,
|
||||
"sort" : "Newest",
|
||||
})
|
||||
|
||||
params = self._type_params(params)
|
||||
return self._pagination(endpoint, params)
|
||||
|
||||
def user(self, username):
|
||||
endpoint = "user.getCreator"
|
||||
params = {"username": username}
|
||||
|
||||
@@ -240,6 +240,7 @@ SUBCATEGORY_MAP = {
|
||||
"user-images": ("User Images", "Image Reactions"),
|
||||
"user-posts" : "User Posts",
|
||||
"user-videos": ("User Videos", "Video Reactions"),
|
||||
"user-collections" : "User Collections",
|
||||
"generated": "Generated Files",
|
||||
},
|
||||
"coomer": {
|
||||
|
||||
@@ -660,4 +660,18 @@ __tests__ = (
|
||||
},
|
||||
},
|
||||
|
||||
{
|
||||
"#url" : "https://civitai.com/user/SakuraCherryBlossoms/collections",
|
||||
"#class" : civitai.CivitaiUserCollectionsExtractor,
|
||||
"#results" : (
|
||||
"https://civitai.com/collections/11462456",
|
||||
"https://civitai.com/collections/11453431",
|
||||
"https://civitai.com/collections/11453135",
|
||||
"https://civitai.com/collections/11407164",
|
||||
"https://civitai.com/collections/11405046",
|
||||
"https://civitai.com/collections/11395523",
|
||||
"https://civitai.com/collections/11395467",
|
||||
),
|
||||
},
|
||||
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user