A very specific Golang interface to the Dark Sky API for my Chrome Extension
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.1 KiB

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
}