mirror of
https://github.com/holidayapi/holidayapi-go.git
synced 2025-06-20 20:25:06 +00:00
82 lines
1.4 KiB
Go
82 lines
1.4 KiB
Go
package holidayapi
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/pkg/errors"
|
|
"github.com/simplereach/timeutils"
|
|
"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
|
|
}
|
|
|
|
type Respone struct {
|
|
Status int32 `json:"status"`
|
|
Requests Request `json:"requests"`
|
|
Holidays []Holiday `json:"holidays"`
|
|
}
|
|
|
|
type Request struct {
|
|
Used int32 `json:"used"`
|
|
Available int32 `json:"available"`
|
|
Resets timeutils.Time `json:"resets"`
|
|
}
|
|
|
|
type Holiday struct {
|
|
Name string `json:"name"`
|
|
Date timeutils.Time `json:"date,omniempty"`
|
|
Observed timeutils.Time `json:"observed"`
|
|
Public bool `json:"public"`
|
|
}
|
|
|
|
func (v1 *V1) Holidays(args map[string]string) (Respone, error) {
|
|
var data Respone
|
|
|
|
if _, ok := args["key"]; !ok {
|
|
args["key"] = v1.Key
|
|
}
|
|
|
|
params := url.Values{}
|
|
|
|
for k, v := range args {
|
|
params.Add(k, v)
|
|
}
|
|
|
|
resp, err := http.Get(v1.Url + params.Encode())
|
|
|
|
if err != nil {
|
|
return Respone{}, err
|
|
}
|
|
|
|
defer resp.Body.Close()
|
|
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
|
|
if err != nil {
|
|
return Respone{}, err
|
|
}
|
|
|
|
err = json.Unmarshal(body, &data)
|
|
if err != nil {
|
|
return Respone{}, err
|
|
}
|
|
|
|
if resp.StatusCode != 200 {
|
|
return Respone{}, errors.New("Unknown error!")
|
|
}
|
|
|
|
return data, nil
|
|
}
|