51 lines
901 B
Go
51 lines
901 B
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"net/url"
|
|
"time"
|
|
)
|
|
|
|
type ResponseData struct {
|
|
SunsetTime time.Time `json:"sunset"`
|
|
}
|
|
|
|
func getSunsetData(lat string, lng string) (*ResponseData, error) {
|
|
u, _ := url.Parse("https://api.sunrise-sunset.org/v2")
|
|
|
|
q := u.Query()
|
|
q.Set("lat", lat)
|
|
q.Set("lng", lng)
|
|
q.Set("formatted", "0")
|
|
|
|
u.RawQuery = q.Encode()
|
|
|
|
URL := u.String()
|
|
|
|
r, err := http.Get(URL)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer r.Body.Close()
|
|
|
|
if r.StatusCode != http.StatusOK {
|
|
return nil, fmt.Errorf("bad status: %d", r.StatusCode)
|
|
}
|
|
|
|
var apiResponse struct {
|
|
SunsetTime string `json:"sunset"`
|
|
}
|
|
|
|
if err := json.NewDecoder(r.Body).Decode(&apiResponse); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
parsedTime, err := time.Parse(time.RFC3339, apiResponse.SunsetTime)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &ResponseData{SunsetTime: parsedTime}, nil
|
|
}
|