ZeeLin Report-to-X AutoPost 📰
把“报告网站/报告 JSON 列表 → 选最新未发报告 → 生成英文推文 → 发布到 X → 记录已发状态避免重复”封成一个可复用工作流。
适合场景:
- 每天自动发一篇报告到 X
- 从一个固定网站持续推广最新报告
- 同一批报告只发一次,不重复
- 需要通过网页端 X 发布,而不是 API
何时触发
当用户表达类似需求时使用:
- 「把这个报告网站每天发到我的推特」
- 「自动把最新报告发到 X」
- 「一天一个报告,不要重复」
- 「从 JSON / 网站里抓报告然后自动发推」
- 「帮我把报告站做成自动社媒分发」
默认工作原则
- 优先从结构化列表读取:先找
reports_config.json、RSS、JSON、静态配置,再考虑网页渲染内容 - 先去重,再发帖:发布前必须检查本地 state 文件,避免重复发同一篇
- 先摘要,再发布:推文应简洁介绍报告核心内容,并附源站网址
- 默认英文发帖:除非用户要求中文或双语
- 网页端发 X,不碰密码:用户需提前登录 X 网页版
- 定时任务用 cron:日更/周更统一用 OpenClaw cron 管理
推荐目录结构
skill/
├── SKILL.md
└── scripts/
└── post_daily_report.py
一次性发布流程
Step 1:确认数据源
优先确认报告源是否存在结构化入口,例如:
reports_config.json- RSS / Atom
- sitemap / JSON API
- 站点静态配置 JS 中引用的 JSON
如果是前端渲染站点,不要急着浏览器点击;先从 HTML/JS 中找数据源。
Step 2:挑选未发过的最新报告
- 读取报告列表
- 加载本地状态文件(例如
memory/report-post-state.json) - 找到第一个未发过的报告
- 如果没有未发报告,就停止,不要硬发旧内容
Step 3:生成推文
推文建议结构:
- 第一行:
Today's report: {title} - 第二段:1–2 句总结核心价值
- 最后一行:站点首页 URL(必要时可补具体报告 URL)
要求:
- 280 字符内
- 避免夸张营销腔
- 不要与上一条高度重复
Step 4:调用现成的 X 发帖脚本
优先复用已有网页端 X 发帖脚本,例如:
bash /path/to/tweet.sh "tweet text" https://x.com
如果发帖成功:
- 立刻把报告 id 写入 state 文件
如果失败:
- 不要写入已发状态
- 把错误保留下来,方便重试
定时发布流程
用户要求“每天一条、不重复”时:
- 创建本地脚本处理“读取报告列表 + 去重 + 生成推文 + 发布 + 更新状态”
- 再用
cron建每日任务
推荐时间:
Asia/Shanghai每天上午 10:00
状态文件建议
用 JSON 保存已发报告 id,例如:
{
"posted": [
"report-id-1",
"report-id-2"
]
}
关键防错规则
- 只有发帖成功后才能记录已发状态
- 如果找不到新报告,直接退出,不要重复发旧文
- 如果网站是 React/Vue 前端渲染,先找 JSON 数据源,不要一上来就人工点网页
- 如果用户指定“不要重复”,就必须持久化状态到文件
- 推文要附网址,默认附站点首页;用户要求更细时可附具体报告链接
最小可复用脚本
这个 skill 适合把通用逻辑写进 scripts/post_daily_report.py:
- 拉取远程报告列表
- 读/写状态文件
- 生成 tweet 文本
- 调用现有 tweet.sh
回报格式
完成后告诉用户:
- 今天发的是哪篇报告
- 是否已成功发到 X
- 定时任务是否创建成功
- 下次运行时间
TL;DR:
- 先找结构化报告列表
- 再选最新未发
- 生成英文推文 + 附网址
- 通过网页端 X 发出
- 记录状态避免重复
- 日更用 cron 挂起来