本文采用了Golang语言编写汇率信息推送程序。**本代码由ChatGPT3.5生成,作者只对部分内容做了修改,不对代码安全性和合法性负责,请谨慎参考使用。**数据API接口由沧海数据API提供。sss

代码及附注

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package main

import (
"encoding/json"
"strconv"

"net/http"

"github.com/gen2brain/beeep" // 导入beeep包,用于发送通知
)

type ForexData struct {
Msg string `json:"msg"`
Code int `json:"code"`
Data []ForexRecord `json:"data"`
}

type ForexRecord struct {
Ticker string `json:"ticker"`
Date string `json:"date"`
Open float64 `json:"open"`
High float64 `json:"high"`
Low float64 `json:"low"`
Close float64 `json:"close"`
Volume float64 `json:"volume"`
}

func main() {
// 发送 HTTP GET 请求获取 JSON 数据
resp, err := http.Get("https://tsanghi.com/api/fin/forex/daily?token=demo&ticker=USDCNY&order=2")
if err != nil {
beeep.Alert("连接错误!", "无法获取数据,API失效或未连接至互联网! ", "")
return
}
defer resp.Body.Close()

// 解析 JSON 数据
var forexData ForexData
err = json.NewDecoder(resp.Body).Decode(&forexData)
if err != nil {
beeep.Alert("错误", "无法解析 JSON 数据: "+err.Error(), "")
return
}

// 检查是否成功获取数据
if forexData.Code != 200 {
beeep.Alert("错误", "获取数据失败: "+forexData.Msg, "")
return
}

// 提取第一个和第二个 close 值
var data1, data2 float64
if len(forexData.Data) >= 2 {
data1 = forexData.Data[0].Close
data2 = forexData.Data[1].Close
}

// 将float64转换为字符串
data1Str := strconv.FormatFloat(data1, 'f', 2, 64)
data2Str := strconv.FormatFloat(data2, 'f', 2, 64)

// 发送通知
err = beeep.Notify("美元兑人民币汇率", "昨日汇率为"+data1Str+",前日汇率为"+data2Str, "")
if err != nil {
beeep.Alert("错误", "无法发送通知: "+err.Error(), "")
}
}

你可以根据需要自行添加其他的数据,如开盘,收盘数据等。因为我们将在编译时选择不显示控制台,所以不建议添加print语句。

如果遇到在代码调试时出现的网络问题,可以尝试使用代理,这里不作过多赘述。如报错缺少mod等问题可以在代码文件路径下运行以下命令:

1
2
go mod init code.mod #初始化代码mod模块
go get github.com/gen2brain/beeep #因为代码中含有此包,需要get此包

交叉编译及后续优化

交叉编译

在Golang语言中我们一般使用go build 语句进行编译,但是获得的二进制可执行较大,在这个我们介绍一个辅助编译工具为UPX,这是一个常用的压缩动态库和可执行文件的工具,通常可减少 50-70% 的体积。我们在Github上下载合适的版本后解压出upx.exe文件放置在环境变量的目录中(部分情况可能需要赋予执行权限)后即可在CMD命令中生效。在代码目录下执行交叉编译命令:

1
go build -ldflags "-w -s -H=windowsgui" ./code.go && upx -9 code.exe

此命令中-s表示忽略符号表和调试信息 ,-w表示忽略DWARFv3调试信息,使用该选项后将无法使用gdb进行调试。-H=windowsgui表示隐藏控制台,upx中有1-9这几种压缩率,9为最高压缩率。

设置开启启动

在代码的目录下会出现一个.exe的可执行文件,我们把它放在合适的位置。以Windows系统为例,在控制面板–Windows工具–任务计划程序中新建基本任务即可。请注意建议设置为在开机登录后几分钟再运行,给予电脑联网时间,其他附属条件根据需要进行设置,不建议限制启动次数。