diff options
| author | Markus Heiser <markus.heiser@darmarIT.de> | 2026-09-02 13:40:53 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-09-02 13:40:53 +0200 |
| commit | 7a01f5830c8ae263a8884e4fde84cc8c100b053f (patch) | |
| tree | 884b8a4746a04bf72289ab5dfa64d6629ac90217 | |
| parent | 18af21159bd7b84880cd7265b184825493322232 (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.py | 14 |
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"]), |
