Install
openclaw skills install weibo-save微博内容保存工作流。当用户发送微博链接(t.cn 短链接或 weibo.com 正文链接),或转发微博到微博龙虾助手时,自动执行:展开短链接 → 用 browser 抓取正文+图片 → 保存 Obsidian Markdown →(可选)推送飞书多维表格 →(可选)同步 Notion(含图片+作者头像)→(可选)生成发芽笔记。触发词:微博链接、t.cn、weibo.com、转发微博、保存微博。
openclaw skills install weibo-save收到微博链接或转发内容后,按以下步骤执行。
| 变量名 | 说明 | 示例 |
|---|---|---|
{{OBSIDIAN_ROOT}} | Obsidian 根目录(末尾无斜杠) | /Users/xxx/Documents/notes |
{{WEIBO_SAVE_SUBPATH}} | 微博保存子目录 | 09_知识库/04_微博收藏日报 |
{{FEISHU_APP_TOKEN}} | 飞书多维表格 app_token(不使用则留空) | T5o8bAfiraUEI5sf1d0cQGAHnVd |
{{FEISHU_TABLE_ID}} | 飞书 table_id(不使用则留空) | tblgXzbq712PlmwX |
{{NOTION_API_KEY}} | Notion API Key 路径(不使用则留空) | ~/.config/notion/api_key |
{{NOTION_DATABASE_ID}} | Notion database_id(不使用则留空) | 2ed1b1d7-1d88-81f5-bc5f-e1820c9e6d97 |
{{SPROUT_PROMPT_PATH}} | 发芽笔记提示词路径(默认已设,无需修改) | {{OBSIDIAN_ROOT}}/06_提示词库/文章内容处理/🌱发芽笔记.md |
{{BROWSER_PROFILE}} | Browser profile,推荐 openclaw | openclaw |
curl -sIL "https://t.cn/xxx" 2>&1 | grep -i "^location:" | tail -1
解析重定向后的完整 URL,格式类似:https://weibo.com/<uid>/<mid>
https://weibo.com/<uid>/<mid> — 微博正文页,需抓取https://weibo.com/u/<uid> — 用户主页,不抓https://weibo.com/<uid>/<mid>#comment — 评论页,去掉锚点取正文⚠️ 重要:每次操作前必须先查 tab 列表!
抓取方式:
browser action=tabs 查询当前所有 tab,找到有没有已存在的 weibo tabsuggestedTargetId;如果没有,用 browser action=open 打开新 tabwait 3000-5000ms)snapshot 或 evaluate 提取正文内容tab 查找逻辑:
// 先 tabs 拿到列表,找 url 包含 weibo.com 且不是个人主页的 tab
const weiboTab = tabs.find(t =>
t.url && t.url.includes('weibo.com') &&
!t.url.includes('/u/') &&
t.label !== 'profile-picker'
);
// 用 weiboTab.tabId 或 weiboTab.suggestedTargetId 作为 targetId
browser profile:使用 {{BROWSER_PROFILE}} 配置的值(推荐 openclaw)。
若 browser 方式失败(targetId stale 或 tab 失效):用 Jina Reader fallback:
curl -s "https://r.jina.ai/https://weibo.com/<uid>/<mid>"
问题:Sinaimg 域名解析到 198.18.x.x 私网 IP,被 SSRF 策略阻止,无法直接下载。
解决方式:
evaluate 在页面内发请求获取图片 blob图片保存目录:
{{OBSIDIAN_ROOT}}/{{WEIBO_SAVE_SUBPATH}}/{YYYY}/{MM}/imgs/
统一保存到 imgs/ 文件夹,不要按帖子分子目录。
文件名命名:使用原微博图片的文件名(从 URL 提取,如 5d098bccly1icntlfpye7j20xb0c7dii.jpg),不同帖子图片重名时自动覆盖。
Markdown 图片语法(必须使用,以便 Obsidian 渲染):

目录:{{OBSIDIAN_ROOT}}/{{WEIBO_SAVE_SUBPATH}}/
子目录结构:年份/月份/
命名格式:{日期}-{标题清理后}.md
YYYYMMDD/ \ : * ? " < > |),过长截断至 80 字符,空格替换为 -文件内容格式:
---
url: https://weibo.com/1560906700/5293103692120235
title: DeepSeek突然更新了「识图模式」,正式入门了多模态的能力圈
author: 阑夕
published: 2026-04-29
source: 微博
platform: weibo
captured_at: 2026-05-03
---
微博正文内容...
---
图片:


