本文采用了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工具–任务计划程序中新建基本任务即可。请注意建议设置为在开机登录后几分钟再运行,给予电脑联网时间,其他附属条件根据需要进行设置,不建议限制启动次数。