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 Binary files /dev/null and b/searx/static/themes/oscar/img/icons/docker hub.png differ