[aryion] add 'search' extractor (#8567)

* [aryion] Implement search extractor.
* [aryion] Update capabilities.
* [aryion] Adjust example.
* fix flake8 errors

* update & simplify
    - use existing '_pagination_next()'
    - remove '_pagination_search()'
    - update 'search[…]' metadata
* add tests

---------

Co-authored-by: Mike Fährmann <mike_faehrmann@web.de>
This commit is contained in:
vorsatile
2025-11-19 06:57:08 +11:00
committed by GitHub
parent e60007add6
commit 991fe0f2a7
3 changed files with 66 additions and 1 deletions

View File

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