[Obs#105] Obsidian外掛 Local REST API 提供外部整合服務

安裝並啟用了Local REST API外掛後,當Obsidian啟動後同時會啟用提供Local REST API服務的伺服器,本機的應用程式就可以對它送出下列HTTP請求:

在這次的示範裡,我會先介紹設定步驟與當做本機應用程式的Chrome瀏覽器擴充Obsidian Web,最後再用AutoHotkey撰寫另一個應用程式,在不彈出Obsidian視窗的狀況下,將輸入的訊息直接寫入指定的筆記。

1. 設定準備

API Key與SSL金鑰都是在安裝時隨機產生。

01|700

  1. 到Local REST API外掛選項裡複製API Key到剪貼簿
  2. 點擊【download this certificate】鏈接或直接瀏覽 https://127.0.0.1:27124/obsidian-local-rest-api.crt 以取得外掛的自簽SSL憑證

2. 安裝SSL憑證

雙擊前一步驟下載的憑證檔 obsidian-local-rest-api.crt。

01|500

01|500

01|500

01|500

  • 按完成
  • 【您要安裝此憑證?】回答是
  • 匯入執行成功

3. API檢視

開啟API說明文件並瀏覽,以了解提供有那些API可以使用。

4. 命令行測試

Windows cmd.exe裡用cUrl測試;Linux或macOS將 ^ 改成 \

curl -X GET https://127.0.0.1:27124/vault/test.md ^
  -H "accept: text/markdown" ^
  -H "Authorization: Bearer 4c1f7a807f92a153944269bfd610571970a887b3952a9b2161b9cb98e9f8708a"

5. 網頁測試

01|700

01|700

01|700

01|700

6. Obsidian Web擴充選項

到Chrome線上應用程式商店安裝Obsidian Web並啟用

▼ 由網頁建立新的筆記
01|700

6.1. 模板能使用的變數

網頁模板變數 說明
{{page.url}} 網頁網址
{{page.title}} 網頁標題
{{page.content}} 網頁內容
{{page.selectedText}} 選取文字
輔助模板變數 說明
{{date}}、{{date "Format"}} 系統日期時間
{{filename FIELD}} FIELD是網頁模板變數
{{json FIELD}} 加上雙引號
{{quote FIELD}} 將指定變數開頭加上>
{{uuid}}

[!INFO] 模板引擎
Handlebars

6.2. Create new note

  • PUT /vault/{{filename page.title}}.md
  • Content:
---
page-title: {{json page.title}}
url: {{page.url}}
date: "{{date}}"
---
{{#if page.selectedText}}

{{quote page.selectedText}}
{{/if}}
  • 說明
    • {{json page.title}}: 網頁標題前後加上雙引號
    • 如果有選取文字,將選取文字開頭加上 >
    • 檔名可以用別的變數,例如/vault/{{uuid}}.md/vault/{{date "yyyyMMdd-HHmmss"}}.md

6.3. Patch a note

搜尋符號的標題,將內容加在標 題的開頭或結尾處。

  • PATCH /vault/檔名路徑.md
  • HTTP Headers:
Content-Insertion-Position: beginning
Heading: 標題
Heading-Boundary: ::
  • Content:
-  {{date}} [{{page.title}}]({{page.url}})

6.4. Append to current daily note

  • POST /periodic/daily/
  • Content:
## 2. {{page.title}}
URL: {{page.url}}
{{#if page.selectedText}}

{{quote page.selectedText}}
{{/if}}

6.5. Capture page snapshot

  • PUT /vault/{{filename page.title}}.md
  • Content:
---
page-title: {{json page.title}}
url: {{page.url}}
date: "{{date}}"
---
{{#if page.selectedText}}

{{quote page.selectedText}}

---

{{/if}}{{page.content}}

6.6. Append to existing note

  • POST (空值)
  • Content:
## {{date}}
{{#if page.selectedText}}

{{quote page.selectedText}}
{{/if}}

[!WARNING] 注意❗
實測皆會接收到404錯誤。只能自行變更網址為 POST /vault/{{filename page.title}}.md

7. AutoHotkey整合腳本

用AutoHotkey腳本在命令行直接產生訊息到指定的筆記。最簡單的方法是用Run執行cUrl.exe,下方腳本則是使用COM物件來調用。

/* 
;; fleet.ahk "message"
;; Windows cmd.exe 多行分隔號用 ^
curl -X "POST" ^
  "https://127.0.0.1:27124/vault/030-Inbox/fleet.md" ^
  -H "accept: */*" ^
  -H "Authorization: Bearer 4c1f7a807f92a153944269bfd610571970a887b3952a9b2161b9cb98e9f8708a" ^
  -H "Content-Type: text/markdown" ^
  -d "## This is my document something else here"
*/
#SingleInstance Force

MSG = %1%
if (MSG == "") {
  MsgBox Please add message.
  return
}
API_KEY := "4c1f7a807f92a153944269bfd610571970a887b3952a9b2161b9cb98e9f8708a"
URL := "https://127.0.0.1:27124/vault/030-Inbox/fleet.md"
;;TEXT := "# 測試筆記`n`nLocal REST API 測試`n" . "Time: " . A_HOUR . A_MIN . A_SEC
TEXT =
(
## %A_YYYY%:%A_MM%:%A_DD% %A_HOUR%:%A_MIN%:%A_SEC%

%MSG%

---

)

oHTTP := ComObjCreate("WinHttp.WinHttpRequest.5.1")
oHTTP.Open("POST", URL , False)
oHTTP.SetRequestHeader("Content-Type", "text/markdown")
oHTTP.SetRequestHeader("Authorization", "Bearer " . API_KEY) 
oHTTP.Send(TEXT)

sResponse := oHTTP.ResponseText
if (sResponse == "") {
  oHTTP.Open("GET", URL , False)
  oHTTP.SetRequestHeader("Content-Type", "text/markdown")
  oHTTP.SetRequestHeader("Authorization", "Bearer " . API_KEY)
  oHTTP.Send()
  sResponse := oHTTP.ResponseText
}

;; w=width, h=height, r=rows
Gui, Add, Edit, w400 h100 r10, % sResponse
Gui, Add, Edit, w400 h100 r10, % oHTTP.GetAllResponseHeaders
Gui, Show, AutoSize Center
return
 
GuiClose:
ExitApp

8. 相關鏈接

9. 教學影片

##

您可能也會有興趣的類似文章

您可能也會喜歡…

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *