用Golang写的定时发送图片及消息的小功能

简介: 因为疫情公司流调表每天都要填写,因此负责此事情的同事每天都要往微信群里面发流调的二维码,有时忙的时候还忘记发二维码因此我就想利用github的openwechat这个库去实现这个功能涉及到的库有: "github.com/eatmoreapple/openwechat" "github.com/robfig/cron/v3" "github.com/skip2/go-qrcode" 心知天气的api
package main

import (
    "encoding/json"
    "fmt"
    "io"
    "log"
    "net/http"
    "os"

    "github.com/eatmoreapple/openwechat"
    "github.com/robfig/cron/v3"
    "github.com/skip2/go-qrcode"
)

//计划任务函数
func crontab(self *openwechat.Self, groups openwechat.Groups) {
    //每天上午7点30分10秒
    spec := "10 30 7 * * ?"
    c := cron.New(cron.WithSeconds())
    c.AddFunc(spec, func() {
        qrImg, err := os.Open("qr.jpg")
        if err != nil {
            log.Println(err)
        }
        defer qrImg.Close()
        self.SendImageToGroup(groups.GetByNickName("xxx软件组"), qrImg)
        self.SendTextToGroup(groups.GetByNickName("xxx软件组"), getWeather())
    })
    c.Start()
    select {}
}

//获取当天实时的天气情况函数
func getWeather() (weatherText string) {
    weatherUrl := "https://api.seniverse.com/v3/weather/daily.json?key=xxxxx&location=city&language=zh-Hans&unit=c&start=0&days=1"
    response, err := http.Get(weatherUrl)
    if err != nil {
        fmt.Println(err)
    }
    defer response.Body.Close()
    data, err := io.ReadAll(response.Body)
    if err != nil {
        log.Println(err)
    }
    // fmt.Printf("%s",data)
    weatherMap := make(map[string][]map[string][]map[string]string)
    json.Unmarshal(data, &weatherMap)
    weather := weatherMap["results"][0]["daily"]
    //日期
    weatherDate := weather[0]["date"]
    //当天最高气温
    weatherHigh := weather[0]["high"]
    //当天最低所温
    weatherLow := weather[0]["low"]
    //天气
    weatherDay := weather[0]["text_day"]
    weatherText = fmt.Sprintf("我是精灵萌萌今天%s日,天气%s今日最高气温%s度最低气温%s度,大家不要忘记填写流调呦~~", weatherDate, weatherDay, weatherHigh, weatherLow)
    return weatherText
}

//生成二维码,主要是配置控制台使用的一个函数
func ConsoleQrCode(uuid string) {
    q, _ := qrcode.New("https://login.weixin.qq.com/l/"+uuid, qrcode.Low)
    fmt.Println(q.ToString(true))
}
func main() {
    // bot := openwechat.DefaultBot()
    bot := openwechat.DefaultBot(openwechat.Desktop) // 桌面模式,上面登录不上的可以尝试切换这种模式

    // 注册消息处理函数
    bot.MessageHandler = func(msg *openwechat.Message) {
        if msg.IsText() && msg.Content == "ping" {
            msg.ReplyText("pong")
        }
    }
    // 注册登陆二维码回调
    bot.UUIDCallback = openwechat.PrintlnQrcodeUrl

    // 注册登陆二维码在终端下回调
    bot.UUIDCallback = ConsoleQrCode
    // 登陆
    if err := bot.Login(); err != nil {
        fmt.Println(err)
        return
    }

    // 获取登陆的用户
    self, err := bot.GetCurrentUser()
    if err != nil {
        fmt.Println(err)
        return
    }

    // 获取所有的群组
    groups, err := self.Groups()
    if err != nil {
        log.Println(err)
    }
    // fmt.Println(groups, err)

    //按时间计划发送信息
    go crontab(self, groups)

    // 阻塞主goroutine, 直到发生异常或者用户主动退出
    bot.Block()
}
相关文章
|
1月前
|
Go Python
通过 atexit 模块让 Python 实现 Golang 的 defer 功能
通过 atexit 模块让 Python 实现 Golang 的 defer 功能
20 2
|
JSON 监控 数据可视化
实时日志分析:通过Golang编写实时日志分析模块,加强公司监控管理软件的日志监控功能
在当今数字化时代,企业面临着庞大而复杂的网络环境,对实时监控和日志分析的需求变得日益迫切。本文将介绍如何使用Golang编写实时日志分析模块,以增强公司监控管理软件的日志监控功能。通过本文的指导,你将能够建立一个定制的实时日志分析系统,更好地监测和管理公司的网络活动。
334 0
|
Go API
Golang:uiprogress在终端实现进度条功能
Golang:uiprogress在终端实现进度条功能
469 0
Golang:uiprogress在终端实现进度条功能
|
Java Linux Go
知识分享之Golang——实现命令行等待输入功能
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。 知识分享系列目前包含Java、Golang、Linux、Docker等等。
606 0
知识分享之Golang——实现命令行等待输入功能
|
关系型数据库 MySQL Linux
Golang入门教程(二)Ubuntu16.04下安装golang(实例:Golang 定时任务管理器)
通过两种方式安装 一、通过apt-get安装1、安装 sudo apt-get install golang 2、设置GOPATH变量 GOPATH是扩展库的目录,Go先搜索标准库目录,然后搜索GOPATH库目录,所有的非标准库都放在GOPATH下。
2307 0
|
JSON Go 数据格式
phantomjs技巧之golang后端生成highcharts图片文件
## 需求 项目要求为每一个阿里云大客户每周生成一份周报,周报内容包括各类云产品(如ECS/SLB/RDS/CDN)使用情况。我们知道通过前端js可以将highcharts曲线图/饼图等转换成图片格式,但是只能在线convert,也就是图片需要上传到highcharts服务器,数据安全肯定无法保证,所以本文借助phantomjs这个利器来直接通过服务端生成图片 ## highcharts配
3586 0
|
2月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
116 4
Golang语言之管道channel快速入门篇
|
2月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
67 4
Golang语言文件操作快速入门篇
|
2月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
104 3
Golang语言之gRPC程序设计示例
|
2月前
|
安全 Go
Golang语言goroutine协程并发安全及锁机制
这篇文章是关于Go语言中多协程操作同一数据问题、互斥锁Mutex和读写互斥锁RWMutex的详细介绍及使用案例,涵盖了如何使用这些同步原语来解决并发访问共享资源时的数据安全问题。
86 4