写入 Logseq
何时使用此技能
此技能在以下情况下自动触发:
- 用户想要在 Logseq 中创建新的页面或块
- 在图形中更新现有内容
- 在实体上设置或修改属性
- 给块添加标签/类
- 将对话笔记同步到 Logseq
- 用户提到“添加到 Logseq”、“创建页面”、“更新块”
写入操作:查看 {baseDir}/scripts/write-operations.py 了解 API。
可用操作
| 操作 | 描述 |
|---|---|
create_page(title, content) |
创建新页面 |
create_block(parent, content) |
在父级下添加块 |
update_block(uuid, content) |
修改块内容 |
delete_block(uuid) |
移除块 |
set_property(uuid, key, value) |
设置属性值 |
add_tag(uuid, tag) |
给块添加标签/类 |
append_to_page(title, content) |
给现有页面添加内容 |
快速示例
创建页面
from write_operations import LogseqWriter
writer = LogseqWriter()
# 创建简单页面
page = writer.create_page("会议笔记 2024-01-15")
# 创建带有初始内容的页面
page = writer.create_page(
"项目 Alpha",
content="项目概览和任务",
properties={"状态": "活跃", "优先级": "高"}
)
添加块
# 给页面添加块
block = writer.create_block(
parent="页面-uuid-或-标题",
content="新任务项"
)
# 添加嵌套块
child = writer.create_block(
parent=block["uuid"],
content="子任务细节"
)
更新内容
# 更新块内容
writer.update_block(
uuid="块-uuid",
content="更新后的内容在这里"
)
# 追加到现有页面
writer.append_to_page(
title="每日笔记",
content="- 通过 API 添加的新项"
)
设置属性
# 设置单个属性
writer.set_property(
uuid="块-uuid",
key="状态",
value="完成"
)
# 设置类型化属性
writer.set_property(
uuid="块-uuid",
key="评分",
value=5,
type="数字"
)
# 设置多个属性
writer.set_properties(
uuid="块-uuid",
properties={
"作者": "John Doe",
"评分": 5,
"发布": "2024-01-15"
}
)
添加标签
# 给块添加标签
writer.add_tag(uuid="块-uuid", tag="书籍")
# 添加多个标签
writer.add_tags(uuid="块-uuid", tags=["重要", "回顾"])
HTTP API 方法
创建页面
{
"method": "logseq.Editor.createPage",
"args": ["页面标题", {"属性": "值"}, {"createFirstBlock": true}]
}
插入块
{
"method": "logseq.Editor.insertBlock",
"args": ["父级-uuid", "块内容", {"sibling": false}]
}
更新块
{
"method": "logseq.Editor.updateBlock",
"args": ["块-uuid", "新内容"]
}
设置属性
{
"method": "logseq.Editor.upsertBlockProperty",
"args": ["块-uuid", "属性名", "值"]
}
删除块
{
"method": "logseq.Editor.removeBlock",
"args": ["块-uuid"]
}
安全指南
最佳实践
- 删除前验证 - 在移除前始终确认块存在
- 使用唯一标题 - 避免创建重复页面
- 验证属性 - 确保属性类型与模式匹配
- 处理错误 - 优雅地捕获和处理 API 故障
常见陷阱
- 重复页面:在创建前检查页面是否存在
- 无效 UUID:在操作前验证 UUID 格式
- 属性类型:数字属性需要数值
- 速率限制:不要频繁请求 API
内容格式化
Markdown 支持
# Logseq 支持块中的 markdown
writer.create_block(
parent=page_uuid,
content="""
## 节标题
- 项目点
- 另一个点
- 嵌套项
**粗体** 和 *斜体* 也可以。
[[链接到页面]] 和 #标签
"""
)
属性语法
# 可以在内容中设置属性
writer.create_block(
parent=page_uuid,
content="""
- 任务项
状态:: 进行中
优先级:: 高
截止:: [[2024-01-20]]
"""
)
# 或者通过 API(推荐用于类型化值)
writer.set_property(uuid, "评分", 5) # 数字
writer.set_property(uuid, "完成", True) # 复选框
将对话同步到 Logseq
保存笔记的模式
def sync_conversation_to_logseq(title, notes):
"""将对话笔记同步到 Logseq 页面。"""
writer = LogseqWriter()
# 创建或获取页面
page = writer.get_or_create_page(f"Claude Notes/{title}")
# 添加时间戳标题
from datetime import datetime
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M")
writer.append_to_page(
title=f"Claude Notes/{title}",
content=f"""
## {timestamp}
{notes}
---
"""
)
return page
错误处理
try:
page = writer.create_page("我的页面")
except writer.ConnectionError:
print("无法连接到 Logseq")
except writer.DuplicateError:
print("页面已存在")
except writer.ValidationError as e:
print(f"无效数据:{e}")
参考材料
- 查看
{baseDir}/references/write-operations.md了解所有操作 - 查看
{baseDir}/references/safety-guidelines.md了解安全实践 - 查看
{baseDir}/templates/page-template.md了解页面模板