summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--searx/engines/docker_hub.py65
-rw-r--r--searx/settings.yml5
-rw-r--r--searx/static/themes/oscar/img/icons/docker hub.pngbin0 -> 957 bytes
3 files changed, 70 insertions, 0 deletions
diff --git a/searx/engines/docker_hub.py b/searx/engines/docker_hub.py
new file mode 100644
index 000000000..d9d0f745b
--- /dev/null
+++ b/searx/engines/docker_hub.py
@@ -0,0 +1,65 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+# lint: pylint
+# pylint: disable=missing-function-docstring
+"""Docker Hub (IT)
+
+"""
+
+from json import loads
+from urllib.parse import urlencode
+from dateutil import parser
+
+about = {
+ "website": 'https://hub.docker.com',
+ "wikidata_id": 'Q100769064',
+ "official_api_documentation": 'https://docs.docker.com/registry/spec/api/',
+ "use_official_api": True,
+ "require_api_key": False,
+ "results": 'JSON',
+ }
+
+categories = ['it'] # optional
+paging = True
+
+base_url = "https://hub.docker.com/"
+search_url = base_url + "api/content/v1/products/search?{query}&type=image&page_size=25"
+
+def request(query, params):
+
+ params['url'] = search_url.format(query=urlencode(dict(q=query, page=params["pageno"])))
+ params["headers"]["Search-Version"] = "v3"
+
+ return params
+
+def response(resp):
+ '''post-response callback
+ resp: requests response object
+ '''
+ results = []
+ body = loads(resp.text)
+
+ # Make sure `summaries` isn't `null`
+ search_res = body.get("summaries")
+ if search_res:
+ for item in search_res:
+ result = {}
+
+ # Make sure correct URL is set
+ filter_type = item.get("filter_type")
+ is_official = filter_type in ["store", "official"]
+
+ if is_official:
+ result["url"] = base_url + "_/" + item.get('slug', "")
+ else:
+ result["url"] = base_url + "r/" + item.get('slug', "")
+ result["title"] = item.get("name")
+ result["content"] = item.get("short_description")
+ result["publishedDate"] = parser.parse(
+ item.get("updated_at") or item.get("created_at")
+ )
+ result["thumbnail"] = (
+ item["logo_url"].get("large") or item["logo_url"].get("small")
+ )
+ results.append(result)
+
+ return results
diff --git a/searx/settings.yml b/searx/settings.yml
index c3d35ee2e..d3b7acc72 100644
--- a/searx/settings.yml
+++ b/searx/settings.yml
@@ -334,6 +334,11 @@ engines:
engine : digg
shortcut : dg
+ - name: docker hub
+ engine: docker_hub
+ shortcut: dh
+ categories: it
+
- name : erowid
engine : xpath
paging : True
diff --git a/searx/static/themes/oscar/img/icons/docker hub.png b/searx/static/themes/oscar/img/icons/docker hub.png
new file mode 100644
index 000000000..ff4e84c90
--- /dev/null
+++ b/searx/static/themes/oscar/img/icons/docker hub.png
Binary files differ