diff --git a/internal/v2/controller/thirdPartyApi/holidays.go b/internal/v2/controller/thirdPartyApi/holidays.go new file mode 100644 index 0000000..33255c1 --- /dev/null +++ b/internal/v2/controller/thirdPartyApi/holidays.go @@ -0,0 +1,55 @@ +package thirdPartyApi + +import ( + "encoding/json" + "github.com/gin-gonic/gin" + "recook/internal/back" + "recook/internal/v2/lib/holidays" + "strconv" + "time" +) + +type TianXingApi struct { +} + +var NowYear = "" +var HolidaysTemp = &resp{} + +type resp struct { + Code int `json:"code"` + Msg string `json:"msg"` + NewsList []newslist `json:"newsList"` +} + +type newslist struct { + Holiday string `json:"holiday"` + Name string `json:"name"` + Vacation string `json:"vacation"` + Remark string `json:"remark"` + Wage string `json:"wage"` + Start int `json:"start"` + Now int `json:"now"` + End int `json:"end"` + Tip string `json:"tip"` + Rest string `json:"rest"` +} + +// GetHolidays 获取节假日并缓存 +func (t *TianXingApi) GetHolidays(c *gin.Context) { + if NowYear == "" || NowYear != strconv.Itoa(time.Now().Year()) { + NowYear = strconv.Itoa(time.Now().Year()) + result, err := holidays.HolidaysApi.GetHolidays(NowYear) + if err != nil { + back.Fail(c, err.Error()) + return + } + err = json.Unmarshal([]byte(result), HolidaysTemp) + if err != nil { + back.Fail(c, err.Error()) + return + } + back.Suc(c, "操作成功", HolidaysTemp.NewsList) + } else { + back.Suc(c, "操作成功", HolidaysTemp.NewsList) + } +} diff --git a/internal/v2/lib/holidays/holidays.go b/internal/v2/lib/holidays/holidays.go new file mode 100644 index 0000000..3285f12 --- /dev/null +++ b/internal/v2/lib/holidays/holidays.go @@ -0,0 +1,57 @@ +package holidays + +import ( + "io/ioutil" + "net/http" + "net/url" + "strconv" + "strings" +) + +const hostUrl = "http://api.tianapi.com/jiejiari/index?" +const key = "f2599751017c50b91d6f31261ce6dbc0" +const yearType = 1 +const mouthTyoe = 2 + +var HolidaysApi = &holidaysApi{} + +type holidaysApi struct { +} + +func (h *holidaysApi) GetHolidays(year string) (string, error) { + request, err := h.request("get", hostUrl+url.Values{ + "key": {key}, + "type": {strconv.Itoa(yearType)}, + "date": {year + "-01-01"}, + }.Encode(), "") + if err != nil { + return "", err + } + return request, nil +} + +// @Style 网络请求 +func (h *holidaysApi) request(method string, host string, data string, headers ...*map[string]string) (string, error) { + client := &http.Client{} + method = strings.ToUpper(method) + + req, err := http.NewRequest(method, host, strings.NewReader(data)) + if err != nil { + return "", err + } + if len(headers) > 0 { + for key, value := range *headers[0] { + req.Header.Add(key, value) + } + } + resp, err := client.Do(req) + if err != nil { + return "", err + } + defer resp.Body.Close() + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + return "", err + } + return string(body), nil +}