将 HTML 或 Markdown 内容发布至 Bilibili — 支持 专栏(article)和 小站(tribee)两种目标类型。自动处理登录状态检查、标题输入,以及通过 ed… 注入内容。
bili- sunflower-publish. 统一发布 bilibili 的管道: HTML/Markdown 文件 – 编辑器 – 发布.. . 直接使用
功能概述
bili- sunflower-publish. 统一发布 bilibili 的管道: HTML/Markdown 文件 – 编辑器 – 发布.. . 直接使用是一项面向实际任务的技能,主要用于支持两个目标 : (A)。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
核心要点
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
- 该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。
- 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
使用与执行
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
结果检查与注意事项
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
bili-sunflower-publish
面向哔哩哔哩的统一发布流程:HTML/Markdown 文件 → 编辑器 → 发布。直接调用 window.editor API,不依赖系统剪贴板。
支持两类发布目标:
- 专栏(Article):发布于
member.bilibili.com的长文形式文章 - 小站(Tribee):发布于
bilibili.com/bubble的社区帖文
前置条件
- 浏览器工具,需配置
openclawprofile(由 Playwright 管理的浏览器实例)
输入
- 内容文件路径(正文)—— 支持
.html与.md/.markdown文件 - 目标类型:
article(专栏)或tribee(小站)—— 根据用户意图推断 - 标题(可选 — 见第二阶段)
- 若为目标为小站:需提供 小站名称或 ID(必填)
- 若为目标为小站:可选提供 分区(分类,用户可在发布时指定或手动选择)
第一阶段:导航与登录检查
专栏模式
跳转至 https://member.bilibili.com/york/read-editor 并截取快照。
- 已登录:编辑器加载完成,标题输入框显示提示文字
"请输入标题(建议30字以内)" - 未登录:跳转至登录页
小站模式
发布页面 URL:https://www.bilibili.com/bubble/publish?tribee_id={id}&tribee_name={name}
发布 URL 中 tribee_id 与 tribee_name 均为必需参数。缺失参数时按如下方式解析:
| 用户提供 | 解析方式 |
|---|---|
| id + name | 直接构造发布 URL |
| 仅 id | 跳转至 https://www.bilibili.com/bubble/home/{id},从页面中提取小站名称,再构造发布 URL |
| 仅 name | 访问搜索页 https://search.bilibili.com/all?keyword={name},查找指向 bilibili.com/bubble/home/{id} 的卡片,提取 {id},再构造发布 URL |
成功跳转至发布 URL 后:
- 已登录且为该小站成员:编辑器加载完成,显示标题与正文编辑区域
- 未登录:跳转至登录页
- 非该小站成员:可能显示加入提示 —— 需明确告知用户先加入小站
若未登录,立即中止并提示用户在 openclaw 浏览器 profile 中手动完成登录,之后重试。
第二阶段:预处理与标题处理
根据输入文件类型执行对应预处理脚本。脚本负责 H1 标题提取、标题层级提升、图片内联(inline),以及(对 HTML)空白字符清理。
2a. 对 .html 文件
python3 {SKILL_DIR}/scripts/preprocess_html.py [output-dir]
输出(标准输出,共 3 行):
title=<提取出的标题> path=<处理后 HTML 文件路径> bytes=
从输出中解析 title 与 path。位于 path 的已处理 HTML 文件即可用于第三阶段注入。
2b. 对 .md / .markdown 文件
python3 {SKILL_DIR}/scripts/preprocess_md.py [output-dir]
输出(标准输出,共 3 行):
title=<提取出的标题> path=<处理后 Markdown 文件路径> bytes=
从输出中解析 title 与 path。位于 path 的已处理 Markdown 文件即可用于第三阶段注入。
2c. 标题校验
若用户显式提供了标题,则优先采用该标题,而非脚本提取结果。
确定最终标题后,进行如下校验:
- 标题长度超过 50 字符:生成 2–3 个精简版备选标题,供用户选择
- 标题明显无意义(例如
output、untitled、temp,或明显与正文内容无关):读取正文前几百字符,生成 2–3 个标题建议,供用户选择
严禁静默采用低质量标题。必须等待用户选定后方可继续后续流程。
输入标题:点击标题输入框并键入。
第三阶段:插入文章正文
两种编辑器共享同一富文本编辑组件(window.editor)。
使用第二阶段产出的预处理内容注入编辑器。
重要 — JS 字符串转义要求:
内容(HTML 或 Markdown)常含破坏 JS 语法的字符(反引号、引号、换行符、反斜杠等)。你 必须 使用下方方法安全构造 JS 执行代码。禁止 将原始内容直接拼入 JS 变量赋值语句中。
如何构造 evaluate JS 代码
请严格按以下步骤操作,适用于 HTML 与 Markdown 注入:
- 从第二阶段输出中获取已处理文件路径(
path=...) - 运行以下命令,生成 JSON 转义后的文件内容字符串:
python3 -c "import json,sys; print(json.dumps(open(sys.argv[1]).read()))"
该命令输出一个双引号包裹的 JSON 字符串,其中所有特殊字符(换行、引号、反斜杠等)均已转义,例如:"line1nline2"quoted""。
- 将上述 stdout 输出捕获为
ESCAPED_JSON_STRING - 将
ESCAPED_JSON_STRING嵌入下述模板(见 3a-HTML / 3a-MD)构建完整 JS 代码。注意:该字符串本身已含双引号,因此应直接置于JSON.parse(后,无需额外添加引号。
3a-HTML:已处理 HTML → ClipboardEvent 派发
(function () {
const html = JSON.parse(ESCAPED_JSON_STRING);
const clipboardData = new DataTransfer();
clipboardData.setData('text/html', html);
clipboardData.setData('text/plain', '');
const pasteEvent = new ClipboardEvent('paste', {
bubbles: true,
cancelable: true,
clipboardData,
});
window.editor.view.dom.dispatchEvent(pasteEvent);
})();
注意: 若 HTML 内容较大(>50KB),需分块依次粘贴。
3a-MD:已处理 Markdown → editor importMarkdown 命令
(function () {
const markdown = JSON.parse(ESCAPED_JSON_STRING);
window.editor.commands.importMarkdown({
content: markdown,
replaceContent: true,
});
})();
3b. 内容校验
执行 JS 以确认内容已正确插入:
(function () {
const e = window.editor.view.dom;
return { chars: e.textContent.length, first80: e.textContent.substring(0, 80) };
})();
预期结果:chars > 100,且 first80 与文章开头一致。
第四阶段:发布
专栏模式
编辑器底部存在“发布设置”面板(通常默认可见),其默认配置可直接使用:
- 可见范围:所有人可见(默认)
- 封面:从正文自动提取(默认)
- 评论:开启(默认)
若用户有特定发布偏好,应在发布前调整:
| 设置 | 操作 | 说明 |
|---|---|---|
| 可见范围 | 单选:“所有人可见” / “仅自己可见” | “仅自己可见”不支持分享与商业推广 |
| 自定义封面 | 勾选复选框 → 上传图片 | 不设置则自动截取正文开头文字 |
| 评论开关 | 勾选/取消复选框 | 关闭后无法评论 |
| 精选评论 | 勾选复选框 | 开启后需手动筛选评论才展示 |
| 定时发布 | 勾选复选框 → 选择时间 | 时间范围:当前时间 +2 小时 至 7 天内(北京时间) |
| 创作声明-原创 | 勾选复选框 | 声明原创,禁止转载 |
| 创作声明-AI | 勾选复选框 | 标识使用 AI 合成技术 |
| 话题 | 点击“添加话题”按钮 | 可选 |
| 文集 | 点击“选择文集”按钮 | 可选 |
操作步骤:
- 滚动至底部,确认“发布设置”面板可见;若已折叠,点击“发布设置”按钮展开
- 应用上表中用户指定的各项设置
- 点击右下角 “发布” 按钮(位于“保存为草稿”旁)
- 若弹出确认对话框,确认操作
- 验证发布是否成功(URL 变化或出现成功提示)
小站模式
正文输入完成后,底部栏自动出现,默认配置可直接使用:
- 分区:未选择(部分小站可能强制要求)
- 同步至动态:开启(默认)
若用户有特定偏好,应在发布前调整:
| 设置 | 操作 | 说明 |
|---|---|---|
| 分区 | 点击“选择分区”下拉菜单 → 选择分区 | 部分小站可能必选 |
| 同步至动态 | 取消勾选复选框 | 默认开启,取消后不同步到动态 |
分区自动选择(仅小站)
当用户 未指定 分区时:
- 点击“选择分区”下拉菜单,展开可用选项列表
- 从下拉菜单中读取所有分区名称(通过快照)
- 基于 文章标题 + 正文前约 200 字符,选择最相关的分区:
- 依据关键词/主题相似性匹配(例如教程类内容 → “经验分享”,提问类 → “提问求助”)
- 若无明显匹配项,则选择最通用/兜底的分区
- 若小站仅有 1–2 个泛用选项,直接选取最优者,无需过度纠结
- 点击所选分区
- 无需 向用户确认 —— 直接选定并继续(用户可随时重新发布更正)
若用户 已指定 分区,则直接采用(跳过自动选择)。
操作步骤:
- 处理分区(按用户指定或上述自动逻辑)
- 应用其他用户指定的设置
- 点击右下角 “发布” 按钮(蓝色,右下角)
- 验证发布是否成功
执行方式
默认行为:在主会话中顺序执行第一至第四阶段(支持用户交互,如登录、标题选择等)。
仅当用户明确要求时,才交由子 agent 执行。
热门AI工具
相关专题
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。
0
2026.10.22
本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。
0
2026.10.22
本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。
0
2026.10.22
本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。
0
2026.10.22
本专题讲解Golangci-lint的安装、初始化、基础命令和首次代码检查,覆盖本地环境、Docker及多平台用法,帮助Go开发者快速上手。
0
2026.10.22
PHP2Shell漏洞是什么,哪些PHP版本和运行环境会受到影响,服务器应该如何检测与修复?本专题提供版本自查脚本、Linux与Docker升级命令、PHP-FPM和Apache排查步骤,以及修复验证、临时缓解和应急响应方案。
0
2026.10.22
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.5万人学习
共6课时 | 54.7万人学习
