diff --git a/README.md b/README.md index ce9625c..5b17492 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,38 @@ # go-holidayapi -Official Go library for Holiday API +Official Go library for [Holiday API](https://holidayapi.com) + +## Usage + +```go +package main + +import ( + "fmt" + "github.com/joshtronic/go-holidayapi" +) + +func main() { + hapi := holidayapi.NewV1("_MY_API_KEY_") + + holidays, err := hapi.Holidays(map[string]interface{}{ + // Required + "country": "US", + "year": "2016", + // Optional + // "month": "7", + // "day": "4", + // "previous": "true", + // "upcoming": "true", + // "public": "true", + // "pretty": "true", + }) + + if err != nil { + // Error handling... + } + + fmt.Println("%#v\n", holidays) +} + +``` + diff --git a/holidayapi.go b/holidayapi.go index 9582f0b..4230179 100644 --- a/holidayapi.go +++ b/holidayapi.go @@ -1,36 +1,62 @@ -//package holidayapi -package main +package holidayapi -import "fmt" - -// TODO: import ( encoding/json net/http net/url ) +import ( + "encoding/json" + "io/ioutil" + "net/http" + "net/url" +) type V1 struct { + Url string Key string } func NewV1(key string) *V1 { v1 := &V1{ Key: key, + Url: "https://holidayapi.com/v1/holidays?", } return v1 } -func (v1 *V1) Holidays(parameters map[string]interface{}) map[string]interface{} { - return map[string]interface{}{ - "test": "ing", +func (v1 *V1) Holidays(args map[string]interface{}) (map[string]interface{}, error) { + var data map[string]interface{} + + if _, ok := args["key"]; !ok { + args["key"] = v1.Key } -} - -func main() { - hapi := NewV1("_MY_API_KEY_") - - fmt.Println(hapi.Key) - - holidays := hapi.Holidays(map[string]interface{}{ - "country": "US", - }) - - fmt.Println("%#v\n", holidays) + + params := url.Values{} + + for k, v := range args { + params.Add(k, v.(string)) + } + + resp, err := http.Get(v1.Url + params.Encode()) + + if err != nil { + return nil, err + } + + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + + if err != nil { + return nil, err + } + + json.Unmarshal([]byte(string(body)), &data) + + if resp.StatusCode != 200 { + _, ok := data["error"] + + if !ok { + data["error"] = "Unknown error." + } + } + + return data, nil }