[civitai] add 'user-collections' extractor (#8005)

This commit is contained in:
Mike Fährmann
2025-08-10 18:42:03 +02:00
parent 2b03843092
commit e92538624e
5 changed files with 46 additions and 1 deletions

View File

@@ -1888,6 +1888,7 @@ Description
* ``"user-posts"`` * ``"user-posts"``
* ``"user-images"`` * ``"user-images"``
* ``"user-videos"`` * ``"user-videos"``
* ``"user-collections"``
It is possible to use ``"all"`` instead of listing all values separately. It is possible to use ``"all"`` instead of listing all values separately.
Note Note

View File

@@ -190,7 +190,7 @@ Consider all listed sites to potentially be NSFW.
<tr> <tr>
<td>Civitai</td> <td>Civitai</td>
<td>https://www.civitai.com/</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> <td></td>
</tr> </tr>
<tr> <tr>

View File

@@ -483,6 +483,7 @@ class CivitaiUserExtractor(Dispatch, CivitaiExtractor):
(CivitaiUserPostsExtractor , base + "posts"), (CivitaiUserPostsExtractor , base + "posts"),
(CivitaiUserImagesExtractor, base + "images"), (CivitaiUserImagesExtractor, base + "images"),
(CivitaiUserVideosExtractor, base + "videos"), (CivitaiUserVideosExtractor, base + "videos"),
(CivitaiUserCollectionsExtractor, base + "collections"),
), ("user-images", "user-videos")) ), ("user-images", "user-videos"))
@@ -551,6 +552,22 @@ class CivitaiUserVideosExtractor(CivitaiExtractor):
images = CivitaiUserImagesExtractor.images 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): class CivitaiGeneratedExtractor(CivitaiExtractor):
"""Extractor for your generated files feed""" """Extractor for your generated files feed"""
subcategory = "generated" subcategory = "generated"
@@ -785,6 +802,18 @@ class CivitaiTrpcAPI():
params = {"id": int(collection_id)} params = {"id": int(collection_id)}
return self._call(endpoint, params)["collection"] 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): def user(self, username):
endpoint = "user.getCreator" endpoint = "user.getCreator"
params = {"username": username} params = {"username": username}

View File

@@ -240,6 +240,7 @@ SUBCATEGORY_MAP = {
"user-images": ("User Images", "Image Reactions"), "user-images": ("User Images", "Image Reactions"),
"user-posts" : "User Posts", "user-posts" : "User Posts",
"user-videos": ("User Videos", "Video Reactions"), "user-videos": ("User Videos", "Video Reactions"),
"user-collections" : "User Collections",
"generated": "Generated Files", "generated": "Generated Files",
}, },
"coomer": { "coomer": {

View File

@@ -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",
),
},
) )