微博ID: <mid>
---
条件:{{FEISHU_APP_TOKEN}} 和 {{FEISHU_TABLE_ID}} 均已填写。
Bitable 配置(需要在飞书建表并配置对应字段):
{{FEISHU_APP_TOKEN}}{{FEISHU_TABLE_ID}}字段名映射(需要与实际表格字段名一致):
| 功能字段 | 示例字段名 |
|---|---|
| 微博链接 | 微博链接 |
| 标题 | 标题 |
| 作者 | 作者 |
| 发布时间 | 发布时间 |
| 全文 | 全文 |
| 处理状态 | 处理状态 |
| 平台 | 平台 |
写入字段:
微博链接:{"link": "https://weibo.com/...", "text": "微博标题"}(URL 字段)标题:微博标题作者:微博作者发布时间:DateTime 毫秒时间戳全文:微博正文处理状态 = new平台 = 微博写入方式:
feishu_bitable_create_record 创建记录feishu_bitable_update_record 更新 URL 字段条件:{{NOTION_API_KEY}} 和 {{NOTION_DATABASE_ID}} 均已填写。
{{NOTION_DATABASE_ID}}⚠️ 重要:不要在微博正文页提取头像——正文页同时渲染当前登录用户头像(导航栏)和作者头像,容易混淆取到错误的。
正确做法:单独打开作者主页 https://weibo.com/u/<uid> 提取头像。
// 在作者主页(weibo.com/u/<uid>)执行:
() => {
// 方法1:找 class="photo" 的 img(个人主页头像)
const photo = document.querySelector('img.photo');
if (photo && photo.src.includes('sinaimg')) return photo.src;
// 方法2:找 180x180 的一级页面大头像
const imgs = document.querySelectorAll('img');
for (const img of imgs) {
if (img.naturalWidth === 180 && img.naturalHeight === 180
&& img.src.includes('sinaimg.cn') && !img.src.includes('member') && !img.src.includes('vip')) {
return img.src;
}
}
return 'not found';
}
验证头像 URL:确保返回的 URL 包含 /crop.0.0. 或 /180.180/,格式如 https://tva1.sinaimg.cn/crop.0.0.180.180/...,这才是真实用户头像。
uid 从何来:从微博正文页 URL https://weibo.com/<uid>/<mid> 中提取第一个路径段即为作者 uid。
Step A:用 Notion File Upload API 上传图片
Notion 不支持外部 URL 图片块,只支持:
external:外部公开 URL(私网 IP 不行)file_upload:必须先通过 File Upload API 上传获取 file_upload idFile Upload 分三步:
# Step 1: 创建上传对象
curl -X POST "https://api.notion.com/v1/file_uploads" \
-H "Authorization: Bearer $NOTION_KEY" \
-H "Notion-Version: 2026-03-11" \
-H "Content-Type: application/json" \
-d '{"filename": "xxx.jpg", "content_type": "image/jpeg"}'
# 返回 upload_url 和 id
# Step 2: 上传文件内容(multipart/form-data)
curl -X POST "$upload_url" \
-H "Authorization: Bearer $NOTION_KEY" \
-H "Notion-Version: 2026-03-11" \
-F "file=@/path/to/image.jpg"
# Step 3: 在创建 page 或 append block 时使用 file_upload id
{
"type": "file_upload",
"file_upload": { "id": "<file_upload_id>" }
}
Step B:创建 page 时带上 children blocks(含图片块)
def create_page(title, author, author_url, weibo_url, date_str, img_file_ids):
blocks = [
{"object": "block", "type": "callout", "callout": {
"rich_text": [
{"type": "text", "text": {"content": f"@{author}"}, "annotations": {"bold": True}},
{"type": "text", "text": {"content": " "}},
{"type": "text", "text": {"content": weibo_url, "link": {"url": weibo_url}}},
],
"icon": {"emoji": "📖"} # 或 external 头像 URL
}},
{"object": "block", "type": "divider", "divider": {}}
]
for p in body_paragraphs:
blocks.append({"object": "block", "type": "paragraph", "paragraph": {
"rich_text": [{"type": "text", "text": {"content": p}}]
}})
if "📸" in p: # 找到图片标记段落
for fid in img_file_ids:
blocks.append({
"object": "block", "type": "image", "image": {
"type": "file_upload",
"file_upload": {"id": fid}
}
})
payload = {
"parent": {"database_id": DB_ID},
"properties": {...},
"children": blocks
}
Step C:设置页面图标(page icon)为作者头像
页面图标用 PATCH /v1/pages/{page_id} 设置:
{
"icon": {
"type": "external",
"external": {"url": "https://tva1.sinaimg.cn/crop.0.0.180.180/....jpg"}
}
}
Step D:设置 callout 块图标(callout icon)
callout 图标同样用 PATCH /v1/blocks/{block_id} 设置:
{
"callout": {
"icon": {
"type": "external",
"external": {"url": "https://tva1.sinaimg.cn/crop.0.0.180.180/....jpg"}
}
}
}
条件:{{SPROUT_PROMPT_PATH}} 文件存在。
用户明确说"仅保存"或"不发芽"时跳过。
路径:{{SPROUT_PROMPT_PATH}}
{微博文件名}__🌱发芽笔记.md回复用户,格式:
✅ 已保存
标题:《{微博标题}》
作者:{作者}
保存路径:{{WEIBO_SAVE_SUBPATH}}/{年份}/{月份}/{文件名}.md
飞书:已推送/未配置(按实际情况)
Notion:已同步/未配置(按实际情况,含{图片数}张图片 + 作者头像)
发芽笔记:已生成/已跳过(按用户要求)
| 类型 | 示例 | 处理方式 |
|---|---|---|
| t.cn 短链接 | http://t.cn/AXJZipwg | 展开重定向获取真实 URL → 抓取 |
| 微博正文链接 | https://weibo.com/1560906700/5293103692120235 | 直接抓取 |
| 用户主页 | https://weibo.com/u/2803301703 | 不抓(仅链接) |
| 评论页 | https://weibo.com/2803301703/N4O1SBV4b#comment | 去掉锚点取正文 |
profile="openclaw" 的 browser 方式naturalWidth===180 筛选会取到错误的用户头像。必须单独打开作者主页 weibo.com/u/<uid> 提取头像。