Featured image of post Obsidian 微信读书插件适配 Thino

Obsidian 微信读书插件适配 Thino

基于社区版 obsidian-weread-plugin 进行深度定制,适配Thino,可以将读书笔记同步到Thino

项目背景与目标

本项目 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
    1
    2
    3
    4
    5
    6
    7
    8
    
    	// 提取序章笔记(如果存在)
    	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 格式
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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模板渲染,这样在 [[#修改推送到日记的格式]] 可以将模板中的变量进行渲染,增加自定义程度;
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
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);
				});
		});
}

使用方法与实际效果

  1. 在插件设置页填写自定义标签内容(支持模板变量)。
  2. 同步微信读书笔记后,所有推送内容会自动带上自定义标签。
  3. 标签内容可根据书名、作者等动态变化,便于后续自动化处理。

实际效果截图:

  • 设置界面 设置界面

  • 日记显示 日记显示

  • Thino显示 Thino显示

适用场景与价值

  • 适合有微信读书高亮、书评等内容同步需求的 Obsidian 用户。
  • 尤其适合需要将笔记推送到 Thino、Memos 等日历/知识管理平台的用户。
  • 支持灵活标签与模板变量,极大提升内容的可检索性与自动化处理能力。

如你是 Thino Pro 会员,可参考这个例子直接集成,无需单独使用本插件。

相关链接

Made By ❤️ishineee_
使用 Hugo 构建
主题 StackJimmy 设计