summaryrefslogtreecommitdiff
path: root/searx
AgeCommit message (Collapse)Author
2025-04-24[fix] is_werkzeug_reload_active is not realted to python -mMarkus Heiser
Werkzeug's reloader is not active when was server is launched by uWSGI. Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-04-24Revert "[fix] is_werkzeug_reload_active is not realted to python -m"Markus Heiser
This reverts commit 3392beb914591cac6e862dab66e4d4911b798800.
2025-04-24[fix] fix Quark engine callingZhijie He
2025-04-24[fix] is_werkzeug_reload_active is not realted to python -mMarkus Heiser
Werkzeug's reloader is not active when was server is launched by:: python -m searx.webapp Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-04-24[mod] internal `!` and external `!!` bangs: ignore upper/lower caseMarkus Heiser
Closes: https://github.com/searxng/searxng/issues/1223 Suggested-by: @dalf https://github.com/searxng/searxng/issues/1223#issuecomment-1133772363 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-04-24[clean] drop unusable engine: server/project on curlie.org is brokenMarkus Heiser
The websites of https://curlie.org are no longer usable, long runtimes and recurring "Bad Gateway" messages .. the project is no longer maintained and is therefore no longer useful in SearXNG. Related: https://github.com/searxng/searxng/issues/1190 Closes: https://github.com/searxng/searxng/issues/3482 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-04-23[fix] typo in soundcloud engineMarkus Heiser
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-04-23[data] update searx.data - make data.traits (mullvad leta)Markus Heiser
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-04-23[fix] engine: re-implement mullvad leta integrationGrant Lanham
Re-writes the Mullvad Leta integration to work with the new breaking changes. Mullvad Leta is a search engine proxy. Currently Leta only offers text search results not image, news or any other types of search result. Leta acts as a proxy to Google and Brave search results. - Remove docstring comments regarding requiring the use of Mullvad VPN, which is no longer a hard requirement. - configured two engines: ``mullvadleta`` (uses google) and ``mullvadleta brave`` (uses brave) - since leta may not provide up-to-date search results, both search engines are disabled by default. .. hint:: Leta caches each search for up to 30 days. For example, if you use search terms like ``news``, contrary to your intention you'll get very old results! Co-authored-by: Markus Heiser <markus.heiser@darmarit.de> Signed-off-by: Grant Lanham <contact@grantlanham.com>
2025-04-23[mod] include SEARXNG_METHOD environment variableAadniz
2025-04-22[fix] issues when launching a local development serverMarkus Heiser
A local development server can be launched by one of these command lines:: $ flask --app searx.webapp run $ python -m searx.webapp The different ways of starting the server should lead to the same result, which is generally the case. However, if the modules are reloaded after code changes (reload option), it must be avoided that the application is initialized twice at startup. We have already discussed this in 2022 [1][2]. Further information on this topic can be found in [3][4][5]. To test a bash in the ./local environment was started and the follwing commands had been executed:: $ ./manage pyenv.cmd bash --norc --noprofile (py3) SEARXNG_DEBUG=1 flask --app searx.webapp run --reload (py3) SEARXNG_DEBUG=1 python -m searx.webapp Since the generic parts of the docs also initialize the app to generate doc from it, the build of the docs was also tested:: $ make docs.clean docs.live [1] https://github.com/searxng/searxng/pull/1656#issuecomment-1214198941 [2] https://github.com/searxng/searxng/pull/1616#issuecomment-1206137468 [3] https://flask.palletsprojects.com/en/stable/api/#flask.Flask.run [4] https://github.com/pallets/flask/issues/5307#issuecomment-1774646119 [5] https://stackoverflow.com/a/25504196 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-04-18[l10n] update translations from Weblatesearxng-bot
f290f4ffe - 2025-04-15 - return42 <return42@noreply.codeberg.org> 4a9134b03 - 2025-04-14 - DZDevelopers <dzdevelopers@noreply.codeberg.org> a8c86581d - 2025-04-14 - aindriu80 <aindriu80@noreply.codeberg.org> 2b5395719 - 2025-04-11 - ayame30 <ayame30@noreply.codeberg.org> 448a443fa - 2025-04-11 - ayame30 <ayame30@noreply.codeberg.org>
2025-04-18[feat] engine: add Steam engineZhijie He
2025-04-17[fix] disable engine ansa by defaultMarkus Heiser
Reported-by: https://github.com/searxng/searxng/pull/4575#issuecomment-2813007107 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-04-17[feat] engines: add Hugging Face engineZhijie He
2025-04-17[feat] engine: add engine for italian press agency ansaTommaso Colella
2025-04-17[fix] settings.yml files: doc & obsolete settings in the templateMarkus Heiser
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-04-17[fix] Result type: remove rstrip "/" form url normalizationTommaso Colella
2025-04-17[feat] add SensCritique (FR) engineRobinFrcd
Closes: https://github.com/searxng/searxng/issues/4623
2025-04-12[feat] engine: add microsoft learn engineTommaso Colella
2025-04-11[fix] engine dokuwiki: basedir duplicationgrasdk
Dokuwiki searches behind reverse proxy had duplicate base path in the url, creating a wrong url. This patch exchanges string concat of URLs with urljoin [1] from urllib.parse. This eliminates the dual problem, while retaining the old functionality designed to concatenate protocol, hostname and port (as base_url) with path. [1] https://docs.python.org/3/library/urllib.parse.html#urllib.parse.urljoin Closes: https://github.com/searxng/searxng/issues/4598
2025-04-11[l10n] update translations from Weblatesearxng-bot
63157cd1f - 2025-04-10 - pfaca <pfaca@noreply.codeberg.org> e50166782 - 2025-04-10 - return42 <return42@noreply.codeberg.org> f7ed39011 - 2025-04-09 - Kita Ikuyo <kitakita@disroot.org> c8786066f - 2025-04-08 - return42 <return42@noreply.codeberg.org> dd4adf136 - 2025-04-08 - return42 <return42@noreply.codeberg.org> df50952f0 - 2025-04-08 - return42 <return42@noreply.codeberg.org> d9a9a0bad - 2025-04-06 - eatyourglory <eatyourglory@noreply.codeberg.org>
2025-04-09[fix] make docs - ERROR: Unknown target name: "auth_key"Markus Heiser
BTW: fix a bug with sys.path: repo-root (not util) needs to added to generate autodoc from scripts in ./searxng_extra Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-04-07[fix] Meilisearch engine: Authorization Token When Integrating MeilisearchMarkus Heiser
`X-Meili-API-Key` has been changed to `Authorization` [1] [1] https://www.meilisearch.com/docs/reference/api/overview#authorization Suggested-by: https://github.com/searxng/searxng/issues/4416#issuecomment-2781254841 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-04-06[build] /staticMarkus Heiser
2025-04-06[fix] engine radio browser: get servers from DNS api.radio-browser.infoMarkus Heiser
Do a DNS-lookup of 'all.api.radio-browser.info', add reverse lookup and select randomly a URL from available servers Closes: https://github.com/searxng/searxng/issues/4576 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-04-04[l10n] update translations from Weblatesearxng-bot
faf95be5a - 2025-04-03 - sakistzimas <sakistzimas@noreply.codeberg.org> e42efee66 - 2025-04-02 - Juno Takano <jutty@noreply.codeberg.org> c1fbb26c4 - 2025-04-02 - return42 <return42@noreply.codeberg.org> 562d21fb9 - 2025-04-02 - ghose <ghose@noreply.codeberg.org> 1ea9e67c5 - 2025-04-01 - return42 <return42@noreply.codeberg.org> daaa0b41e - 2025-03-31 - wags07 <wags07@noreply.codeberg.org> 52635ec5f - 2025-03-31 - return42 <return42@noreply.codeberg.org> 589ad13f2 - 2025-03-31 - return42 <return42@noreply.codeberg.org> 1f063c96e - 2025-03-31 - return42 <return42@noreply.codeberg.org> c001e606d - 2025-03-31 - return42 <return42@noreply.codeberg.org> 9bc14f1a0 - 2025-03-31 - wags07 <wags07@noreply.codeberg.org> 6a524ecb4 - 2025-03-31 - return42 <return42@noreply.codeberg.org> 508fe79c7 - 2025-03-31 - return42 <return42@noreply.codeberg.org> 8c8db80e7 - 2025-03-31 - return42 <return42@noreply.codeberg.org> c9f551913 - 2025-03-31 - AndersNordh <andersnordh@noreply.codeberg.org> 6c56adc71 - 2025-03-31 - artens <artens@noreply.codeberg.org> 15526190b - 2025-03-31 - Linerly <linerly@noreply.codeberg.org> 2102783df - 2025-03-31 - AndersNordh <andersnordh@noreply.codeberg.org> fee510d78 - 2025-03-30 - kratos <makesocialfoss32@keemail.me> d5c9b970c - 2025-03-30 - Fjuro <fjuro@noreply.codeberg.org> 94259815b - 2025-03-30 - return42 <return42@noreply.codeberg.org> a448cf7da - 2025-03-29 - Outbreak2096 <outbreak2096@noreply.codeberg.org> 0c3ef7929 - 2025-03-29 - Priit Jõerüüt <jrtcdbrg@noreply.codeberg.org> ce2fbffe8 - 2025-03-29 - SomeTr <sometr@noreply.codeberg.org>
2025-04-03[build] /staticMarkus Heiser
2025-04-01[fix] hardening against arguments of type None, where str or dict is expectedMarkus Heiser
On a long-running server, the tracebacks below can be found (albeit rarely), which indicate problems with NoneType where a string or another data type is expected. result.img_src:: File "/usr/local/searxng/searxng-src/searx/templates/simple/result_templates/images.html", line 13, in top-level template code <img src="" data-src="{{ image_proxify(result.img_src) }}" alt="{{ result.title|striptags }}">{{- "" -}} ^ File "/usr/local/searxng/searxng-src/searx/webapp.py", line 284, in image_proxify if url.startswith('//'): ^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'startswith' result.content:: File "/usr/local/searxng/searxng-src/searx/result_types/_base.py", line 105, in _normalize_text_fields result.content = WHITESPACE_REGEX.sub(" ", result.content).strip() ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^ TypeError: expected string or bytes-like object, got 'NoneType' html_to_text, when html_str is a NoneType:: File "/usr/local/searxng/searxng-src/searx/engines/wikipedia.py", line 190, in response title = utils.html_to_text(api_result.get('titles', {}).get('display') or api_result.get('title')) File "/usr/local/searxng/searxng-src/searx/utils.py", line 158, in html_to_text html_str = html_str.replace('\n', ' ').replace('\r', ' ') ^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'replace' presearch engine, when json_resp is a NoneType:: File "/usr/local/searxng/searxng-src/searx/engines/presearch.py", line 221, in response results = parse_search_query(json_resp.get('results')) File "/usr/local/searxng/searxng-src/searx/engines/presearch.py", line 161, in parse_search_query for item in json_results.get('specialSections', {}).get('topStoriesCompact', {}).get('data', []): ^^^^^^^^^^^^^^^^ AttributeError: 'NoneType' object has no attribute 'get' Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-03-31[feat] add Quark autocomplete supportZhijie He
Co-authored-by: Bnyro <bnyro@tutanota.com>
2025-03-30[feat] engines: add Ollama engineZhijie He
2025-03-30[feat] engines: add reuters news engineBnyro
2025-03-30[feat] engine: add engine for italian online newspaper "il post"Tommaso Colella
2025-03-30[feat] engines: add Quark engineZhijie He
Co-authored-by: Bnyro <bnyro@tutanota.com>
2025-03-30[feat] engines: add Niconico videos engineZhijie He
Co-authored-by: Bnyro <bnyro@tutanota.com>
2025-03-30[feat] engine: add bitchutenaughtymommy42069
2025-03-30[data] update searx.data - update_engine_descriptions.pyMarkus Heiser
2025-03-29[refactor] migrate plugins from "module" to class SXNGPluginMarkus Heiser
This patch brings two major changes: - ``Result.filter_urls(..)`` to pass a filter function for URL fields - The ``enabled_plugins:`` section in SearXNG's settings do no longer exists. To understand plugin development compile documentation: $ make docs.clean docs.live and read http://0.0.0.0:8000/dev/plugins/development.html There is no longer a distinction between built-in and external plugin, all plugins are registered via the settings in the ``plugins:`` section. In SearXNG, plugins can be registered via a fully qualified class name. A configuration (`PluginCfg`) can be transferred to the plugin, e.g. to activate it by default / *opt-in* or *opt-out* from user's point of view. built-in plugins ================ The built-in plugins are all located in the namespace `searx.plugins`. .. code:: yaml plugins: searx.plugins.calculator.SXNGPlugin: active: true searx.plugins.hash_plugin.SXNGPlugin: active: true searx.plugins.self_info.SXNGPlugin: active: true searx.plugins.tracker_url_remover.SXNGPlugin: active: true searx.plugins.unit_converter.SXNGPlugin: active: true searx.plugins.ahmia_filter.SXNGPlugin: active: true searx.plugins.hostnames.SXNGPlugin: active: true searx.plugins.oa_doi_rewrite.SXNGPlugin: active: false searx.plugins.tor_check.SXNGPlugin: active: false external plugins ================ SearXNG supports *external plugins* / there is no need to install one, SearXNG runs out of the box. - Only show green hosted results: https://github.com/return42/tgwf-searx-plugins/ To get a developer installation in a SearXNG developer environment: .. code:: sh $ git clone git@github.com:return42/tgwf-searx-plugins.git $ ./manage pyenv.cmd python -m \ pip install -e tgwf-searx-plugins To register the plugin in SearXNG add ``only_show_green_results.SXNGPlugin`` to the ``plugins:``: .. code:: yaml plugins: # ... only_show_green_results.SXNGPlugin: active: false Result.filter_urls(..) ====================== The ``Result.filter_urls(..)`` can be used to filter and/or modify URL fields. In the following example, the filter function ``my_url_filter``: .. code:: python def my_url_filter(result, field_name, url_src) -> bool | str: if "google" in url_src: return False # remove URL field from result if "facebook" in url_src: new_url = url_src.replace("facebook", "fb-dummy") return new_url # return modified URL return True # leave URL in field unchanged is applied to all URL fields in the :py:obj:`Plugin.on_result` hook: .. code:: python class MyUrlFilter(Plugin): ... def on_result(self, request, search, result) -> bool: result.filter_urls(my_url_filter) return True Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-03-29[data] update searx.data - update_ahmia_blacklist.pyreturn42
2025-03-29[data] update searx.data - update_firefox_version.pyreturn42
2025-03-29[data] update searx.data - update_wikidata_units.pyreturn42
2025-03-29[data] update searx.data - update_currencies.pyreturn42
2025-03-28[fix] presearch engine: Unexpected crash if duration not in videosAadniz
2025-03-28[l10n] update translations from Weblatesearxng-bot
9a0c9e142 - 2025-03-27 - return42 <return42@noreply.codeberg.org> 8e06fb05a - 2025-03-27 - return42 <return42@noreply.codeberg.org> 8e683ef69 - 2025-03-27 - return42 <return42@noreply.codeberg.org> 3588715a0 - 2025-03-27 - return42 <return42@noreply.codeberg.org> acf531db2 - 2025-03-27 - return42 <return42@noreply.codeberg.org> b4b09bdef - 2025-03-27 - return42 <return42@noreply.codeberg.org> 8bef57082 - 2025-03-27 - return42 <return42@noreply.codeberg.org> 239bae388 - 2025-03-27 - return42 <return42@noreply.codeberg.org> ca6a6fc4f - 2025-03-27 - return42 <return42@noreply.codeberg.org> 2a19a52db - 2025-03-27 - return42 <return42@noreply.codeberg.org> 7b217fad1 - 2025-03-24 - Haraldher <haraldher@noreply.codeberg.org> 649d15f55 - 2025-03-24 - Haraldher <haraldher@noreply.codeberg.org>
2025-03-27[build] /staticMarkus Heiser
2025-03-27[fix] make docs -> ERROR: Unknown target name: "google: max 50 pages".Markus Heiser
Fix the issues reported by sphinx build:: docstring of searx.engines.google.max_page:1: ERROR: Unknown target name: "google: max 50 pages". docstring of searx.engines.google_images.max_page:1: ERROR: Unknown target name: "google: max 50 pages". docstring of searx.engines.google_scholar.max_page:1: ERROR: Unknown target name: "google: max 50 pages". Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-03-27[fix] baidu engine: properly decoding HTML escape codesAadniz
2025-03-25[refactor] duration strings: move parsing logic to utils.pyBnyro
2025-03-25[fix] duckduckgo news: unescaped html sequences in descriptionBnyro
2025-03-22[fix] make data.traits - partial revert of commit 30a8204Markus Heiser
The entries in the catalog of search languages are build up from the "Engine Traits" [1] and which entries are included in the catalog is controlled qby two threshold values [2]. If possible, the values should ensure that no languages or regions disappear from the catalog of search languages [3]. The threshold values should have been adjusted in commit 30a8204: - ``min_eng_per_region = 18`` - ``min_eng_per_lang = 22`` Because the threshold values were not adjusted, many entries were missing in the search language catalog. This bug has been fixed with this patch: the threshold values have been adjusted and the catalog of search languages has been completed again. [1] https://docs.searxng.org/dev/engines/enginelib.html#module-searx.enginelib.traits [2] https://github.com/searxng/searxng/blob/96a6e3dcb2283fa7ad9db4172a00582073a166d7/searxng_extra/update/update_engine_traits.py#L104-L105 [3] https://github.com/searxng/searxng/blob/master/searx/sxng_locales.py Closes: https://github.com/searxng/searxng/issues/4519 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>