implement openweather

This commit is contained in:
2025-12-04 18:37:46 +09:00
parent c59834e92b
commit b4e423c1bf
6 changed files with 1615 additions and 0 deletions

View File

@@ -0,0 +1,43 @@
package openweather
import (
"context"
"errors"
"fmt"
"log"
"resty.dev/v3"
)
var (
ErrForecast = errors.New("error in get forecast")
)
func Forecast(ctx context.Context, key string, lat float64, lon float64) (*ForecastResponse, error) {
client := resty.New()
defer func() {
err := client.Close()
if err != nil {
log.Println("error in close client", err)
}
}()
resp, err := client.R().
SetContext(ctx).
SetQueryParam("lat", fmt.Sprintf("%f", lat)).
SetQueryParam("lon", fmt.Sprintf("%f", lon)).
SetQueryParam("appid", key).
SetQueryParam("units", "metric").
SetResult(&ForecastResponse{}). //nolint:exhaustruct
Get("https://api.openweathermap.org/data/2.5/forecast")
if err != nil {
return nil, fmt.Errorf("error in get forecast: %w", err)
}
if resp.IsError() {
return nil, fmt.Errorf("%w: %s, %s", ErrForecast, resp.Status(), resp.String())
}
return resp.Result().(*ForecastResponse), nil //nolint:forcetypeassert
}