go 实现零点准时传递新春祝福

简介: 实现一个零点定时推送祝福的需求其实很简单,关键点是零点定时和推送消息出去两个功能。- 零点定时推送,可以使用 corn 包实现定时任务- 推送消息,调用飞书和企业微信提供的 webhook 接口,就可以实现消息的推送

前言

新年到了,自然新春祝福也是少不了的。为了能够准时给同事和客户发出自己的零点新春祝福,以此来表达自己的真诚祝福。所以准备在使用飞书和企业微信里的 webhook 功能实现零点准时发送新春祝福语。

分析

实现一个零点定时推送祝福的需求其实很简单,关键点是零点定时和推送消息出去两个功能。

  • 零点定时推送,可以使用 corn 包实现定时任务
  • 推送消息,调用飞书和企业微信提供的 webhook 接口,就可以实现消息的推送

详细设计

定时任务

安装 cron 包,然后就可以使用它创建一个简单的调度中心。

go get -u github.com/robfig/cron/v3

创建一个简单的任务调度可以直接使用 addFunc 方法。

c := cron.New()

c.AddFunc("@every 1s", func() {
   fmt.Println("hello")
})
    c.Start()

从上面简单的源码看到,其创建了一个每秒都会输出 hello 。@every 1s就是这个定时任务的触发事件。那么再看下 cron 官网中说明,触发时间支持 cron 表达式:

# 文件格式说明
┌──秒(0 - 59)
│ ┌──分钟(0 - 59)
│ │  ┌──小时(0 - 23)
│ │  │  ┌──日(1 - 31)
│ │  │  │  ┌─月(1 - 12)
│ │  │  │  │  ┌─星期(0 - 6,表示从周日到周六,该值不是非必需的)
│ │  │  │  │  │
* *  *  *  *  * 

所以如果要在整点准时发送触发任务执行,只需设置时间表达式:0 0 0 22 1 *。这样就可以在零点时间准时出发定时任务然后执行具体消息推送的功能。

消息推送

消息推送也是个比较简单的功能,就是通过http 请求hook 的地址发送消息。其中祝福语就可以自己编写好。

func sendMsg(apiUrl, msg string) {
    contentType := "application/json"
    sendData := `{
        "msg_type": "text",
        "content": {"text": "` + "六号积极分子的祝福:" + msg + `"}
    }`
    result, err := http.Post(apiUrl, contentType, strings.NewReader(sendData))
    if err != nil {
        fmt.Printf("post failed, err:%v\n", err)
        return
    }
    defer result.Body.Close()
}

使用自己编写好的祝福语在零点时候发送出去更加能体现自己的真诚。

如果使用企业微信自己内部应用的话,使用消息推送可以专门给具体的用户发送消息,这样就可以实现对具体的同事或客户发送祝福语。详细企业微信接口地址:https://developer.work.weixin.qq.com/document/path/90236#%E6%96%87%E6%9C%AC%E6%B6%88%E6%81%AF

请求方式:POST(HTTPS)
请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN
文本消息:
{
   "touser" : "UserID1|UserID2|UserID3",
   "toparty" : "PartyID1|PartyID2",
   "totag" : "TagID1 | TagID2",
   "msgtype" : "text",
   "agentid" : 1,
   "text" : {
       "content" : "你的快递已到,请携带工卡前往邮件中心领取。\n出发前可查看<a href="http://work.weixin.qq.com">邮件中心视频实况</a>,聪明避开排队。"
   },
   "safe":0,
   "enable_id_trans": 0,
   "enable_duplicate_check": 0,
   "duplicate_check_interval": 1800
}

祝福大家新春快乐!!!

源码在马上掘金上:https://code.juejin.cn/pen/7194483912859451451

目录
相关文章
我的Go+语言初体验——祝福留言小系统,让她也可以感受到你的祝福(上)
环境搭建 GO+版的祝福语管理系统 前期想法 界面展示 整体界面 增加祝福信息 修改操作 删除操作 退出
我的Go+语言初体验——祝福留言小系统,让她也可以感受到你的祝福(上)
|
5天前
|
人工智能 Go 调度
掌握Go并发:Go语言并发编程深度解析
掌握Go并发:Go语言并发编程深度解析
|
8天前
|
数据采集 存储 Go
使用Go语言和chromedp库下载Instagram图片:简易指南
Go语言爬虫示例使用chromedp库下载Instagram图片,关键步骤包括设置代理IP、创建带代理的浏览器上下文及执行任务,如导航至用户页面、截图并存储图片。代码中新增`analyzeAndStoreImage`函数对图片进行分析和分类后存储。注意Instagram的反爬策略可能需要代码适时调整。
使用Go语言和chromedp库下载Instagram图片:简易指南
|
2天前
|
存储 Go
用Go语言实现一个单协程消费者模型
用Go语言实现一个单协程消费者模型
12 0
|
2天前
|
编译器 Go C语言
一文速通Go语言面向对象编程
一文速通Go语言面向对象编程
9 0
|
2天前
|
Java 编译器 Go
一文速通go语言类型系统
一文速通go语言类型系统
7 0
|
2天前
|
存储 Java 编译器
一文快速掌握Go语言切片
一文快速掌握Go语言切片
4 0
|
2天前
|
自然语言处理 安全 Java
速通Go语言编译过程
速通Go语言编译过程
14 0
|
4天前
|
Go 开发者
Golang深入浅出之-Go语言上下文(context)包:处理取消与超时
【4月更文挑战第23天】Go语言的`context`包提供`Context`接口用于处理任务取消、超时和截止日期。通过传递`Context`对象,开发者能轻松实现复杂控制流。本文解析`context`包特性,讨论常见问题和解决方案,并给出代码示例。关键点包括:1) 确保将`Context`传递给所有相关任务;2) 根据需求选择适当的`Context`创建函数;3) 定期检查`Done()`通道以响应取消请求。正确使用`context`包能提升Go程序的控制流管理效率。
14 1