English | 简体中文
Important
中文文档可能落后于英文文档,如果有问题请先查看英文文档。
Trilium Note的ETAPI的Python客户端。
- 🐍 trilium-py
python3 -m pip install trilium-py --user
以下是Trilium的ETAPI提供的基本功能。下面是一些使用这个包的简单示例代码。
如果你有一个ETAPI令牌,请将 server_url
和 token
更改为你自己的。
from trilium_py.client import ETAPI
server_url = 'http://localhost:8080'
token = 'YOUR_TOKEN'
ea = ETAPI(server_url, token)
如果你还没有创建ETAPI令牌,你可以使用密码创建一个。请注意,你只能看到这个令牌一次,请保存它以便重用。
from trilium_py.client import ETAPI
server_url = 'http://localhost:8080'
password = '1234'
ea = ETAPI(server_url)
token = ea.login(password)
print(token)
初始化后,就可以使用Python使用Trilium的ETAPI了。以下是一些示例。
首先,你可以获取应用程序的信息。
print(ea.app_info())
可以输出服务器应用程序的版本等信息。
使用关键字搜索笔记。
res = ea.search_note(
search="python",
)
for x in res['results']:
print(x['noteId'], x['title'])
使用正则表达式进行搜索。例如,搜索并获取特定笔记下的所有子笔记:
res = ea.search_note(
# 通过笔记标题进行正则表达式搜索
search="note.title %= '.*'",
ancestorNoteId="父笔记ID",
fastSearch=False,
limit=1000,
)
你可以像这样创建一个简单的笔记。
res = ea.create_note(
parentNoteId="root",
title="笔记标题",
type="text",
content="笔记内容",
noteId="note1"
)
noteId
不是必需的,如果没有提供,Trilium会生成一个随机的。返回信息里可以看到这个noteId的值。
noteId = res['note']['noteId']
图像笔记是一种特殊类型的笔记。你可以使用最少的信息创建一个图像笔记,如下所示。image_file
是图片的路径。
res = ea.create_image_note(
parentNoteId="root",
title="Image note 1",
image_file="shield.png",
)
检索笔记的内容。
ea.get_note_content("noteid")
你可以通过笔记的ID获取笔记的元数据。
ea.get_note(note_id)
更新笔记内容
ea.update_note_content("noteid", "由Python更新")
修改笔记标题
ea.patch_note(
noteId="noteid",
title="Python客户端修改",
)
通过笔记ID删除一个笔记。
ea.delete_note("noteid")
你可以使用 get_day_note
获取特定日期的内容。日期字符串应该采用"%Y-%m-%d"的格式,例如 "2022-02-25"。
ea.get_day_note("2022-02-25")
然后使用 set_day_note
设置/更新一个日记。内容应该是一个(HTML)字符串。
ea.set_day_note(date, new_content)
导出笔记有两种格式 html
或 markdown
/md
。
res = ea.export_note(
noteId='sK5fn4T6yZRI',
format='md',
savePath='/home/nate/data/1/test.zip',
)
这个例子将创建一个数据库备份文件,类似于 trilium-data/backup/backup-test.db
。
res = ea.backup("test")
你可以使用Linux中的cron实用程序来安排定期自动备份。例如,要在每天上午3:00进行一次备份,你可以使用以下cron表达式:
0 3 * * * python /path/to/backup-script.py
获取图片标题等。
res = ea.get_attachment('Y5V6pYq6nwXo')
更改图片标题等。
res = ea.update_attachment(
attachmentId='2b7pPzqocS1s', title='你好ETAPI', role='image', mime='image/png'
)
获取真实的图片文件。
res = ea.get_attachment_content('icpDE4orQxlI')
with open('1.png', 'wb') as f:
f.write(res)
用新的图片替换旧的。
res = ea.update_attachment_content('icWqV6zFtE0V', '/home/nate/data/1.png')
上传一个图片文件作为笔记的附件。
res = ea.create_attachment(
ownerId='8m8luXym5LxT',
file_path='/home/nate/data/ksnip_20230630-103509.png',
)
借助Python的强大功能,我已经扩展了ETAPI的基本用法。现在你可以对待办事项列表做一些事情了。
你可以使用 add_todo
来添加一个TODO项,参数是TODO的描述。
ea.add_todo("买暖宝宝")
参数是TODO项的索引。
ea.todo_check(0)
ea.todo_uncheck(1)
使用 update_todo
来更新某个索引处的TODO项描述。
ea.update_todo(0, "去码头整点薯条")
通过索引删除TODO项。
ea.delete_todo(1)
如标题所示,你可以将昨天未完成的事情移到今天。未完成的待办事项将从昨天的笔记中删除。
ea.move_yesterday_unfinished_todo_to_today()
现在你可以将带有图片的Markdown文件导入Trilium了!trilium-py将帮助你上传图片并为你修复链接!
res = ea.upload_md_file(
parentNoteId="root",
file="./md-demo/manjaro 修改caps lock.md",
)
你可以上传一个包含许多Markdown文件的文件夹到Trilium并保留文件夹结构!
比如,上传所有来自VNote的笔记,只需执行以下操作:
res = ea.upload_md_folder(
parentNoteId="root",
mdFolder="~/data/vnotebook/",
ignoreFolder=['vx_notebook', 'vx_recycle_bin', 'vx_images', '_v_images'],
)
Joplin可以轻松导入。
res = ea.upload_md_folder(
parentNoteId="root",
mdFolder="/home/nate/data/joplin_data/",
ignoreFolder=['_resources', ],
)
res = ea.upload_md_folder(
parentNoteId="root",
mdFolder="/home/nate/data/logseq_data/",
ignoreFolder=['assets', 'logseq'],
)
Obsidian有一个非常独特的文件链接系统。你应该使用obsidian-export将Obsidian vault转换为常规的Markdown文件。然后再使用trilium-py将笔记导入Trilium。
首先进行转换。
obsidian-export /path/to/your/vault /out
然后像导入普通markdown一样导入,trilium-py会为你处理图片。
res = ea.upload_md_folder(
parentNoteId="root",
mdFolder="E:/data/out",
)
有道云笔记不再提供导出功能。不过好在你可以使用https://github.com/DeppWang/youdaonote-pull下载你的笔记并将其转换为Markdown文件。之后,trilium-py应该能够帮助你导入它们。
res = ea.upload_md_folder(
parentNoteId="root",
mdFolder="/home/nate/gitRepo/youdaonote-pull/out/",
)
你需要首先将Turtl从json转换为markdown。 详见 turtl-to-markdown。
然后你可以像这样使用trilium-py导入:
res = ea.upload_md_folder(
parentNoteId="root",
mdFolder="/home/nate/gitRepo/turtl-to-markdown/out/",
ignoreFolder=['_resources'],
)
一般来说,markdown文件有各种标准。你可以尝试使用以下方法导入它们
res = ea.upload_md_folder(
parentNoteId="root",
mdFolder="/home/nate/data/your_markdown_files/",
)
如果有任何问题,请随时创建一个issue。
由于Trilium使用的库的限制,导入的笔记可能会遇到轻微的格式问题。这些问题包括代码块末尾出现额外的一行,图像与笔记内容融为一体,标题之间缺少换行符,导致笔记内容显得拥挤。
以下是你可以用来美化你的笔记的方法。
指定笔记ID以美化笔记内容。
ea.beautify_note('krm8B9JthNfi')
ea.beautify_sub_notes('tlPuzU2szLJh')
按照标题名称对笔记进行排序。这个功能对包含大量列表的笔记非常有价值,比如按各种流派排序的书名列表。它同样适用于管理浏览器书签或收集链接。
此外,你还可以为排序指定一个语言代码,以根据你的本地语言进行排序。这可以增强排序过程并使其适应你的语言偏好。
res = ea.sort_note_content('lPxtkknjR2bJ')
res = ea.sort_note_content('y6hROhWjNmHQ', 'zh_CN.UTF-8')
##(高级用法)🧹 删除空的“新笔记”
有时,我无意中创建了大量的“新笔记”,而这些笔记在我的笔记树中仍未被删除。这些“新笔记”使我的工作区杂乱不堪,散落在各个地方。我开发了这个批量删除空的“新笔记”的功能。此外,它会为包含内容的“新笔记”生成警告消息,也许我们应该为这些笔记更改标题。
ea.delete_empty_note()
尝试使用PIL的优化功能来减少图片大小。如果你笔记中的图片没有压缩过,可以试试这个方法。 在执行这个过程后,我成功地将一个44MB的笔记转换为9.9MB。尝试之前请备份数据。
默认质量设置为90。
optimize_image_attachments
会保留原始图像格式并尝试压缩它。
ea.optimize_image_attachments('uMJt0Ajr1CuC')
为了进一步节省空间,可以尝试以下方法。
optimize_image_attachments_to_webp
函数将图像转换为 WebP
格式,显著减少文件大小。根据我的经验,WebP
图像的大小可能只有 PNG
图像的25%到50%。
ea.optimize_image_attachments_to_webp('H2q3901uFDCH')
如果你有很多剪辑的页面,这个操作可以节省大量空间。发明 WebP
的人真是个天才。
使用pip egg link进行安装,以便在不重新安装的情况下进行包更改。
python -m pip install --user -e .
原始OpenAPI文档在这里。你可以使用swagger editor打开它。