首页 > 其他分享 >Golang如何实现节假日不打扰用户?

Golang如何实现节假日不打扰用户?

时间:2023-01-17 10:34:46浏览次数:58  
标签:节假日 打扰 Golang json result calendarJH juhe Result

1、场景

想象下以下场景,嘿嘿...!

一个iphone用户,闹钟是可以按节假日不响的!
每日新闻机器人,节假日是可以不打扰我的!
我的业务,节假日是可以...

2、思路

要实现识别节假日,大概有两种方式:

1、自己收集国家法定节假日数据,离线存储

优势:离线简单

劣势:新一年要去更新,容易忘记,麻烦

2、调用第三方接口数据

优势:不需要我们操心数据本身

劣势:有次数限制

本次介绍调用第三方接口的方式,用golang实现整个过程。

3、接口分析

分析了网上现有接口,发现juhe的api接口会比较合适,详细:

https://www.juhe.cn/docs/api/id/606

juhe1.png

分析:

juhe2.png

请求详情:

请求地址:http://apis.juhe.cn/fapig/calendar/day
请求参数:date=2023-01-16&detail=&key=c6ff98d3**\*\***be4a35b2
请求方式:GET
Header:
   Content-Type:application/x-www-form-urlencoded

返回内容:

{
  "reason":"success",
  "result":{
    "date":"2023-01-16",
    "week":"星期一",
    "statusDesc":"工作日",
    "status":null
  },
  "error_code":0
}

4、golang实现

4.1、json2go小工具

这里我们利用下json转golang struct的小工具,把接口返回的json转成golang的代码

https://www.bejson.com/transfor/json2go/

image.png

4.2、代码实现

package main

import (
  "encoding/json"
  "fmt"
)

func main() {
  // 当前日期
  todayStr := time.Unix(time.Now().Unix(), 0).Format("2006-01-02")
  key := "xxxxxxx" //获取,节假日信息查询接口 https://dashboard.juhe.cn/data/index/my

  // 判断当前是否是节假日(周末也算节假日,除非是节假日后补班情况),节假日跳过
  calendarJh := new(util.CalendarJH)
  isHolidays := calendarJh.IsHolidays(&todayStr, &key)
  if isHolidays {
    fmt.Printf("%v 是节假日,今天跳过!\n", todayStr)
    return
  }
}

// IsHolidays 是否是节假日(周末也算节假日,除非是节假日后补班情况)
func (calendarJH *CalendarJH) IsHolidays(date *string, key *string) bool {

  // 默认返回是节假日
  result := true

  // 调用juhe api 接口
  juheAPI := "https://apis.juhe.cn/fapig/calendar/day?date=" + *date + "&detail=1&key=" + *key
  body, _ := HttpGetInfo(&juheAPI)
  err := json.Unmarshal(*body, calendarJH)
  if err != nil {
    fmt.Printf("调用juhe接口出错,默认返回是节假日,错误原因:%v \n", err)
    return result
  }

  if calendarJH.Result.Status == "1" {
    result = true
    return result
  } else if calendarJH.Result.Status == "2" {
    result = false
    return result
  } else if calendarJH.Result.Status == nil {

    if calendarJH.Result.StatusDesc == "周末" {
      result = true
      return result
    } else if calendarJH.Result.StatusDesc == "工作日" {
      result = false
      return result
    }
  }

  return result
}

// CalendarJH 日历数据,来自juhe
type CalendarJH struct {
  Reason    string `json:"reason"`
  Result    Result `json:"result"`
  ErrorCode int    `json:"error_code"`
}
type Result struct {
  Date       string      `json:"date"`
  Week       string      `json:"week"`
  StatusDesc string      `json:"statusDesc"` //状态描述,节假日/工作日/周末。1.当status为1时,表示节假日;2.当status为2时,表示工作日;3.当status为null时,如果week为周六或者周日,表示周末,否则表示工作日
  Status     interface{} `json:"status"`     //当天状态标识,1:节假日,2:工作日,null:周末或工作日(可根据week进行判断,也可以直接根据statusDesc进行判断)
}

最后,若对您有帮助,请关注我,谢谢!

程序猿牧场公众号.png

标签:节假日,打扰,Golang,json,result,calendarJH,juhe,Result
From: https://www.cnblogs.com/zhouqinxiong/p/17057176.html

相关文章

  • golang: os.open函数
    Open函数/*类似c里的fopen函数返回一个file的指针传入参数文件名(路径)*/funcOpen(namestring)(*File,error){/*调用OpenFile函数,传......
  • golang:osd.read函数
    函数原型func(f*File)Read(b[]byte)(nint,errerror){//传入b一段内存Buff//检测file是否为空,为空则返回 iferr:=f.checkValid("read"......
  • golang 结构体
    结构体与JSON序列化JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON键值对是用来保存JS对象的一......
  • (转)Golang中自动“取引用”和“解引用”对原值的影响
    原文:https://blog.csdn.net/u014633283/article/details/839020201.写在前面我们知道Golang在调用方法时,会自动对实参进行“取引用”或“解引用”操作。我们在前面的博客......
  • golang map的定义与使用
    Mapmap是一堆键值对的未排序集合,比如以身份证号作为唯一键来标识一个人的信息。map是引用类型,键必须支持相等运算符(==,!=)类型,比如:int,string,float等内建类型,只含......
  • golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。
      #定义示例类型和变量typeHumanstruct{Namestring}varpeople=Human{Name:"zhangsan"} 普通占位符占位符说明......
  • golang切片
    切片切片并不是数组或者数组指针,切片只是对数组中连续片断的引用,这个片断可以是整个数组,也可以是由起始索引和终止索引标识的数组,所以切片是一个引用类型。//切......
  • golang 为图片加水印
    前段时间一个需求涉及到给图片加水印,考虑图片安全性,决定放在后端加水印。记录一下代码。思路思路是先为水印文字生成一个仅包含水印文字的图片,把这个图片倾斜一定角度(......
  • (转)Golang - new和make的使用和区别(示例详解)
    原文:https://www.cnblogs.com/beatleC/p/16081832.html前言:Go语言中new和make是内置函数,主要用来创建分配类型内存(相同点:堆上),其功能相似,却有本质区别。引入:变量的声明v......
  • (转)golang 函数
    原文:https://www.cnblogs.com/duoke360/p/15663943.htmlgolang函数简介函数的go语言中的一级公民,我们把所有的功能单元都定义在函数中,可以重复使用。函数包含函数的名称......