用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()
}
相关文章
|
6月前
|
JSON 监控 数据可视化
实时日志分析:通过Golang编写实时日志分析模块,加强公司监控管理软件的日志监控功能
在当今数字化时代,企业面临着庞大而复杂的网络环境,对实时监控和日志分析的需求变得日益迫切。本文将介绍如何使用Golang编写实时日志分析模块,以增强公司监控管理软件的日志监控功能。通过本文的指导,你将能够建立一个定制的实时日志分析系统,更好地监测和管理公司的网络活动。
227 0
|
Go API
Golang:uiprogress在终端实现进度条功能
Golang:uiprogress在终端实现进度条功能
379 0
Golang:uiprogress在终端实现进度条功能
|
Java Linux Go
知识分享之Golang——实现命令行等待输入功能
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。 知识分享系列目前包含Java、Golang、Linux、Docker等等。
548 0
知识分享之Golang——实现命令行等待输入功能
|
关系型数据库 MySQL Linux
Golang入门教程(二)Ubuntu16.04下安装golang(实例:Golang 定时任务管理器)
通过两种方式安装 一、通过apt-get安装1、安装 sudo apt-get install golang 2、设置GOPATH变量 GOPATH是扩展库的目录,Go先搜索标准库目录,然后搜索GOPATH库目录,所有的非标准库都放在GOPATH下。
2263 0
|
JSON Go 数据格式
phantomjs技巧之golang后端生成highcharts图片文件
## 需求 项目要求为每一个阿里云大客户每周生成一份周报,周报内容包括各类云产品(如ECS/SLB/RDS/CDN)使用情况。我们知道通过前端js可以将highcharts曲线图/饼图等转换成图片格式,但是只能在线convert,也就是图片需要上传到highcharts服务器,数据安全肯定无法保证,所以本文借助phantomjs这个利器来直接通过服务端生成图片 ## highcharts配
3513 0
|
JavaScript 前端开发 Go
|
2月前
|
SQL 前端开发 Go
编程笔记 GOLANG基础 001 为什么要学习Go语言
编程笔记 GOLANG基础 001 为什么要学习Go语言
|
4月前
|
物联网 Go 网络性能优化
使用Go语言(Golang)可以实现MQTT协议的点对点(P2P)消息发送。MQTT协议本身支持多种消息收发模式
使用Go语言(Golang)可以实现MQTT协议的点对点(P2P)消息发送。MQTT协议本身支持多种消息收发模式【1月更文挑战第21天】【1月更文挑战第104篇】
109 1
|
4天前
|
Go 开发者
Golang深入浅出之-Go语言上下文(context)包:处理取消与超时
【4月更文挑战第23天】Go语言的`context`包提供`Context`接口用于处理任务取消、超时和截止日期。通过传递`Context`对象,开发者能轻松实现复杂控制流。本文解析`context`包特性,讨论常见问题和解决方案,并给出代码示例。关键点包括:1) 确保将`Context`传递给所有相关任务;2) 根据需求选择适当的`Context`创建函数;3) 定期检查`Done()`通道以响应取消请求。正确使用`context`包能提升Go程序的控制流管理效率。
14 1
|
5天前
|
安全 Go 开发者
Golang深入浅出之-Go语言并发编程面试:Goroutine简介与创建
【4月更文挑战第22天】Go语言的Goroutine是其并发模型的核心,是一种轻量级线程,能低成本创建和销毁,支持并发和并行执行。创建Goroutine使用`go`关键字,如`go sayHello("Alice")`。常见问题包括忘记使用`go`关键字、不正确处理通道同步和关闭、以及Goroutine泄漏。解决方法包括确保使用`go`启动函数、在发送完数据后关闭通道、设置Goroutine退出条件。理解并掌握这些能帮助开发者编写高效、安全的并发程序。
14 1