summaryrefslogtreecommitdiff
path: root/searx
AgeCommit message (Collapse)Author
2025-05-02[l10n] update translations from Weblatesearxng-bot
244e1f3f2 - 2025-04-30 - return42 <return42@noreply.codeberg.org>
2025-04-30[fix] brave: fix images and videos enginesBnyro
2025-04-29[fix] pdia: dynamically fetch API key config file locationDenperidge
As suggested by @Bnyro at https://github.com/searxng/searxng/pull/4652#discussion_r2055760390 !
2025-04-29[data] update searx.data - update_currencies.pyreturn42
2025-04-29[data] update searx.data - make data.traitsMarkus Heiser
Related: - https://github.com/searxng/searxng/pull/4687 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-04-29[fix] engine yahoo: replace fetch_traits by a list of languagesMarkus Heiser
The Yahoo engine's fetch_traits function has been encountering an error in CI jobs for several months [1], thus aborting the process for all other engines as well. The language selection dialog (which fetch_traits calls) requires an `EuConsent` cookie. Strangely, the cookie is not needed for searching, which is why the engine itself still works. Since Yahoo won't be conquering any new marketplaces in the foreseeable future, it should be sufficient to hard-implement the list of currently available languages ​​(`yahoo_languages`). [1] https://github.com/searxng/searxng/actions/runs/14720458830/job/41313149268 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-04-29[data] update searx.data - update_wikidata_units.pyreturn42
2025-04-29[data] update searx.data - update_ahmia_blacklist.pyreturn42
2025-04-29[data] update searx.data - update_firefox_version.pyreturn42
2025-04-29[data] update searx.data - update_external_bangs.pyreturn42
2025-04-27[l10n] update translations from Weblatesearxng-bot
bec89c8a4 - 2025-04-24 - Atul_Eterno <atul_eterno@noreply.codeberg.org> 97edb4d63 - 2025-04-23 - whytf <whytf@noreply.codeberg.org> e7111d6ec - 2025-04-22 - prashere <prashere@noreply.codeberg.org> f5eeda966 - 2025-04-20 - return42 <return42@noreply.codeberg.org>
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