From b0d8af96bf0eeeb87ab900a6259b65554c0c71ac Mon Sep 17 00:00:00 2001 From: Bnyro Date: Mon, 25 May 2026 13:41:44 +0200 Subject: [PATCH] [feat] engines: add flaticon icons engine (#6122) --- searx/engines/flaticon.py | 70 +++++++++++++++++++++++++++++++++++++++ searx/settings.yml | 5 +++ 2 files changed, 75 insertions(+) create mode 100644 searx/engines/flaticon.py diff --git a/searx/engines/flaticon.py b/searx/engines/flaticon.py new file mode 100644 index 000000000..846e4c794 --- /dev/null +++ b/searx/engines/flaticon.py @@ -0,0 +1,70 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Flaticon_ is a database for icons. + +.. _Flaticon: https://www.flaticon.com +""" + +from urllib.parse import urlencode + +import typing as t + +from searx.result_types import EngineResults + +if t.TYPE_CHECKING: + from searx.extended_types import SXNG_Response + from searx.search.processors import OnlineParams + + +about = { + "website": "https://www.flaticon.com", + "wikidata_id": "Q105283791", + "official_api_documentation": None, + "use_official_api": False, + "require_api_key": False, + "results": "JSON", +} + +base_url = "https://www.flaticon.com" + +categories = ["images", "icons"] +paging = True + + +def request(query: str, params: "OnlineParams") -> None: + args = { + "word": query, + } + params["headers"].update( + { + # important: query term is not URL encoded in the referer string + "Referer": f"{base_url}/search?word={query}", + "X-Requested-With": "XMLHttpRequest", + } + ) + params["url"] = f"{base_url}/ajax/search/{params['pageno']}?{urlencode(args)}" + + +def _fix_url(url: str) -> str: + return url.replace(r"\/", "/") + + +def response(resp: "SXNG_Response"): + res = EngineResults() + + result: dict[str, str] # TBH: dict[str, t.Any] + for result in resp.json()["items"]: + res.add( + res.types.LegacyResult( + { + "template": "images.html", + "url": _fix_url(result["slug"]), + "thumbnail_src": _fix_url(result["png"]), + "img_src": _fix_url(result["png512"]), + "title": result["name"], + "content": ", ".join([tag["tag"] for tag in result["tags"]]), # pyright: ignore[reportArgumentType] + "author": result["team_name"], + } + ) + ) + + return res diff --git a/searx/settings.yml b/searx/settings.yml index 65a52c850..3fb2ebd6f 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -886,6 +886,11 @@ engines: shortcut: ftm disabled: true + - name: flaticon + engine: flaticon + shortcut: fli + disabled: true + - name: flickr categories: images shortcut: fl