summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Heiser <markus.heiser@darmarIT.de>2026-09-02 13:40:53 +0200
committerGitHub <noreply@github.com>2026-09-02 13:40:53 +0200
commit7a01f5830c8ae263a8884e4fde84cc8c100b053f (patch)
tree884b8a4746a04bf72289ab5dfa64d6629ac90217
parent18af21159bd7b84880cd7265b184825493322232 (diff)
[fix] hardening engine: ddg weather - get GEO location from response (#6623)
The previous implementation ran into an error if the search term contained words other than just the location (ValueError was raised). To test engine use search terms like: !ddw weather berlin germany Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
-rw-r--r--searx/engines/duckduckgo_weather.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/searx/engines/duckduckgo_weather.py b/searx/engines/duckduckgo_weather.py
index 070d09d85..d7762c7aa 100644
--- a/searx/engines/duckduckgo_weather.py
+++ b/searx/engines/duckduckgo_weather.py
@@ -109,7 +109,19 @@ def response(resp: SXNG_Response):
json_data = loads(resp.text[resp.text.find('\n') + 1 : resp.text.rfind('\n') - 2])
- geoloc = weather.GeoLocation.by_query(resp.search_params["query"])
+ location = json_data.get("location")
+ if not location:
+ return res
+
+ metadata = json_data.get("weatherAlerts", {}).get("metadata", {})
+ geoloc = weather.GeoLocation(
+ name=location,
+ latitude=metadata.get("latitude"),
+ longitude=metadata.get("longitude"),
+ elevation=0,
+ country_code=metadata.get("language").split("-")[-1],
+ timezone=json_data.get("location"),
+ )
weather_answer = EngineResults.types.WeatherAnswer(
current=_weather_data(geoloc, json_data["currentWeather"]),