diff --git a/docs/supportedsites.md b/docs/supportedsites.md index 42e4ffa1..d2bda7b2 100644 --- a/docs/supportedsites.md +++ b/docs/supportedsites.md @@ -280,7 +280,7 @@ Consider all listed sites to potentially be NSFW. Eka's Portal https://aryion.com/ - Favorites, Galleries, Posts, Tag Searches + Favorites, Galleries, Posts, Search Results, Tag Searches Supported diff --git a/gallery_dl/extractor/aryion.py b/gallery_dl/extractor/aryion.py index 99a527b1..21a2590a 100644 --- a/gallery_dl/extractor/aryion.py +++ b/gallery_dl/extractor/aryion.py @@ -234,6 +234,31 @@ class AryionTagExtractor(AryionExtractor): return self._pagination_params(url, self.params) +class AryionSearchExtractor(AryionExtractor): + """Extractor for searches on eka's portal""" + subcategory = "search" + directory_fmt = ("{category}", "searches", "{search[prefix]:?/_/}" + "{search[q]|search[tags]|search[user]}") + archive_fmt = ("s_{search[prefix]:?/_/}" + "{search[q]|search[tags]|search[user]}_{id}") + pattern = rf"{BASE_PATTERN}/search\.php\?([^#]+)" + example = "https://aryion.com/g4/search.php?q=TEXT&tags=TAGS&user=USER" + + def metadata(self): + self.params = params = text.parse_query(self.user) + + return {"search": { + **params, + "prefix": ("" if params.get("q") else + "t" if params.get("tags") else + "u" if params.get("user") else ""), + }} + + def posts(self): + url = f"{self.root}/g4/search.php?{text.build_query(self.params)}" + return self._pagination_next(url) + + class AryionPostExtractor(AryionExtractor): """Extractor for individual posts on eka's portal""" subcategory = "post" diff --git a/test/results/aryion.py b/test/results/aryion.py index 1af48c5f..51778723 100644 --- a/test/results/aryion.py +++ b/test/results/aryion.py @@ -94,4 +94,44 @@ __tests__ = ( "#count" : 2, }, +{ + "#url" : "https://aryion.com/g4/search.php?q=forest1", + "#class" : aryion.AryionSearchExtractor, + "#results" : ( + "https://aryion.com/g4/data.php?id=165068", + "https://aryion.com/g4/data.php?id=165069", + "https://aryion.com/g4/data.php?id=165070", + "https://aryion.com/g4/data.php?id=165071", + "https://aryion.com/g4/data.php?id=165064", + ), + + "search" : { + "prefix": "", + "q" : "forest1", + }, +}, + +{ + "#url" : "https://aryion.com/g4/search.php?q=&tags=water%2C+&type_search=&user=&from_date=04%2F01%2F2025&to_date=07%2F01%2F2025&sort=view_count&p=2", + "#class" : aryion.AryionSearchExtractor, + "#range" : "1-3", + "#results" : ( + "https://aryion.com/g4/data.php?id=1134439", + "https://aryion.com/g4/data.php?id=1124899", + "https://aryion.com/g4/data.php?id=1133691", + ), + + "search" : { + "from_date" : "04/01/2025", + "p" : "2", + "prefix" : "t", + "q" : "", + "sort" : "view_count", + "tags" : "water, ", + "to_date" : "07/01/2025", + "type_search": "", + "user" : "", + }, +}, + )