From 97aa5a779b3910efb2cc8f7497969fbe0d126910 Mon Sep 17 00:00:00 2001 From: Zhijie He Date: Sun, 23 Feb 2025 13:47:03 +0800 Subject: [feat] add Sogou engine for searxng Co-authored-by: Bnyro --- searx/engines/sogou_images.py | 49 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 searx/engines/sogou_images.py (limited to 'searx/engines/sogou_images.py') diff --git a/searx/engines/sogou_images.py b/searx/engines/sogou_images.py new file mode 100644 index 000000000..69992e3ba --- /dev/null +++ b/searx/engines/sogou_images.py @@ -0,0 +1,49 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""Sogou-Images: A search engine for retrieving images from Sogou.""" + +import json +import re +from urllib.parse import quote_plus + +# about +about = { + "website": "https://pic.sogou.com/", + "wikidata_id": "Q7554565", + "use_official_api": False, + "require_api_key": False, + "results": "HTML", +} + +# engine dependent config +categories = ["images"] + +base_url = "https://pic.sogou.com" + + +def request(query, params): + params["url"] = f"{base_url}/pics?query={quote_plus(query)}" + return params + + +def response(resp): + results = [] + match = re.search(r'window\.__INITIAL_STATE__\s*=\s*({.*?});', resp.text, re.S) + if not match: + return results + + data = json.loads(match.group(1)) + if "searchList" in data and "searchList" in data["searchList"]: + for item in data["searchList"]["searchList"]: + results.append( + { + "template": "images.html", + "url": item.get("url", ""), + "thumbnail_src": item.get("picUrl", ""), + "img_src": item.get("picUrl", ""), + "content": item.get("content_major", ""), + "title": item.get("title", ""), + "source": item.get("ch_site_name", ""), + } + ) + + return results -- cgit v1.2.3