summaryrefslogtreecommitdiff
path: root/searx
AgeCommit message (Collapse)Author
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>
2025-03-21[fix] typo in doc-str: offical -> officialIkko Eltociear Ashimine
2025-03-21[fix] Results.url: don't normalize www.example.com to example.comMarkus Heiser
Hostname "www" in URL results can't be normalized to an empty string: - https://www.tu-darmstadt.de/ - https://tu-darmstadt.de/ Reported-By: @Bnyro <bnyro@tutanota.com> Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-03-21[l10n] update translations from Weblatesearxng-bot
efbb54229 - 2025-03-16 - gkkulik <gkkulik@noreply.codeberg.org> f76dddd02 - 2025-03-15 - cc5efd7b0 <cc5efd7b0@noreply.codeberg.org>
2025-03-21[fix] duckduckgo: answer sometimes contains faulty (duplicated) urlBnyro
2025-03-20[fix] presearch videos: item description and duration are located in ↵Bnyro
metadata field
2025-03-20[fix] presearch engine: News and Videos formatted incorrectlyAadniz
2025-03-19[fix] engine: core.ac.uk implement API v3 / v2 is no longer supportedTan Yong Sheng
2025-03-18[fix] duckduckgo: show proper source url of answersBnyro
2025-03-17[feat] engine: add selfh.st/icons for logos of common self-hosted programsBnyro
2025-03-16[engine] elasticsearch: add pagination supportBnyro
2025-03-15fixup! [fix] fix invalid escape error in Baidu Images & default config typoMarkus Heiser
2025-03-15[fix] fix invalid escape error in Baidu Images & default config typoZhijie He
2025-03-15[feat]: engines add images & kaifa from baidu.comZhijie He
2025-03-15[build] /staticMarkus Heiser
2025-03-15[fix] plugins: bugfix of tor_check and unit_converterMarkus Heiser
Closes: https://github.com/searxng/searxng/issues/4461 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-03-15[mod] migrate all key-value.html templates to KeyValue typeMarkus Heiser
The engines now all use KeyValue results and return the results in a EngineResults object. The sqlite engine can return MainResult results in addition to KeyValue results (based on engine's config in settings.yml), Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>