[civitai] add 'user-videos' extractor (#6644)

This commit is contained in:
Mike Fährmann
2024-12-25 22:02:21 +01:00
parent c6d5e25055
commit 998f949db1
5 changed files with 32 additions and 6 deletions

View File

@@ -1677,9 +1677,11 @@ Description
when processing a user profile.
Possible values are
``"user-models"``,
``"user-posts"``,
``"user-images"``.
* ``"user-models"``
* ``"user-posts"``
* ``"user-images"``
* ``"user-videos"``
It is possible to use ``"all"`` instead of listing all values separately.
@@ -1698,7 +1700,7 @@ Example
Description
Extract additional ``generation`` metadata.
Note: This requires 1 additional HTTP request per image.
Note: This requires 1 additional HTTP request per image or video.
extractor.civitai.nsfw

View File

@@ -172,7 +172,7 @@ Consider all listed sites to potentially be NSFW.
<tr>
<td>Civitai</td>
<td>https://www.civitai.com/</td>
<td>individual Images, Image Listings, Models, Model Listings, Posts, Search Results, Tag Searches, User Profiles, User Images, User Models, User Posts</td>
<td>individual Images, Image Listings, Models, Model Listings, Posts, Search Results, Tag Searches, User Profiles, User Images, User Models, User Posts, User Videos</td>
<td></td>
</tr>
<tr>

View File

@@ -338,6 +338,7 @@ class CivitaiUserExtractor(CivitaiExtractor):
(CivitaiUserModelsExtractor, base + "models"),
(CivitaiUserPostsExtractor , base + "posts"),
(CivitaiUserImagesExtractor, base + "images"),
(CivitaiUserVideosExtractor, base + "videos"),
), ("user-models", "user-posts"))
@@ -400,6 +401,20 @@ class CivitaiUserImagesExtractor(CivitaiExtractor):
return self.api.images(params)
class CivitaiUserVideosExtractor(CivitaiExtractor):
subcategory = "user-videos"
directory_fmt = ("{category}", "{username|user[username]}", "videos")
pattern = USER_PATTERN + r"/videos/?(?:\?([^#]+))?"
example = "https://civitai.com/user/USER/videos"
def images(self):
self._image_ext = "mp4"
params = text.parse_query(self.groups[1])
params["types"] = ["video"]
params["username"] = text.unquote(self.groups[0])
return self.api.images(params)
class CivitaiRestAPI():
"""Interface for the Civitai Public REST API
@@ -484,7 +499,7 @@ class CivitaiTrpcAPI():
self.root = extractor.root + "/api/trpc/"
self.headers = {
"content-type" : "application/json",
"x-client-version": "5.0.211",
"x-client-version": "5.0.394",
"x-client-date" : "",
"x-client" : "web",
"x-fingerprint" : "undefined",

View File

@@ -213,6 +213,7 @@ SUBCATEGORY_MAP = {
"user-models": "User Models",
"user-images": "User Images",
"user-posts" : "User Posts",
"user-videos": "User Videos",
},
"coomerparty": {
"discord" : "",

View File

@@ -241,4 +241,12 @@ __tests__ = (
"#exception": exception.AuthorizationError,
},
{
"#url" : "https://civitai.com/user/jboogx_creative/videos",
"#class": civitai.CivitaiUserVideosExtractor,
"#pattern": r"https://image\.civitai\.com/xG1nkqKTMzGDvpLrqFT7WA/[0-9a-f-]+/original=true/\S+\.mp4",
"#range" : "1-50",
"#count" : 50,
},
)