package main import ( "fmt" "log" "net/http" "github.com/google/go-querystring/query" ) // DarkSky API endpoint var ( BaseURL = "https://api.darksky.net/forecast" ) // DarkSky Api client type DarkSky interface { Forecast(request ForecastRequest) (ForecastResponse, error) } type darkSky struct { APIKey string Client *http.Client } // NewDarkSkyAPI creates a new DarkSky client func NewDarkSkyAPI(apiKey string) DarkSky { return &darkSky{apiKey, &http.Client{}} } // Forecast request a forecast func (d *darkSky) Forecast(request ForecastRequest) (ForecastResponse, error) { response := ForecastResponse{} url := d.buildRequestURL(request) log.Printf("DarkSkyUrl: %s\n", url) err := get(d.Client, url, &response) return response, err } func (d *darkSky) buildRequestURL(request ForecastRequest) string { url := fmt.Sprintf("%s/%s/%f,%f", BaseURL, d.APIKey, request.Latitude, request.Longitude) if request.Time > 0 { url = url + fmt.Sprintf(",%d", request.Time) } values, _ := query.Values(request.Options) queryString := values.Encode() if len(queryString) > 0 { url = url + "?" + queryString } return url }