Obsidian 微信读书插件适配 Thino
2025年6月18日 · 894 字
项目背景与目标
本项目 obsidian-weread-plugin-thino基于社区版 obsidian-weread-plugin 进行深度定制,旨在更好地服务于微信读书用户,尤其是需要将读书笔记同步到 Thino插件的非Pro用户。通过本插件,用户可以实现微信读书高亮、书评等内容的自动化同步、分类与标签化管理。
主要功能改进
1. Thino 适配与推送格式优化
- 推送内容格式已适配 Thino 的 Memos 需求,支持 Pro 会员直接集成。
- 日记推送内容可自定义,满足不同平台的格式要求。
2. 自定义标签功能
- 支持在插件设置页自定义标签内容(如
#微信读书
)。 - 标签可自动添加到每条日历推送(如 Thino/Memos 格式)引用行的前面,便于后续分类、检索和自动化处理。
3. 动态模板变量支持
- 自定义标签支持 nunjucks 模板语法,可引用如
{{metaData.title}}
、{{metaData.author}}
等变量。 - 例如设置
#{{metaData.title}}
,则每条推送内容会自动带上当前书名作为标签,实现更智能的内容标记。
核心代码修改说明
增加序章内容笔记解析
parseResponse.ts
// 提取序章笔记(如果存在) const bookReview = notebook.bookReview; const chapterReviews = (bookReview.chapterReviews || []) .flatMap((chapterReview) => chapterReview.reviews || []) .filter((review) => { const createTime = window.moment(review.created * 1000).format('YYYYMMDD'); return today === createTime; });
修改推送到日记的格式
fileManager.ts
- Thino是根据时间来渲染的,所以最后是
- 时间 #标签 blockId 格式
private buildAppendContent(dailyNoteRefs: DailyNoteReferenece[]): string {
const rawCustomTag = get(settingsStore).customTag;
const appendContent = dailyNoteRefs
.map((dailyNoteRef) => {
// 修改写入日记的格式,适配Thino
// 格式为:- 12:00:00 ![[bookId#^refBlockId]]
const metaData = dailyNoteRef.metaData;
// 支持nunjucks模板渲染customTag
const customTag = rawCustomTag
? nunjucks.renderString(rawCustomTag, { metaData })
: '';
const blockList = dailyNoteRef.refBlocks.map((refBlock) => {
const createTime = refBlock.createTime * 1000;
const createDate = window.moment(createTime).format('HH:mm:ss');
return `- ${createDate} ![[${this.getFileName(dailyNoteRef.metaData)}#^${
refBlock.refBlockId
}]]`;
return `- ${createDate} ${
customTag ? ' ' + customTag : ''
} ![[${this.getFileName(metaData)}#^${refBlock.refBlockId}]]`;Add commentMore actions
});
const bodyContent = blockList.join('\n');
return bodyContent;
增加自定义标签设置
- 增加一个新的
customTag
的设置项,用户可以自定义标签内容 - 增加对nunjucks模板渲染,这样在 [[#修改推送到日记的格式]] 可以将模板中的变量进行渲染,增加自定义程度;
private customTagSetting(): void {Add commentMore actions
new Setting(this.containerEl)
.setName('自定义标签')
.setDesc(
'为所有导出的笔记添加一个自定义标签,可用于分类或自动化处理,可以使用模板中的变量,例如{{metaData.title}}等,需要在前面加上metaData'
)
.addText((input) => {
input
.setPlaceholder('如:#微信读书/{{metaData.title}}')
.setValue(get(settingsStore).customTag || '')
.onChange((value: string) => {
settingsStore.actions.setCustomTag(value);
});
});
}
使用方法与实际效果
- 在插件设置页填写自定义标签内容(支持模板变量)。
- 同步微信读书笔记后,所有推送内容会自动带上自定义标签。
- 标签内容可根据书名、作者等动态变化,便于后续自动化处理。
实际效果截图:
-
设置界面
-
日记显示
-
Thino显示
适用场景与价值
- 适合有微信读书高亮、书评等内容同步需求的 Obsidian 用户。
- 尤其适合需要将笔记推送到 Thino、Memos 等日历/知识管理平台的用户。
- 支持灵活标签与模板变量,极大提升内容的可检索性与自动化处理能力。