diff options
Diffstat (limited to 'pkg/apod/json.go')
-rw-r--r-- | pkg/apod/json.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/pkg/apod/json.go b/pkg/apod/json.go new file mode 100644 index 0000000..4589925 --- /dev/null +++ b/pkg/apod/json.go @@ -0,0 +1,48 @@ +package apod + +import ( + "encoding/json" + "fmt" + "regexp" + + "framagit.org/andinus/cetus/pkg/cetus" +) + +// Res holds the response from the api. +type Res struct { + Copyright string `json:"copyright"` + Date string `json:"date"` + Explanation string `json:"explanation"` + HDURL string `json:"hdurl"` + MediaType string `json:"media_type"` + ServiceVersion string `json:"service_version"` + Title string `json:"title"` + URL string `json:"url"` + + Code int `json:"code"` + Msg string `json:"msg"` +} + +// UnmarshalJson will take body as input & unmarshal it to res +func UnmarshalJson(res *Res, body string) error { + err := json.Unmarshal([]byte(body), res) + if err != nil { + return fmt.Errorf("UnmarshalJson failed\n%s", err.Error()) + } + return nil +} + +// GetJson returns json response received from the api +func GetJson(reqInfo map[string]string) (string, error) { + re := regexp.MustCompile("((19|20)\\d\\d)-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])") + if !re.MatchString(reqInfo["date"]) { + return "", fmt.Errorf("%s does not match format 'YYYY-MM-DD'", reqInfo["date"]) + } + + params := make(map[string]string) + params["api_key"] = reqInfo["apiKey"] + params["date"] = reqInfo["date"] + + body, err := cetus.GetRes(reqInfo["api"], params) + return string(body), err +} |