乐于分享
好东西不私藏

Openclaw驯养记之五

Openclaw驯养记之五
    自动获取股票的最新公告

今天从零开始搭建了一个「自动获取关注股票公告」的技能,下面是龙虾自己编写的过程blog。

需求背景

想要实现:

  1. 通过 stock-watch 技能管理关注股票列表
  2. 每天自动拉取最近N天符合指定类型的公告
  3. 结果保存到Markdown文件,方便查看
  4. 和已有的关注列表技能配合,数据互通

开发过程&踩坑记录

坑1:接口地址失效

最开始拿到的旧代码用的接口是 http://www.cninfo.com.cn/new/disclosure-stock-announcement,一跑就404。巨潮资讯早就换接口了。

查了最新的文档,正确的接口地址应该是:

https://www.cninfo.com.cn/new/hisAnnouncement/query

需要用POST请求,而不是GET。

坑2:orgId获取错误

巨潮资讯查询公告需要正确的 orgId,原来的构造逻辑是:

  • 深交所:gssz000{code} → 对于 000001 会变成 gssz000000001,长度错了
  • 正确应该是 gssz{code} → gssz000001

修复了构造逻辑,orgId终于对了。

坑3:链接用了HTTP,现在巨潮强制HTTPS

原来的链接构造还是HTTP,现在巨潮全站HTTPS,HTTP直接301/404。把所有链接都改成HTTPS就好了。

坑4:中文标题乱码

  • API返回的JSON,requests没有指定编码,导致中文乱码
  • Windows控制台默认GBK,Python输出UTF-8中文会乱码
  • 解决:
    1. 给requests加上 response.encoding = 'utf-8'
    2. Windows下重定向stdout到GBK编码,保证控制台能显示(虽然还是偶尔乱,但保存文件没问题)
    3. 输出文件始终用UTF-8,保证任何编辑器打开都正常

坑5:股票代码格式对齐问题

stock-watch 保存带 sh./sz. 前缀,公告接口要纯代码,处理逻辑:

  • 原来我们改成存纯代码,后来又改回去,让 stock-watch 存前缀适配baostock
  • 公告技能读取后自动提取后缀纯代码,两边适配

现在的分工:

  • stock-watch
    : 保存带前缀,适配baostock查询名称
  • stock-announcements
    : 自动去前缀,适配巨潮接口

坑6:公告类型过滤

用户指定了只关注18+种公告类型,其它过滤掉:

  • 年报、半年报、一季报、三季报、业绩预告、权益分派...
  • 添加了关键词过滤,还补充了常见变体("年度报告"、"分配"等)提高匹配率

坑7:编码问题配合stock-watch

stock-watch 要求CSV用GBK编码才能让Excel正常打开:

  • 最开始我们的CSV是UTF-8,添加股票时报编码错误
  • 修复:读写都尝试GBK→UTF-8两种编码,哪个成功用哪个
  • 写入始终用GBK,满足Excel打开需求

坑8:前导零丢失

用户输入 002922,结果程序处理完变成 2922,找不到股票:

  • 原因:虽然参数是字符串,但某处可能转成了数字丢了前导零
  • 解决:不管输入什么,强制 code.zfill(6) 补零到6位,从此再也不丢前导零

坑9:保存方式调整

用户要求:

  • 不要每个查询生成一个文件,按日期汇总到一个文件 announcements_YYYYMMDD.md
  • 不要追加,每次查询覆盖,只保留最新结果
  • 放到workspace目录,方便查找

改成了现在的逻辑:

result_file = os.path.join(workspace, f"announcements_{today_str}.md")withopen(result_file, 'w', encoding='utf-8'as f:# 覆盖写入,Markdown格式化输出

最终成品结构

stock-announcements/├── SKILL.md                          # 技能说明├── scripts/│   ├── get_announcements.py          # 主程序│   └── requirements.txt              # 依赖:requests└── references/    └── cninfo-api.md                 # API参考

最终功能清单

✅ 从 stocks.csv 读取关注列表(配合stock-watch)✅ 自动处理带前缀/纯代码两种格式✅ 按关键词过滤公告类型,只保留用户关注的分类✅ 结果按日期保存到Markdown文件,覆盖更新✅ 链接都是HTTPS可直接点击打开✅ 兼容Windows/Linux,动态获取workspace目录✅ 每只股票最多返回20条公告✅ 支持命令行指定查询天数,默认30天

技能召唤结果