当用户在聊天窗口发送一个或多个链接,并希望默认进入内部收藏流程时使用。根据平台自动选择抓取器提取正文内容,整理为 Markdown,并上传到 OneDrive 个人账号目录。
把聊天中的网页链接整理为内部收藏 Markdown 文件,并上传到 OneDrive。
这是一个独立 skill,不依赖其他收藏 skill 的目录结构或调度关系。
在这些场景使用:
不适用:
internaldefuddle
x-tweet-fetcher
web-collector 本身只依赖“抓取器输出契约”,不直接依赖某一个抓取实现。
所有入口脚本会自动加载 skill 根目录下的 .env,系统环境变量优先于 .env。
上游最终至少要能提供一个 payload:
{
"title": "页面标题",
"url": "https://example.com/post",
"source": "来源站点",
"markdown_path": "/tmp/web-collector/raw/example.md",
"route": "internal"
}
用户发送链接
-> 拆分为多个 URL
-> 默认进入 internal 路由
-> 平台检测
-> 选择抓取器
-> 导出原始 Markdown
-> 生成标题 / 来源 / 标签
-> 组装最终 Markdown
-> 上传到 OneDrive
-> 写入本地缓存
优先使用总入口脚本,而不是逐个手动调用下游脚本。
抓取入口脚本名暂时保留为:
python3 scripts/export_from_defuddle.py --url "https://example.com/post"
虽然脚本名还是 defuddle,但内部已经会根据平台自动选择抓取器。
当原始 Markdown 已经导出后,使用:
python3 scripts/collect_from_defuddle.py --payload-file /tmp/extractor-export.json
WEB_COLLECTOR_USE_AI_TITLE=1 启用运行:
python3 scripts/extract_content.py "https://x.com/user/status/123"
输出会包含:
platform_idplatform_labelskillextractor其中:
skill 是兼容字段extractor 是内部标准字段,表示实际选中的抓取器scripts/extract_content.pyscripts/export_from_defuddle.pyscripts/collect_from_defuddle.pyscripts/build_markdown.pyscripts/deduplicate.pyscripts/tag_rules.pyscripts/upload_to_onedrive.pyscripts/onedrive_device_code.pyscripts/extractors/registry.pyscripts/extractors/defuddle_extractor.pyscripts/extractors/twitter_extractor.py所有脚本都应尽量输出 JSON 结果。错误格式统一为:
{
"success": false,
"error": {
"code": "CONFIG_MISSING",
"message": "ONEDRIVE_TARGET_PATH is required",
"retryable": false
}
}
常见错误码:
DUPLICATE_URLDEFUDDLE_FAILEDTWITTER_FETCH_FAILEDMARKDOWN_EXPORT_FAILEDTAG_GENERATION_FAILEDONEDRIVE_AUTH_REQUIREDONEDRIVE_TOKEN_REFRESH_FAILEDONEDRIVE_UPLOAD_FAILEDCONFIG_MISSING还需要用户提供或确认:
defuddle 在目标运行环境中可用x-tweet-fetcher 在目标运行环境中可访问.env 文件在目标运行环境中可读(若依赖 .env 配置)