[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"""