diff options
Diffstat (limited to 'searx/engines/s1search_rampjs.py')
| -rw-r--r-- | searx/engines/s1search_rampjs.py | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/searx/engines/s1search_rampjs.py b/searx/engines/s1search_rampjs.py new file mode 100644 index 000000000..10478f2c0 --- /dev/null +++ b/searx/engines/s1search_rampjs.py @@ -0,0 +1,63 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""JavaScript-based s1search implementation. See :ref:`s1search engine`. + +Works for all s1search sites that contain the ``__RAMPJS__`` JavaScript variable. +""" + +import json +import typing as t +from urllib.parse import urlencode + +from searx.result_types import EngineResults +from searx.utils import extr, html_to_text + +if t.TYPE_CHECKING: + from searx.search.processors import OnlineParams + from searx.extended_types import SXNG_Response + +about = { + "website": "https://s1search.co", + "official_api_documentation": None, + "use_official_api": False, + "require_api_key": False, + "results": "JSON", +} + +categories = ["general"] +paging = True + +base_url = "https://search.answers.com" +# other working base URLs: +# - https://search.nation.online +# - https://search.activebeat.com +# - https://search.legalboulevard.com +# - https://search.walletgenius.com +# - https://search.legalboulevard.com + + +def request(query: str, params: "OnlineParams"): + args = {"q": query, "page": params["pageno"]} + params["url"] = f"{base_url}/?{urlencode(args)}" + + +def response(resp: "SXNG_Response") -> EngineResults: + res = EngineResults() + + data_raw = extr(resp.text, "response: ", " };") + data = json.loads(data_raw) + + mainline = [s for s in data["search"]["regions"] if s["name"] == "mainline"][0] + for group in mainline["groups"]: + for result in group["results"]: + if not ("url" in result or "clickUrl" in result): + continue + + res.add( + res.types.MainResult( + url=result.get("url") or result.get("clickUrl"), + title=html_to_text(result["title"]), + content=html_to_text(result["description"]), + ) + ) + + return res |
