Skill: lephix/youdaonote-clip (version 1.21.8)

--- name: youdaonote-clip version: '1.21.8' description: 网页剪藏到有道云笔记。触发词：剪藏网页、保存网页、收藏网页。 metadata: {"openclaw": {"emoji": "📎", "requires": {"bins": ["node", "mcporter", "jq", "base64", "openclaw", "curl"], "tools": ["browser"], "env": ["YOUDAONOTE_API_KEY"]}, "primaryEnv": "YOUDAONOTE_API_KEY"}} --- # YoudaoNote Clip — 网页剪藏 将网页稳定保存到有道云笔记。核心原则：**优先成功率，其次才是速度**。 **并发限制**：本 Skill **不支持并发执行**。同一次请求里若有多个 URL，必须**逐个串行**处理，前一个完成后再处理下一个。 **先回复**：`正在保存中...` ## 路由判断 按优先级命中第一条即可： | 优先级 | 条件 | 路径 | |--------|------|------| | 1 | URL 为 `x.com` / `twitter.com` 且含 `/status/` | 路径 A | | 2 | 知乎文章、微信公众号、掘金、36kr、少数派、CSDN、163/qq 资讯正文页（正文可服务端直接抓取）；首页/搜索页/话题流/登录后页面**不走此路径** | 路径 B | | 3 | **所有其他页面**（默认路径，必须先尝试浏览器提取） | 路径 C | ## 路径 A — Twitter 专用流程 ```bash node {baseDir}/twitter-apify.mjs --url "<URL>" ``` 成功标准：stdout 输出 metadata JSON，且 `/tmp/youdaonote-clip-data.json` 已生成。 ```bash bash {baseDir}/clip-note.sh --data-file /tmp/youdaonote-clip-data.json --source-url "<URL>" ``` stdout 含 `{"ok":true` → **进入响应格式**。 ## 路径 B — 国内快速路径 ```bash bash {baseDir}/clip-note.sh --clip-web-page --source-url "<URL>" ``` stdout 含 `{"ok":true` → **进入响应格式**。若报超时、MCP 调用失败、unknown tool、内容明显不完整，立即降级到**路径 C**。 ## 路径 C — 浏览器提取（含降级） **第一步**：优先使用浏览器提取（支持 SPA 动态渲染、懒加载图片、JS 生成内容）。不建议直接用 web_fetch 替代，因为 web_fetch 只能获取原始 HTML，无法提取客户端渲染的页面内容。 ```bash bash {baseDir}/collect-page.sh "<URL>" ``` stdout 最后一行为 metadata JSON 且 `contentLength > 0` → **提取成功**，执行： ```bash bash {baseDir}/clip-note.sh --data-file /tmp/youdaonote-clip-data.json --source-url "<URL>" ``` stdout 含 `{"ok":true` → **进入响应格式**。 **当 collect-page.sh 报错时**（CSP、空内容、browser 不可用、timeout 等），降级为 web_fetch： 1. `web_fetch(url="<URL>", extractMode="markdown")` 2. 写入 `/tmp/youdaonote-clip-data.json`：`{"title":"页面标题","content":"<Markdown>","imageUrls":[],"source":"<URL>"}` ```bash bash {baseDir}/clip-note.sh --data-file /tmp/youdaonote-clip-data.json --markdown --source-url "<URL>" ``` stdout 含 `{"ok":true` → **进入响应格式**。 ## 响应格式 成功后回复： ```markdown 📎 **网页剪藏完成** | 项目 | 详情 | |------|------| | 📌 标题 | {实际页面标题或保存标题} | | 🔗 来源网址 | {原始 URL} | | ⏰ 剪藏时间 | {yyyy-MM-dd HH:mm} | > 标题以实际保存结果为准 ``` 不要编造“保存位置”或文件夹信息。当前链路默认保存为普通笔记，除非底层命令明确返回了可确认的位置。 ## 剪藏后引导（可选） ```bash mcporter call youdaonote.getRecentFavoriteNotes --args '{"limit":3}' --output json openclaw cron list --json | jq '.[] | select(.name == "youdaonote-news")' ``` 若收藏 ≥3 篇且未设置资讯推送，可追加：`💡 你已经收藏了 N 篇文章，试试说「资讯推送」看看 AI 为你整理的简报吧～` ## 调试 设置环境变量 `YOUDAONOTE_CLIP_DEBUG` 为日志目录路径即可开启调试模式： ```bash # 在 ~/.zshrc 或 ~/.bashrc 中配置 export YOUDAONOTE_CLIP_DEBUG="~/logs/youdaonote-clip" # 或临时开启 YOUDAONOTE_CLIP_DEBUG="~/logs/youdaonote-clip" bash clip-note.sh ... ``` `YOUDAONOTE_API_KEY`、`YOUDAONOTE_CLIP_DEBUG` 请在 OpenClaw config 的 `skills.entries["youdaonote-clip"].env` 中配置，执行时会注入为 process.env；或在 shell 中 export。 调试日志按 key 分目录存储：`{DEBUG_DIR}/{key}/main.log`（clip-note）、`twitter.log`、`collect.log`。各 path 首行会输出路径标识（A/B/C/D），便于排查。key 由首个脚本生成并写入 data-file 的 `_debugKey` 字段，串联整条剪藏流程。通过 perf-test/run-clip.sh 测试时，脚本会 export 该变量，日志写入可预期目录。 调试日志经过脱敏处理：不记录完整页面内容，仅记录长度和前 200 字符摘要。 ## 安全说明 **浏览器提取**：路径 C 使用 `openclaw browser evaluate` 在目标页面中注入内容解析脚本（inject-sdk.fn.js），用于提取正文、标题和图片列表。该脚本完全内联在 Skill 包中（不加载外部 CDN），代码可审计。注入仅用于读取 DOM 内容，不修改页面、不发送网络请求、不访问 cookie 或 localStorage。 **调试模式**：默认关闭。开启后仅写入脱敏的元数据（标题、URL、内容长度），不写入完整页面内容。 **环境变量**：核心模块 clip-note.mjs 不直接读取 `process.env`，由 `clip-note.sh` 从环境变量读取后通过命令行参数传入。`twitter-apify.mjs` 从 `process.env` 读取 `APIFY_API_TOKEN`（可选，仅 Twitter/X 路径使用）和 `YOUDAONOTE_CLIP_DEBUG`（可选，调试模式）。`collect-page.sh` 内联 Node 代码从 `process.env` 读取 `YOUDAONOTE_CLIP_DEBUG`。所有环境变量均由 OpenClaw 执行时从 `skills.entries["youdaonote-clip"].env` 注入。


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)