checkholiday.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package public
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "log"
  6. "net/http"
  7. "sync"
  8. "time"
  9. util "app.yhyue.com/moapp/jybase/common"
  10. )
  11. type Holidy struct {
  12. isHolidy bool
  13. date string
  14. }
  15. const (
  16. URL = "http://apis.baidu.com/xiaogg/holiday/holiday?d=%s"
  17. KEY = "188da6713cec8bf6287ee14e4ddcee26"
  18. )
  19. var Now = Holidy{}
  20. var Lock = &sync.Mutex{}
  21. func CheckNowHoliday() bool {
  22. _now := time.Now().Format("20060102")
  23. if Now.date == _now {
  24. return Now.isHolidy
  25. } else {
  26. return GetNowHoliday(_now)
  27. }
  28. }
  29. func GetNowHoliday(_now string) bool {
  30. b1, b2 := GetHolidy(_now)
  31. if b2 {
  32. Lock.Lock()
  33. Now.date = _now
  34. Now.isHolidy = b1
  35. Lock.Unlock()
  36. }
  37. return b1
  38. }
  39. func GetHolidy(yyyymmdd string) (bool, bool) {
  40. m, b := GetUrl(yyyymmdd)
  41. if b {
  42. if m == "1" || m == "2" {
  43. return true, true
  44. }
  45. }
  46. return false, b
  47. }
  48. func GetUrl(date string) (m string, res bool) {
  49. defer util.Catch()
  50. req, err := http.NewRequest("GET", fmt.Sprintf(URL, date), nil)
  51. if err != nil {
  52. return
  53. }
  54. req.Header.Add("apikey", KEY)
  55. resp, err := http.DefaultClient.Do(req)
  56. defer resp.Body.Close()
  57. if err == nil {
  58. bs, err := ioutil.ReadAll(resp.Body)
  59. if len(bs) == 1 {
  60. m = string(bs)
  61. }
  62. if err != nil {
  63. log.Println("err:", err)
  64. } else {
  65. res = true
  66. }
  67. }
  68. return
  69. }