自动化集成
自动化集成让你将 Obsidian 与日常使用的其他工具无缝连接,减少手动操作,构建高效的信息流。
自动化平台概览
| 平台 | 特点 | 适用场景 |
|---|---|---|
| IFTTT | 简单易用、免费版够用 | 个人轻量级自动化 |
| Zapier | 功能强大、应用丰富 | 专业工作流 |
| n8n | 开源、自托管 | 技术用户、隐私优先 |
| Apple 快捷指令 | iOS/Mac 原生 | Apple 生态用户 |
| Shell 脚本 | 完全自定义 | 开发者 |
| Obsidian URI | 无需中间件 | 轻量级触发 |
Obsidian URI 自动化
最简单的自动化方式——使用 Obsidian 的 URL Scheme:
基本语法
text
# 打开笔记
obsidian://open?vault=MyVault&file=path/to/note
# 创建新笔记
obsidian://new?vault=MyVault&name=NoteName&content=Hello&folder=Inbox
# 搜索
obsidian://search?vault=MyVault&query=keyword
# 打开搜索并替换
obsidian://search?vault=MyVault&query=keyword&replace=newword从命令行调用
bash
# macOS
open "obsidian://new?vault=MyVault&name=QuickNote&content=Hello"
# Linux (需要 xdg-open)
xdg-open "obsidian://new?vault=MyVault&name=QuickNote&content=Hello"
# Windows
start "obsidian://new?vault=MyVault&name=QuickNote&content=Hello"URL 编码
特殊字符需要 URL 编码:
bash
# 使用 python3 编码
encode_url() {
python3 -c "import urllib.parse; print(urllib.parse.quote('$1'))"
}
# 使用示例
content="Hello\nWorld"
encoded=$(encode_url "$content")
open "obsidian://new?vault=MyVault&name=Test&content=$encoded"IFTTT 集成
设置 IFTTT Applet
IFTTT 通过 Webhooks 触发,结合 Obsidian URI 实现自动化。
创建 Webhook 触发器
- 登录 IFTTT
- 创建新 Applet
- 选择触发器服务
示例:保存 Twitter 书签到 Obsidian
触发器:Twitter — New tweet liked by you
操作:Webhooks — Make a web request
json
{
"url": "https://your-server.com/obsidian-webhook",
"method": "POST",
"content_type": "json",
"body": {
"vault": "MyVault",
"name": "Tweet {{CreatedAt}}",
"content": "## Tweet\n\n**作者**: {{UserName}}\n**内容**: {{Text}}\n**链接**: {{Link}}\n**时间**: {{CreatedAt}}",
"folder": "Inbox/Twitter"
}
}示例:RSS 订阅自动保存
触发器:RSS Feed — New feed item
操作:Webhooks — Make a web request
json
{
"url": "https://your-server.com/obsidian-webhook",
"method": "POST",
"body": {
"vault": "MyVault",
"name": "{{EntryTitle}}",
"content": "# {{EntryTitle}}\n\n来源: {{EntryUrl}}\n发布时间: {{EntryPublished}}\n\n{{EntryContent}}",
"folder": "Inbox/RSS"
}
}示例:天气日报
触发器:Weather — Today's weather report
操作:Webhooks — Make a web request
将天气数据添加到每日日记中。
Zapier 集成
创建 Zap
Zapier 提供更多应用和更复杂的工作流。
示例:Gmail 到 Obsidian
触发器:Gmail — New email matching search
操作:Webhooks — Custom Request
json
{
"method": "POST",
"url": "https://your-server.com/obsidian-webhook",
"headers": {
"Content-Type": "application/json"
},
"payload": {
"vault": "MyVault",
"name": "Email - {{subject}}",
"content": "# {{subject}}\n\n**发件人**: {{from}}\n**日期**: {{date}}\n\n{{body_plain}}",
"folder": "Inbox/Email"
}
}示例:GitHub Issue 追踪
触发器:GitHub — New Issue
操作:创建 Obsidian 笔记追踪 Issue
json
{
"vault": "MyVault",
"name": "Issue #{{number}} - {{title}}",
"content": "# Issue #{{number}}\n\n**标题**: {{title}}\n**仓库**: {{repository_full_name}}\n**状态**: {{state}}\n**标签**: {{labels}}\n\n## 描述\n\n{{body}}\n\n## 链接\n\n{{html_url}}",
"folder": "Projects/GitHub"
}多步 Zap
- 触发器:Slack — New message in channel
- 过滤器:只处理包含
#note标签的消息 - 操作 1:格式化内容
- 操作 2:发送到 Obsidian
n8n 自托管自动化
n8n 是开源的自动化平台,适合隐私优先的用户。
安装 n8n
bash
# Docker 安装
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-v ~/.n8n:/home/node/.n8n \
n8nio/n8n
# npm 安装
npm install n8n -g
n8n start创建工作流
Obsidian Webhook 节点
在 n8n 中创建自定义节点处理 Obsidian 请求:
javascript
// n8n 自定义节点逻辑
async function createObsidianNote(vault, name, content, folder) {
const encodedName = encodeURIComponent(name);
const encodedContent = encodeURIComponent(content);
const uri = `obsidian://new?vault=${vault}&name=${encodedName}&content=${encodedContent}&folder=${folder}`;
// 通过本地命令执行
const { exec } = require("child_process");
return new Promise((resolve, reject) => {
exec(`open "${uri}"`, (error) => {
if (error) reject(error);
else resolve();
});
});
}示例工作流:每日新闻收集
json
{
"nodes": [
{
"name": "每日触发",
"type": "n8n-nodes-base.scheduleTrigger",
"parameters": {
"rule": "0 8 * * *"
}
},
{
"name": "获取 RSS",
"type": "n8n-nodes-base.rssFeedRead",
"parameters": {
"url": "https://news.example.com/feed"
}
},
{
"name": "格式化内容",
"type": "n8n-nodes-base.function",
"parameters": {
"functionCode": "return items.map(item => ({\n json: {\n title: item.json.title,\n content: `# ${item.json.title}\\n\\n${item.json.content}`,\n date: new Date().toISOString().split('T')[0]\n }\n}));"
}
},
{
"name": "创建笔记",
"type": "n8n-nodes-base.httpRequest",
"parameters": {
"url": "http://localhost:3000/obsidian",
"method": "POST"
}
}
]
}Obsidian Local REST API
Obsidian Local REST API 插件提供 HTTP API 接口,是自动化集成的关键桥梁。
安装
- 在 Obsidian 中安装「Local REST API」社区插件
- 启用插件并配置端口和 API Key
API 接口
bash
# 获取笔记内容
curl -X GET "http://localhost:27124/vault/MyVault/notes/mynote" \
-H "Authorization: Bearer YOUR_API_KEY"
# 创建/更新笔记
curl -X PUT "http://localhost:27124/vault/MyVault/notes/newnote" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: text/markdown" \
-d "# New Note\n\nHello World"
# 追加内容
curl -X POST "http://localhost:27124/vault/MyVault/notes/mynote/append" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: text/markdown" \
-d "\n## 新增章节\n\n追加的内容"
# 搜索
curl -X GET "http://localhost:27124/vault/MyVault/search?query=keyword" \
-H "Authorization: Bearer YOUR_API_KEY"
# 删除笔记
curl -X DELETE "http://localhost:27124/vault/MyVault/notes/mynote" \
-H "Authorization: Bearer YOUR_API_KEY"Python 集成脚本
python
#!/usr/bin/env python3
"""Obsidian Local REST API 客户端"""
import requests
import os
class ObsidianClient:
def __init__(self, host="localhost", port=27124, api_key=None):
self.base_url = f"http://{host}:{port}"
self.api_key = api_key or os.getenv("OBSIDIAN_API_KEY")
self.headers = {"Authorization": f"Bearer {self.api_key}"}
def get_note(self, vault: str, path: str) -> str:
"""获取笔记内容"""
url = f"{self.base_url}/vault/{vault}/notes/{path}"
response = requests.get(url, headers=self.headers)
response.raise_for_status()
return response.text
def create_note(self, vault: str, path: str, content: str) -> dict:
"""创建笔记"""
url = f"{self.base_url}/vault/{vault}/notes/{path}"
headers = {**self.headers, "Content-Type": "text/markdown"}
response = requests.put(url, headers=headers, data=content.encode("utf-8"))
response.raise_for_status()
return response.json()
def append_note(self, vault: str, path: str, content: str) -> dict:
"""追加内容到笔记"""
url = f"{self.base_url}/vault/{vault}/notes/{path}/append"
headers = {**self.headers, "Content-Type": "text/markdown"}
response = requests.post(url, headers=headers, data=content.encode("utf-8"))
response.raise_for_status()
return response.json()
def search(self, vault: str, query: str) -> list:
"""搜索笔记"""
url = f"{self.base_url}/vault/{vault}/search?query={query}"
response = requests.get(url, headers=self.headers)
response.raise_for_status()
return response.json()
# 使用示例
if __name__ == "__main__":
client = ObsidianClient()
# 创建笔记
client.create_note("MyVault", "Inbox/test", "# Test Note\n\nHello from Python!")
# 追加内容
client.append_note("MyVault", "Daily/2024-01-15", "\n## 自动记录\n\n由脚本追加")Shell 脚本自动化
Git 备份脚本
bash
#!/bin/bash
# obsidian-backup.sh — 自动备份 Obsidian 仓库
VAULT_DIR="$HOME/Obsidian/MyVault"
BACKUP_DIR="$HOME/Backups/Obsidian"
LOG_FILE="$BACKUP_DIR/backup.log"
cd "$VAULT_DIR" || exit 1
# 拉取远程更改
git pull --rebase origin main 2>&1 | tee -a "$LOG_FILE"
# 添加所有更改
git add -A
# 提交
TIMESTAMP=$(date +"%Y-%m-%d %H:%M:%S")
git commit -m "Auto backup: $TIMESTAMP" 2>&1 | tee -a "$LOG_FILE"
# 推送
git push origin main 2>&1 | tee -a "$LOG_FILE"
echo "[$TIMESTAMP] Backup completed" >> "$LOG_FILE"每日日记创建脚本
bash
#!/bin/bash
# create-daily.sh — 创建每日日记
VAULT="MyVault"
TODAY=$(date +"%Y-%m-%d")
YESTERDAY=$(date -v-1d +"%Y-%m-%d" 2>/dev/null || date -d "yesterday" +"%Y-%m-%d")
TEMPLATE="---\ndate: $TODAY\ntags: [daily]\n---\n\n# $TODAY\n\n## 今日计划\n\n- [ ] \n\n## 昨日回顾\n\n![[Daily/$YESTERDAY#今日计划]]\n\n## 笔记\n\n\n## 感恩\n\n- "
ENCODED_CONTENT=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$TEMPLATE'))")
open "obsidian://new?vault=$VAULT&name=$TODAY&content=$ENCODED_CONTENT&folder=Daily&overwrite=true"定时执行
bash
# 使用 crontab 定时执行
crontab -e
# 每天 8:00 创建日记
0 8 * * * /path/to/create-daily.sh
# 每小时备份
0 * * * * /path/to/obsidian-backup.sh常见问题
Local REST API 无法连接?
- 确保插件已启用
- 检查端口是否被占用
- 确认 API Key 正确
- 检查防火墙设置
IFTTT/Zapier 触发不及时?
这些平台的检查频率有限:
- IFTTT 免费版:15 分钟一次
- Zapier 免费版:5 分钟一次
- 建议对实时性要求高的场景使用 n8n 自托管
自动化创建的笔记格式不对?
- 确保内容经过 URL 编码
- 检查换行符是否正确(使用
\n) - 避免特殊字符冲突
相关资源
- URI 深度链接 — URL Scheme 完整参考
- Apple 生态集成 — iOS/Mac 自动化
- Shell 命令 — Shell 命令插件
- 命令行工具 — CLI 操作 Obsidian
- QuickAdd 插件 — 插件内自动化