Skip to content

自动化集成

自动化集成让你将 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 触发器

  1. 登录 IFTTT
  2. 创建新 Applet
  3. 选择触发器服务

示例:保存 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

  1. 触发器:Slack — New message in channel
  2. 过滤器:只处理包含 #note 标签的消息
  3. 操作 1:格式化内容
  4. 操作 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 接口,是自动化集成的关键桥梁。

安装

  1. 在 Obsidian 中安装「Local REST API」社区插件
  2. 启用插件并配置端口和 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 无法连接?

  1. 确保插件已启用
  2. 检查端口是否被占用
  3. 确认 API Key 正确
  4. 检查防火墙设置

IFTTT/Zapier 触发不及时?

这些平台的检查频率有限:

  • IFTTT 免费版:15 分钟一次
  • Zapier 免费版:5 分钟一次
  • 建议对实时性要求高的场景使用 n8n 自托管

自动化创建的笔记格式不对?

  1. 确保内容经过 URL 编码
  2. 检查换行符是否正确(使用 \n
  3. 避免特殊字符冲突

相关资源