[kemonoparty] add 'artists' extractor (#7582)
This commit is contained in:
@@ -190,7 +190,7 @@ Consider all listed sites to potentially be NSFW.
|
|||||||
<tr>
|
<tr>
|
||||||
<td>Coomer</td>
|
<td>Coomer</td>
|
||||||
<td>https://coomer.su/</td>
|
<td>https://coomer.su/</td>
|
||||||
<td>Favorites, Posts, User Profiles</td>
|
<td>Artists, Favorites, Posts, User Profiles</td>
|
||||||
<td>Supported</td>
|
<td>Supported</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -496,7 +496,7 @@ Consider all listed sites to potentially be NSFW.
|
|||||||
<tr>
|
<tr>
|
||||||
<td>Kemono</td>
|
<td>Kemono</td>
|
||||||
<td>https://kemono.su/</td>
|
<td>https://kemono.su/</td>
|
||||||
<td>Discord Servers, Favorites, Posts, User Profiles</td>
|
<td>Artists, Discord Servers, Favorites, Posts, User Profiles</td>
|
||||||
<td>Supported</td>
|
<td>Supported</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -528,6 +528,44 @@ class KemonopartyFavoriteExtractor(KemonopartyExtractor):
|
|||||||
yield Message.Queue, url, post
|
yield Message.Queue, url, post
|
||||||
|
|
||||||
|
|
||||||
|
class KemonopartyArtistsExtractor(KemonopartyExtractor):
|
||||||
|
"""Extractor for kemono artists"""
|
||||||
|
subcategory = "artists"
|
||||||
|
pattern = BASE_PATTERN + r"/artists(?:\?([^#]+))?"
|
||||||
|
example = "https://kemono.su/artists"
|
||||||
|
|
||||||
|
def items(self):
|
||||||
|
params = text.parse_query(self.groups[2])
|
||||||
|
users = self.api.creators()
|
||||||
|
|
||||||
|
if params.get("service"):
|
||||||
|
service = params["service"].lower()
|
||||||
|
users = [user for user in users
|
||||||
|
if user["service"] == service]
|
||||||
|
|
||||||
|
if params.get("q"):
|
||||||
|
q = params["q"].lower()
|
||||||
|
users = [user for user in users
|
||||||
|
if q in user["name"].lower()]
|
||||||
|
|
||||||
|
sort = params.get("sort_by") or "favorited"
|
||||||
|
order = params.get("order") or "desc"
|
||||||
|
users.sort(key=lambda user: user[sort] or util.NONE,
|
||||||
|
reverse=(order != "asc"))
|
||||||
|
|
||||||
|
for user in users:
|
||||||
|
service = user["service"]
|
||||||
|
if service == "discord":
|
||||||
|
user["_extractor"] = KemonopartyDiscordServerExtractor
|
||||||
|
url = "{}/discord/server/{}".format(
|
||||||
|
self.root, user["id"])
|
||||||
|
else:
|
||||||
|
user["_extractor"] = KemonopartyUserExtractor
|
||||||
|
url = "{}/{}/user/{}".format(
|
||||||
|
self.root, service, user["id"])
|
||||||
|
yield Message.Queue, url, user
|
||||||
|
|
||||||
|
|
||||||
class KemonoAPI():
|
class KemonoAPI():
|
||||||
"""Interface for the Kemono API v1.1.0
|
"""Interface for the Kemono API v1.1.0
|
||||||
|
|
||||||
@@ -547,6 +585,10 @@ class KemonoAPI():
|
|||||||
endpoint = "/file/" + file_hash
|
endpoint = "/file/" + file_hash
|
||||||
return self._call(endpoint)
|
return self._call(endpoint)
|
||||||
|
|
||||||
|
def creators(self):
|
||||||
|
endpoint = "/creators.txt"
|
||||||
|
return self._call(endpoint)
|
||||||
|
|
||||||
def creator_posts(self, service, creator_id,
|
def creator_posts(self, service, creator_id,
|
||||||
offset=0, query=None, tags=None):
|
offset=0, query=None, tags=None):
|
||||||
endpoint = "/{}/user/{}".format(service, creator_id)
|
endpoint = "/{}/user/{}".format(service, creator_id)
|
||||||
|
|||||||
@@ -680,4 +680,50 @@ __tests__ = (
|
|||||||
"#class" : kemonoparty.KemonopartyFavoriteExtractor,
|
"#class" : kemonoparty.KemonopartyFavoriteExtractor,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"#url" : "https://kemono.su/artists?q=aMSa",
|
||||||
|
"#category": ("", "kemonoparty", "artists"),
|
||||||
|
"#class" : kemonoparty.KemonopartyArtistsExtractor,
|
||||||
|
"#pattern" : kemonoparty.KemonopartyUserExtractor.pattern,
|
||||||
|
"#urls" : (
|
||||||
|
"https://kemono.su/patreon/user/91205314",
|
||||||
|
"https://kemono.su/patreon/user/51528107",
|
||||||
|
"https://kemono.su/fanbox/user/12812028",
|
||||||
|
"https://kemono.su/patreon/user/35237747",
|
||||||
|
"https://kemono.su/patreon/user/8296916",
|
||||||
|
"https://kemono.su/patreon/user/155095324",
|
||||||
|
"https://kemono.su/patreon/user/75988930",
|
||||||
|
"https://kemono.su/patreon/user/93703989",
|
||||||
|
"https://kemono.su/patreon/user/100292687",
|
||||||
|
"https://kemono.su/patreon/user/138609443",
|
||||||
|
"https://kemono.su/patreon/user/61646879",
|
||||||
|
"https://kemono.su/patreon/user/110669843",
|
||||||
|
"https://kemono.su/patreon/user/44343773",
|
||||||
|
"https://kemono.su/patreon/user/77920059",
|
||||||
|
"https://kemono.su/patreon/user/102386631",
|
||||||
|
),
|
||||||
|
|
||||||
|
"favorited": int,
|
||||||
|
"id" : str,
|
||||||
|
"indexed" : int,
|
||||||
|
"name" : str,
|
||||||
|
"service" : {"patreon", "fanbox"},
|
||||||
|
"updated" : int,
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"#url" : "https://kemono.su/artists?q=Axe&service=discord&sort_by=name&order=asc",
|
||||||
|
"#category": ("", "kemonoparty", "artists"),
|
||||||
|
"#class" : kemonoparty.KemonopartyArtistsExtractor,
|
||||||
|
"#pattern" : kemonoparty.KemonopartyDiscordServerExtractor.pattern,
|
||||||
|
"#urls" : "https://kemono.su/discord/server/1168450323023663164",
|
||||||
|
|
||||||
|
"favorited": range(40, 80),
|
||||||
|
"id" : "1168450323023663164",
|
||||||
|
"indexed" : 1710201675,
|
||||||
|
"name" : "Axel Colored Workshop",
|
||||||
|
"service" : "discord",
|
||||||
|
"updated" : range(1740000000, 2000000000),
|
||||||
|
},
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user