[aryion:favorite] support 'category' URLs (#8705)

This commit is contained in:
Mike Fährmann
2025-12-15 21:45:03 +01:00
parent 83ca65d918
commit 58ccde3645
2 changed files with 50 additions and 15 deletions

View File

@@ -200,10 +200,10 @@ class AryionGalleryExtractor(AryionExtractor):
class AryionFavoriteExtractor(AryionExtractor):
"""Extractor for a user's favorites gallery"""
subcategory = "favorite"
directory_fmt = ("{category}", "{user!l}", "favorites")
directory_fmt = ("{category}", "{user!l}", "favorites", "{folder}")
archive_fmt = "f_{user}_{id}"
categorytransfer = True
pattern = rf"{BASE_PATTERN}/favorites/([^/?#]+)"
pattern = rf"{BASE_PATTERN}/favorites/([^/?#]+)(?:/([^?#]+))?"
example = "https://aryion.com/g4/favorites/USER"
def _init(self):
@@ -211,11 +211,17 @@ class AryionFavoriteExtractor(AryionExtractor):
def posts(self):
url = f"{self.root}/g4/favorites/{self.user}"
return self._pagination(url)
return self._pagination(url, self.groups[1])
def _pagination(self, url, folder=None):
if folder is None:
self.kwdict["folder"] = ""
else:
url = f"{url}/{folder}"
self.kwdict["folder"] = folder = text.unquote(folder)
self.log.debug("Descending into folder '%s'", folder)
def _pagination(self, url):
params = {"p": 1}
while True:
page = self.request(url, params=params).text
@@ -224,24 +230,20 @@ class AryionFavoriteExtractor(AryionExtractor):
page, "<li class='gallery-item", "</li>"):
cnt += 1
if text.extr(item, 'data-item-type="', '"') == "Folders":
folder_url = text.extr(item, "href='", "'")
folder_name = text.unquote(
folder_url[folder_url.rfind("/")+1:])
folder = text.extr(item, "href='", "'").rpartition("/")[2]
if self.recursive:
self.log.debug(
"Descending into folder '%s'", folder_name)
self.kwdict["folder"] = folder_name
yield from self._pagination(self.root + folder_url)
del self.kwdict["folder"]
yield from self._pagination(url, folder)
else:
self.log.debug("Skipping folder '%s'", folder_name)
self.log.debug("Skipping folder '%s'", folder)
else:
yield text.extr(item, "data-item-id='", "'")
if cnt < 40 and ">Next &gt;&gt;<" not in page:
return
break
params["p"] += 1
self.kwdict["folder"] = ""
class AryionTagExtractor(AryionExtractor):
"""Extractor for tag searches on eka's portal"""

View File

@@ -41,6 +41,39 @@ __tests__ = (
"artist" : "re:^((?!jameshoward).)*$",
},
{
"#url" : "https://aryion.com/g4/favorites/CultOfTheShyCorpus",
"#class" : aryion.AryionFavoriteExtractor,
"#range" : "1-3",
"#results" : (
"https://aryion.com/g4/data.php?id=373076",
"https://aryion.com/g4/data.php?id=373075",
"https://aryion.com/g4/data.php?id=373074",
),
"user" : "CultOfTheShyCorpus",
"folder": "Camilla Swallows Corrin",
"path" : [
"Older Art!",
"Older Fanart!",
],
},
{
"#url" : "https://aryion.com/g4/favorites/CultOfTheShyCorpus/Elf%27s%20Revenge",
"#comment" : "'category' URL (#8705)",
"#class" : aryion.AryionFavoriteExtractor,
"#range" : "1-3",
"#results" : (
"https://aryion.com/g4/data.php?id=531328",
"https://aryion.com/g4/data.php?id=403354",
"https://aryion.com/g4/data.php?id=361515",
),
"folder" : "Elf's Revenge",
"path" : [],
},
{
"#url" : "https://aryion.com/g4/tags.php?tag=star+wars&p=28",
"#category": ("", "aryion", "tag"),