diff options
Diffstat (limited to 'searx/engines')
| -rw-r--r-- | searx/engines/__init__.py | 8 | ||||
| -rw-r--r-- | searx/engines/freesound.py | 69 | ||||
| -rw-r--r-- | searx/engines/wikipedia.py | 2 |
3 files changed, 76 insertions, 3 deletions
diff --git a/searx/engines/__init__.py b/searx/engines/__init__.py index 80d5d18fc..9ece10964 100644 --- a/searx/engines/__init__.py +++ b/searx/engines/__init__.py @@ -27,7 +27,7 @@ from searx import settings from searx import logger from searx.data import ENGINES_LANGUAGES from searx.poolrequests import get, get_proxy_cycles -from searx.utils import load_module, match_language, get_engine_from_settings +from searx.utils import load_module, match_language, get_engine_from_settings, gen_useragent logger = logger.getChild('engines') @@ -131,8 +131,12 @@ def load_engine(engine_data): # assign language fetching method if auxiliary method exists if hasattr(engine, '_fetch_supported_languages'): + headers = { + 'User-Agent': gen_useragent(), + 'Accept-Language': 'ja-JP,ja;q=0.8,en-US;q=0.5,en;q=0.3', # bing needs a non-English language + } setattr(engine, 'fetch_supported_languages', - lambda: engine._fetch_supported_languages(get(engine.supported_languages_url))) + lambda: engine._fetch_supported_languages(get(engine.supported_languages_url, headers=headers))) engine.stats = { 'sent_search_count': 0, # sent search diff --git a/searx/engines/freesound.py b/searx/engines/freesound.py new file mode 100644 index 000000000..d2564946c --- /dev/null +++ b/searx/engines/freesound.py @@ -0,0 +1,69 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +""" +Freesound (Sound) +""" + +from json import loads +from urllib.parse import urlencode +from datetime import datetime + +disabled = True +api_key = "" + +# about +about = { + "website": "https://freesound.org", + "wikidata_id": "Q835703", + "official_api_documentation": "https://freesound.org/docs/api", + "use_official_api": True, + "require_api_key": True, + "results": "JSON", +} + +# engine dependent config +paging = True + +# search url +url = "https://freesound.org/apiv2/" +search_url = ( + url + + "search/text/?query={query}&page={page}&fields=name,url,download,created,description,type&token={api_key}" +) + +embedded_url = '<audio controls><source src="{uri}" type="audio/{ftype}"></audio>' + + +# search request +def request(query, params): + params["url"] = search_url.format( + query=urlencode({"q": query}), + page=params["pageno"], + api_key=api_key, + ) + return params + + +# get response from search request +def response(resp): + results = [] + search_res = loads(resp.text) + # parse results + for result in search_res.get("results", []): + title = result["name"] + content = result["description"][:128] + publishedDate = datetime.fromisoformat(result["created"]) + uri = result["download"] + embedded = embedded_url.format(uri=uri, ftype=result["type"]) + + # append result + results.append( + { + "url": result["url"], + "title": title, + "publishedDate": publishedDate, + "embedded": embedded, + "content": content, + } + ) + + return results diff --git a/searx/engines/wikipedia.py b/searx/engines/wikipedia.py index 2adfefa69..da867c81e 100644 --- a/searx/engines/wikipedia.py +++ b/searx/engines/wikipedia.py @@ -106,6 +106,6 @@ def _fetch_supported_languages(resp): articles = int(td[4].xpath('./a/b')[0].text.replace(',', '')) # exclude languages with too few articles if articles >= 100: - supported_languages[code] = {"name": name, "english_name": english_name, "articles": articles} + supported_languages[code] = {"name": name, "english_name": english_name} return supported_languages |