From d9b63916eef408231355448a8aeae626f94ee7a1 Mon Sep 17 00:00:00 2001 From: Daniel Kukula Date: Fri, 3 May 2024 16:52:02 +0100 Subject: [PATCH] [feat] engine: implementation of https://hex.pm The package manager for the Erlang ecosystem Find packages. Co-authored-by: Bnyro <82752168+Bnyro@users.noreply.github.com> --- AUTHORS.rst | 1 + searx/engines/hex.py | 56 ++++++++++++++++++++++++++++++++++++++++++++ searx/settings.yml | 5 ++++ 3 files changed, 62 insertions(+) create mode 100644 searx/engines/hex.py diff --git a/AUTHORS.rst b/AUTHORS.rst index a4478846a..011735b55 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -172,3 +172,4 @@ features or generally made searx better: - Bernie Huang `` - Austin Olacsi `` - @micsthepick +- Daniel Kukula `` diff --git a/searx/engines/hex.py b/searx/engines/hex.py new file mode 100644 index 000000000..febd36d73 --- /dev/null +++ b/searx/engines/hex.py @@ -0,0 +1,56 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""hex.pm""" + +from urllib.parse import urlencode +from dateutil import parser + + +about = { + # pylint: disable=line-too-long + "website": "https://hex.pm/", + "wikidata_id": None, + "official_api_documentation": "https://github.com/hexpm/hexpm/blob/main/lib/hexpm_web/controllers/api/package_controller.ex", + "use_official_api": True, + "require_api_key": False, + "results": "JSON", +} + +categories = ["it", "packages"] + + +# engine dependent config +paging = True +search_url = "https://hex.pm/api/packages/" + + +def request(query: str, params): + args = urlencode({"page": params["pageno"], "search": query}) + params["url"] = f"{search_url}?{args}" + return params + + +def response(resp): + results = [] + for package in resp.json(): + meta = package["meta"] + publishedDate = package.get("inserted_at") + if publishedDate: + publishedDate = parser.parse(publishedDate) + tags = meta.get("licenses", []) + results.append( + { + "template": "packages.html", + "url": package["url"], + "title": package["name"], + "package_name": package["name"], + "content": meta.get("description", ""), + "version": meta.get("latest_version"), + "maintainer": ", ".join(meta.get("maintainers", [])), + "publishedDate": publishedDate, + "tags": tags, + "homepage": meta.get("links", {}).get("homepage"), + "source_code_url": meta.get("links", {}).get("github"), + } + ) + + return results diff --git a/searx/settings.yml b/searx/settings.yml index a2b968832..a57bcfbd5 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -926,6 +926,11 @@ engines: shortcut: hn disabled: true + - name: hex + engine: hex + shortcut: hex + disabled: true + - name: hoogle engine: xpath search_url: https://hoogle.haskell.org/?hoogle={query}