Browse Source

[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>
Daniel Kukula 1 year ago
parent
commit
46d7a8289b
3 changed files with 62 additions and 0 deletions
  1. 1 0
      AUTHORS.rst
  2. 56 0
      searx/engines/hex.py
  3. 5 0
      searx/settings.yml

+ 1 - 0
AUTHORS.rst

@@ -172,3 +172,4 @@ features or generally made searx better:
 - Bernie Huang `<https://github.com/BernieHuang2008>`
 - Austin Olacsi `<https://github.com/Austin-Olacsi>`
 - @micsthepick
+- Daniel Kukula `<https://github.com/dkuku>`

+ 56 - 0
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

+ 5 - 0
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}