diff options
| author | Zhijie He <hezhijie0327@hotmail.com> | 2025-02-23 13:35:23 +0800 |
|---|---|---|
| committer | Bnyro <bnyro@tutanota.com> | 2025-03-02 13:25:35 +0100 |
| commit | 71d1504e572074327f851688a4caac90a5e41fe8 (patch) | |
| tree | b5a7510936b1452c4c3d2b9b570d999ed58459e8 /searx/engines/360search.py | |
| parent | 80f5fad16e830a9fea9e73c0eaa5b36c27566d9c (diff) | |
[feat] add 360search engine for searxng
Co-authored-by: Bnyro <bnyro@tutanota.com>
Diffstat (limited to 'searx/engines/360search.py')
| -rw-r--r-- | searx/engines/360search.py | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/searx/engines/360search.py b/searx/engines/360search.py new file mode 100644 index 000000000..9d575f1b3 --- /dev/null +++ b/searx/engines/360search.py @@ -0,0 +1,67 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# pylint: disable=invalid-name +"""360Search search engine for searxng""" + +from urllib.parse import urlencode +from lxml import html + +from searx.utils import extract_text + +# Metadata +about = { + "website": "https://www.so.com/", + "wikidata_id": "Q10846064", + "use_official_api": False, + "require_api_key": False, + "results": "HTML", +} + +# Engine Configuration +categories = ["general"] +paging = True +time_range_support = True + +time_range_dict = {'day': 'd', 'week': 'w', 'month': 'm', 'year': 'y'} + +# Base URL +base_url = "https://www.so.com" + + +def request(query, params): + query_params = { + "pn": params["pageno"], + "q": query, + } + + if time_range_dict.get(params['time_range']): + query_params["adv_t"] = time_range_dict.get(params['time_range']) + + params["url"] = f"{base_url}/s?{urlencode(query_params)}" + return params + + +def response(resp): + dom = html.fromstring(resp.text) + results = [] + + for item in dom.xpath('//li[contains(@class, "res-list")]'): + title = extract_text(item.xpath('.//h3[contains(@class, "res-title")]/a')) + + url = extract_text(item.xpath('.//h3[contains(@class, "res-title")]/a/@data-mdurl')) + if not url: + url = extract_text(item.xpath('.//h3[contains(@class, "res-title")]/a/@href')) + + content = extract_text(item.xpath('.//p[@class="res-desc"]')) + if not content: + content = extract_text(item.xpath('.//span[@class="res-list-summary"]')) + + if title and url: + results.append( + { + "title": title, + "url": url, + "content": content, + } + ) + + return results |