From 36cb2bd3e5338c7cecee8c3dee19da6a78b6d423 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 11 Apr 2026 11:05:28 +0700 Subject: [PATCH] fix: handle HTML response from Nominatim geocoding (rate limit) Co-Authored-By: Claude Sonnet 4.6 --- utils/service/geo_service.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/utils/service/geo_service.go b/utils/service/geo_service.go index 2ac7952..b54e033 100644 --- a/utils/service/geo_service.go +++ b/utils/service/geo_service.go @@ -61,6 +61,11 @@ func (g *nominatimGeocoder) GetAddressFromCoordinates(latitude, longitude float6 } defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + log.Printf("Nominatim returned HTTP %d for lat=%f lon=%f", resp.StatusCode, latitude, longitude) + return "", fmt.Errorf("geocoding service returned status %d", resp.StatusCode) + } + // Read full response body bodyBytes, err := ioutil.ReadAll(resp.Body) if err != nil { @@ -68,6 +73,10 @@ func (g *nominatimGeocoder) GetAddressFromCoordinates(latitude, longitude float6 return "", err } + if len(bodyBytes) > 0 && bodyBytes[0] == '<' { + log.Printf("Nominatim returned HTML instead of JSON (possible rate limit) for lat=%f lon=%f", latitude, longitude) + return "", fmt.Errorf("geocoding service unavailable (rate limited or network error)") + } var result NominatimResponse if err := json.Unmarshal(bodyBytes, &result); err != nil {