executing-plans
executing-plans
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available
zhihu-auto-publish知乎AI热点自动发布 — 从热点抓取、AI文章生成、封面图生成到知乎专栏发布,以及手动文章发布到知乎的完整流程。
Independent GitHub snapshot · Automated classification · Original documentation governs
支持两种核心场景:
读取 {skillDir}/settings.yaml 获取配置:
MINIMAX_API_KEY:MiniMax API Key(用于文章生成和封面图,必须从环境变量 MINIMAX_API_KEY 读取,禁止硬编码)MINIMAX_REGION:区域,可选 cn / global(从环境变量 MINIMAX_REGION 读取)MINIMAX_TEXT_MODEL:文本模型(默认 MiniMax-M2.7)MINIMAX_MAX_TOKENS:最大 token 数(默认 8192)MINIMAX_TEMPERATURE:温度(默认 0.7)ZHIHOU_COOKIE:知乎登录 Cookie(浏览器发布用,可选)TOPIC_COOLDOWN_DAYS:主题冷却天数(默认 1)ARTICLE_MIN_WORDS / ARTICLE_MAX_WORDS:文章字数范围TOPIC_ANGLES:文章角度池(轮换避免重复)UPLOAD_DIR:上传临时目录(必须为 /tmp/openclaw/uploads)当用户说"发知乎"、"发布到知乎"、"知乎热点发布"时,执行:
import yaml
import os
MINIMAX_API_KEY = os.environ.get("MINIMAX_API_KEY") # 优先从环境变量读取
settings = yaml.safe_load(open("{skillDir}/settings.yaml"))
settings["MINIMAX_API_KEY"] = MINIMAX_API_KEY
调用 {skillDir}/tools/topic_manager.py 的 TopicManager 检查冷却状态。
调用 {skillDir}/tools/article_generator.py 的 fetch_hn_ai_topics(limit=10) 抓取 HN AI 热点。
用 TopicManager.can_use_topic() 过滤冷却期内主题。
用 TopicManager.get_next_angle() 获取本次角度(技术解析/产业分析/实战案例/未来预测 等)。
from tools.article_generator import generate_article
article_path = generate_article(topic, angle, settings)
调用 mmx text chat(MiniMax 模型),生成 2500-3500 字知乎文章。
Prompt 内容约束(详见 article_generator.py):
from tools.cover_generator import generate_cover
cover_path = generate_cover(topic['title'], title, settings)
调用 mmx image generate,赛博朋克/未来科技风格封面,下载保存到 UPLOAD_DIR。
from tools.publisher import auto_publish
url = auto_publish(article_path, cover_path, title)
关键流程(实测经验):
https://zhuanlan.zhihu.com/writekeyboard.type() 直接注入内容到编辑器文件上传路径: 必须为 /tmp/openclaw/uploads/(OpenClaw browser upload 限制)
from tools.topic_manager import TopicManager
tm = TopicManager(settings)
tm.record_topic(topic['title'], angle, title)
更新 /tmp/zhihu_topic_state.json,避免 1 天内重复使用同一主题。
✅ 知乎发布成功
主题:{topic_title}
角度:{angle}
文章字数:{word_count}
封面:{cover_path}
链接:{url}
冷却期:1 天
当用户说"把这篇文章发到知乎"或"发布 [文章内容]"时:
{UPLOAD_DIR}/article_{timestamp}.md当用户说"帮我写一篇知乎文章"、"生成一篇 AI 热点文章"时:
所有页面操作使用 OpenClaw 的 browser 工具:
| 操作 | 命令 |
|---|---|
| 打开页面 | browser action=open url="https://zhuanlan.zhihu.com/write" |
| 获取内容 | browser action=snapshot → 解析 ref |
| 点击元素 | browser action=act request={kind:"click", ref:"<ref>"} |
| 输入文本 | browser action=act request={kind:"type", ref:"<ref>", text:"..."} |
| 上传文件 | browser action=upload paths=["/tmp/openclaw/uploads/file.md"] |
| 等待 | browser action=act request={kind:"wait", timeMs:3000} |
| 关闭 | browser action=stop |
重要规则:
cp 到 /tmp/openclaw/uploads/,才能 browser uploadkeyboard.type() 注入现象:setInputFiles() 成功返回,但编辑器内容为空(char count = 1)
原因:知乎的文件上传 handler 检测到非原生文件选择,有检查逻辑
解决:不用导入,直接 keyboard.type() 注入内容到 .public-DraftEditor-content
现象:用精确文本匹配找不到按钮
原因:innerText = "\n添加话题" 而不是 "添加话题"
解决:用 .replace(/\s+/g, ' ').trim() 去除空白后部分匹配
现象(旧):ArrowDown + Enter 无效
原因:如果用 evaluate 模拟.click() 打开弹窗,React 事件没触发,弹窗实际未打开
修复:必须用 Playwright 原生 locator().filter({ hasText: '添加话题' }).click() 打开弹窗
→ 弹窗正确打开后,searchInput.fill() + ArrowDown + Enter 即可选中
现象:点"添加来源"后,选项不直接出现 解决:先点"选择具体的信息来源"展开 → 选"官方网站" → "确认添加"
现象:内容+标题+话题+来源全填了,发布按钮仍然 disabled 实际要求:话题和来源二选一即可(两者都未选时 disabled)
MINIMAX_API_KEY 读取,禁止硬编码