Blog Content Publish

自动化发布编辑与动态内容,支持质量校验和多平台同步。

已扫描
适合谁
内容运营团队、技术博客维护者
不适合谁
无技术背景的个人用户、无需内容标准化流程的简单发布需求者
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @leeguooooo/blog-content-publish

Skill 说明

命令、参数、文件名以原文为准

目标

  • 官方 npm 包名称为 @leeguoo/blog-publish(唯一可信来源)。
  • 使用 blog-publish 发布常规博客内容及动态栏目内容。
  • 确保动态栏目发布不泄露任何公开的 producer 信息。
  • editorialhotnewsai_news 中复用同一套技能。
  • 强制执行确定性质量规则,确保自动发布的新闻/热点简报可读且有源可查。
  • 利用 blog-publish 中的图片上传路径,生成 CDN 托管的 Markdown URL,用于嵌入资源。

适用场景

  • 发布常规编辑类文章。
  • 发布 hot/news/ai_news 下的动态栏目文章。
  • 执行批量技能同步至 ClawHub。

输入参数

  • 所有条目必需:

- locale

- slug

- title

- summary

- contentMarkdown

  • 动态栏目必需:

- section(取值:hotnewsai_news

  • 可选参数:

- pairId(若省略,服务端将回退使用 slug

- repoUrl

- sourceUrl

- publicSourceLabel

- tags

- decisionMeta

- producer(仅限内部使用,绝不用于公开展示)

质量审查标准(hot/news/ai_news 必须满足)

  • 输出结构要求:

- 标题 + 简短导语(summary)+ 结构化正文。

- 正文必须包含编号话题(## 1) ...## 2) ...),并以总结部分收尾。

- 动态简报通常应包含 4–8 个话题;除非原始来源极短,否则拒绝仅含 1–2 个薄弱话题的输出。

  • 话题质量要求:

- 每个话题必须包含五行内容:

- 来源/Source

- 证据/Evidence

- 摘要/Summary

- 解读/Interpretation

- 行动建议/Action

- 证据/Evidence 必须指向具体锚点(如发布清单项 / PR / Issue / 官方文档章节),不得仅为首页链接。

- 摘要/Summary 必须客观、基于来源事实。

- 解读/Interpretation 为推断或观点,不可虚构事实;必须明确标注影响等级(P0/P1/P2)。

- 行动建议/Action 必须可执行(例如:“立即升级”、“先进行灰度”、“保持观察”)。

  • 链接格式要求:

- 禁止在正文中或列表项中直接暴露裸链接。

- 仅允许使用 Markdown 链接格式:[来源标题](https://...)

- 每个话题应有一个主来源链接 + 一个可用的证据链接。

- 尽量避免多个话题间重复使用相同链接;证据链接应尽可能具有话题特异性。

  • 禁止模式:

- 不得出现“据说”“传闻”“未证实”等无出处表述。

- 不得包含占位文本(如 TBD待补充lorem ipsum)。

- 不得存在渲染占位符泄露(如 INLINE_CODERUBYPH@@...@@)。

- 不得在作者信息/元数据/正文内暴露内部 producer 身份(例如:“由 skill/openclaw bot 生成”)。

- 当 OpenClaw 是文章主题时,允许提及;但不得将其作为发布者身份。

质量评分(发布阈值)

  • 对每个话题从三个维度评分(每项 0–2 分):

- 证据质量:可追溯且具体。

- 摘要清晰度:事实准确、简洁明了、无歧义。

- 可操作性:建议具备可执行性。

  • 拒绝发布条件:

- 任一话题总分低于 4 分;

- 任一话题缺失 EvidenceAction

正文模板(news / hot / ai_news

# {{title}}

更新时间:{{timestamp}}
数据来源:{{source_set}}

> 说明:本期每条热点均包含「摘要 + 解读」。

## 1) {{topic_title}}
- 来源:[{{source_name}}]({{url}})
- 证据:[{{evidence_anchor}}]({{evidence_url}})
- 摘要:{{fact_summary}}
- 解读(P1):{{implication}}
- 行动建议:{{operator_action}}

## 2) {{topic_title}}
- 来源:[{{source_name}}]({{url}})
- 证据:[{{evidence_anchor}}]({{evidence_url}})
- 摘要:{{fact_summary}}
- 解读(P2):{{implication}}
- 行动建议:{{operator_action}}

## 总结
1. {{takeaway_1}}
2. {{takeaway_2}}
3. {{takeaway_3}}

预发布检查

  • 发布前运行预检,快速发现质量问题:

- blog-publish publish --dry-run --input <file>.json

- blog-publish publish --dry-run --input <file>.md

  • 快速 Markdown 安全校验示例:

- 拒绝裸链接:rg -n "(^|[^\\]\\()https?://" 用于检测生成的 Markdown 文件。

- 拒绝泄露渲染占位符:rg -n "INLINE_CODE|RUBYPH|@@[A-Z0-9_]+@@" 用于检测生成的 Markdown 文件。

- 验证每个话题均包含 Source + Evidence + Summary + Interpretation + Action

- 验证每个解读均包含风险等级标签(P0|P1|P2)。

- 验证证据链接在各话题间不完全重复。

- 若 pairId 缺失,需确保 slug 稳定,因服务器会使用其进行本地化分组。

  • 仅当预检通过后,方可执行正式发布。

发布规则

  • section 缺失时,默认值为 editorial
  • blog-publish publishblog-publish update 均支持 JSON 负载文件和带 frontmatter 的 Markdown 文件。
  • 使用 blog-publish post-list 查看现有 locale + slug 组合,以便编辑已有文章。
  • 使用 blog-publish download 将存储内容导出为可编辑的 Markdown frontmatter,再输入至 blog-publish update 进行更新。
  • 支持单语言提交,所有栏目均支持;服务器负责自动本地化。
  • 自动生成的栏目内容默认免费,不进入付费权限控制。
  • 保持 producer 仅作为内部元数据;公开显示应使用 publicSourceLabel 或栏目标签。

命令操作手册

  • 认证:

- pnpm add -g @leeguoo/blog-publish

- blog-publish login --api-base https://blog.misonote.com --sso-client-id misonote-blog-web --sso-redirect-uri https://blog.misonote.com/auth/callback

- blog-publish whoami

- blog-publish post-list --api-base https://blog.misonote.com --locale zh

- blog-publish download --api-base https://blog.misonote.com --locale zh --slug <slug> --output ./drafts/<slug>.zh.md

- blog-publish upload --api-base https://blog.misonote.com --file ./assets/cover.png --markdown-only

- blog-publish upload --api-base https://blog.misonote.com --file ./assets/cover.png --filename cover-final.png

  • 自动化认证(OpenClaw/CI):

- 仅使用服务令牌:PUBLISH_API_TOKEN=<secret>

- 预检:blog-publish whoami --api-base https://blog.misonote.com

- 永远不要提示终端用户完成浏览器授权链接。

  • 发布:

- blog-publish publish --dry-run --input <file>.json

- blog-publish publish --dry-run --input <file>.md

- blog-publish publish --input <file>.json

- blog-publish publish --input <file>.md

- blog-publish update --dry-run --input <file>.md

- blog-publish update --input <file>.md

媒体说明

  • 发布 API 现在使用 MEDIA_CDN_BASE_URL,并生成形如以下的图片 Markdown URL:

- https://img.leeguoo.com/media/<asset-id>/<filename>

  • 相同文件的重复上传会通过 SHA-256 去重,并返回:

- deduped: true 和已存在的 asset.id,而非创建重复项。

  • 在生成的 Markdown 中保持 img.leeguoo.com 作为默认图片主机,以利用 Cloudflare CDN 及缓存优势。
  • 技能同步:

- pnpm clawhub:sync:dry-run

- pnpm clawhub:sync:all

  • 兼容团队用语的别名(clawdhub sync all):

- pnpm clawdhub:sync:dry-run

- pnpm clawdhub:sync:all

失败处理

  • 发布失败:

- 首先检查 API 状态码和错误响应体。

- 修复验证问题(必填字段、权限范围),然后重试。

- 若质量门禁失败,重新生成当前语言版本内容后重试。

- 若登录时客户端或重定向配置错误,移除环境变量覆盖(BLOG_PUBLISH_SSO_CLIENT_IDBLOG_PUBLISH_SSO_REDIRECT_URI),并重新运行严格登录命令。

- 若在自动化环境中遇到 PUBLISH_UNAUTHORIZED 错误,停止交互式登录尝试,轮换 PUBLISH_API_TOKEN 后重试发布。

  • 同步失败:

- 记录错误输出并通知维护人员。

- 不应阻塞已发布的内容可见性。

- 在登录/权限/网络问题解决后重试同步。

L
@leeguooooo

已收录 1 个 Skill

相关推荐