[aryion:favorite] support 'category' URLs (#8705)
This commit is contained in:
@@ -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 >><" not in page:
|
||||
return
|
||||
break
|
||||
params["p"] += 1
|
||||
|
||||
self.kwdict["folder"] = ""
|
||||
|
||||
|
||||
class AryionTagExtractor(AryionExtractor):
|
||||
"""Extractor for tag searches on eka's portal"""
|
||||
|
||||
@@ -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"),
|
||||
|
||||
Reference in New Issue
Block a user