将微信公众号和小红书内容导入为结构化 Markdown,统一沉淀到 Obsidian 知识库。
这个仓库主要服务两类使用方式:
- 人类用户:在 Obsidian 里作为社区插件手动使用
- Agent 用户:作为 skill 直接调用导入能力
- 支持来源自动识别:微信公众号 / 小红书
- 支持单条导入与批量导入
- 自动抽取正文并转换为 Markdown
- 支持图片本地化下载,失败时自动回退远程链接
- 自动写入 frontmatter 元数据
- 支持分类目录与自定义文件夹
微信公众号:
https://mp.weixin.qq.com/s/...https://mp.weixin.qq.com/s?...
小红书:
https://www.xiaohongshu.com/explore/...https://www.xiaohongshu.com/discovery/item/...https://xhslink.com/...
默认 defaultFolder 为 External Files。
插件模式下,默认输出为:
- 笔记:
<defaultFolder>/<category>/<title>.md - 媒体:
<defaultFolder>/media/<title>/...
如果选择“自定义文件夹”:
- 笔记:
<customFolder>/<title>.md - 媒体:
<customFolder>/media/<title>/...
defaultFolder:导入根目录categories:分类列表,可在设置页维护;导入时会自动识别defaultFolder下已有的一级子目录,并在设置页同步展示(自动目录为只读)lastCategory:记忆最近一次选择downloadMedia:默认是否下载媒体debugEnabled:是否写入多平台统一调试日志(默认开启)
微信公众号文章会写入这些字段:
platformtitlesourceaccountwechat_idaliasauthorpublished_atpublished_tsimported_atcategorydescriptioncovertype
小红书笔记会写入这些基础字段:
platformtitlesourcecategoryimported_atcovertype
- 仅支持公开可访问内容
- 不处理登录、验证码、权限墙
- 微信风控页会终止导入并提示
- 平台页面结构变化可能影响解析逻辑
把构建产物放到当前 Vault 的插件目录里,目录名必须与 manifest.json 里的 id 完全一致:
<你的Vault>/.obsidian/plugins/multi-source-content-importer/
目录内至少包含这 3 个文件:
main.jsmanifest.jsonstyles.css
最简单的安装方式是直接从 GitHub Releases 下载当前版本的这 3 个文件,然后放到上面的目录里。
如果你是从源码本地安装,可以执行:
npm install
npm run build
mkdir -p "<你的Vault>/.obsidian/plugins/multi-source-content-importer"
cp main.js manifest.json styles.css "<你的Vault>/.obsidian/plugins/multi-source-content-importer/"如果你是开发时本地联调,推荐软链:
npm install
npm run build
ln -s "$(pwd)" "<你的Vault>/.obsidian/plugins/multi-source-content-importer"- 打开当前 Vault
- 进入
Settings -> Community plugins - 如果社区插件总开关未开启,先开启
- 在已安装插件列表里启用
Multi-Source Content Importer
满足下面任意一项,通常就说明插件已经正常加载:
- 左侧 Ribbon 出现书本图标
- 命令面板中能搜到
导入文章(微信 / 小红书) Settings -> Community plugins里能看到并打开该插件设置页
- 点击左侧 Ribbon 图标,或打开命令面板执行
导入文章(微信 / 小红书) - 粘贴一个或多个链接或分享文本
- 选择分类
- 按需勾选“下载图片到本地”
- 点击导入
- 命令面板可执行
运行多平台实网 Smoke 测试 - 插件设置页支持一键运行 Smoke、打开报告、打开调试日志(统一多平台)
- 插件设置页支持按行自定义微信/小红书 Smoke 用例
- 报告输出:
.obsidian/plugins/multi-source-content-importer/smoke-report.json - 调试日志:
.obsidian/plugins/multi-source-content-importer/debug.log - 设置页可关闭
debugEnabled
如果装了但不显示,建议按顺序检查:
- 插件目录名是否为
multi-source-content-importer main.js、manifest.json、styles.css是否直接放在插件目录根部- 是否放到了当前打开的 Vault 的
.obsidian/plugins/目录 - 如果是源码安装,是否先执行过
npm install和npm run build - 复制或软链完成后,是否重新加载过 Obsidian 或重新启用过插件
可以直接这样自检:
ls "<你的Vault>/.obsidian/plugins/multi-source-content-importer"至少应该看到:
main.jsmanifest.jsonstyles.css
错误示例:
<你的Vault>/.obsidian/plugins/multi-source-content-importer/
wx-article/
main.js
manifest.json
styles.css
正确示例:
<你的Vault>/.obsidian/plugins/multi-source-content-importer/
main.js
manifest.json
styles.css
如果你不是手动点 Obsidian 插件 UI,而是希望让 agent 直接调用导入能力,请使用 skill 目录:
推荐安装到:
~/.codex/skills/obsidian-content-importer/~/.claude/skills/obsidian-content-importer/
安装时必须复制整个目录,而不是只复制 SKILL.md,因为脚本也在里面:
SKILL.mdscripts/import-content.mjs
示例:
mkdir -p ~/.codex/skills ~/.claude/skills
cp -R skills/obsidian-content-importer ~/.codex/skills/
cp -R skills/obsidian-content-importer ~/.claude/skills/node ~/.codex/skills/obsidian-content-importer/scripts/import-content.mjs --help
node ~/.claude/skills/obsidian-content-importer/scripts/import-content.mjs --help安装依赖:
npm install构建:
npm run build热开发:
npm run devnpm run dev 会监听 main.ts,变更后自动重新生成 main.js。
如果你在 Obsidian 中联调,推荐这样刷新:
- 保持
npm run dev运行 - 在 Obsidian 中关闭再启用该插件
- 或执行
Reload app without saving
开发时推荐至少跑这 3 个检查:
npm run lint
npm run build
npx tsc --noEmit它们分别用于:
npm run lint:检查常见代码问题和 TypeScript / ESLint 规则npm run build:确认插件可以正常打包生成main.jsnpx tsc --noEmit:确认类型检查通过,但不额外输出文件
如果只想在提交前做一次快速自检,建议按上面这个顺序执行。
推荐按下面顺序执行:
- 更新
package.json版本,并同步manifest.json与versions.json - 执行
npm run lint - 执行
npm run build - 执行
npx tsc --noEmit - 创建与版本号一致的 Git tag 或 GitHub Release,例如
0.1.6 - 在 Release 上传
main.js、manifest.json、styles.css
- 修复小红书长图文笔记在开启“下载图片到本地”时,部分
sns-webpic-*.xhscdn.com/...!nd_dft...图片仍保留远程链接的问题 - 统一正文图片与封面图的本地媒体映射逻辑,避免因
http/httpsURL 形式不同而漏替换 - 补充“每天学点经济学|第149期:除权除息”为小红书 smoke 回归用例,并同步修正 agent skill 的同链路处理
- 调整插件描述文案,移除
Obsidian关键词以满足社区上架校验规则 - 继续保持
eslint + build + tsc本地检查全通过
- 接入
eslint-plugin-obsidianmd(Legacy.eslintrc)用于本地预检 - 修复一批 ObsidianReviewBot 必改项:移除
any、去除不必要断言、避免内联样式写法、configDir动态路径、console规范化 - 调整部分 UI 文案与设置项写法,减少 sentence-case / heading 规则误报
- 修复设置页“分类管理”与导入弹窗分类来源不一致的问题
- 设置页现在同步展示“自定义分类 + 自动发现目录”,其中自动目录为只读项
- 保持原有可编辑边界:重命名、排序、删除仅作用于手动配置分类
- 重构为“插件壳 + 平台服务”结构,拆分
main.ts并将微信/小红书逻辑模块化到src/platforms/* - 设置页统一为“多平台调试”章节,支持一键运行 smoke、查看报告、查看统一调试日志
- smoke 用例支持在设置页按平台自定义(每行一条),并通过真实插件入口执行
- 调试日志与报告统一路径:
- 日志:
.obsidian/plugins/multi-source-content-importer/debug.log - 报告:
.obsidian/plugins/multi-source-content-importer/smoke-report.json - 吸收
fix/custom-folder能力:导入分类自动合并defaultFolder下一级目录,自定义文件夹输入与建议选择联动 - 保持网络请求合规:继续使用
requestUrl,不回退 Node 内置网络模块
- 修复小红书
xhslink短链解析不稳定的问题,优先保留跳转后的分享参数,避免丢失xsec_token - 增强小红书短链解析 fallback,补充 Node
http/https请求链路,降低 Obsidian 运行时网络差异带来的失败率 - 遇到“小红书 - 你访问的页面不见了”时直接报错并停止导入,不再生成空白笔记
- 修复部分视频笔记因分享参数被裁剪而无法提取正文、封面和视频链接的问题
- 同步更新 agent skill 脚本的小红书短链与失效页处理逻辑
- 新增给 agent 直接调用的
obsidian-content-importerskill - 完善本地安装、软链联调与热更新说明
- 感谢开源项目
xiaohongshu-importer提供的实现思路与交互设计参考。