保羅的學習筆記 / 開發日常 / 利用 Notion API 自動更新欄位
2021.08.11 · 6 min read
開發日常

利用 Notion API 自動更新欄位

由於 Notion 有各式各樣的 template,以及十分強大資料庫功能,我自己習慣用它來管理 side project 狀況、筆記和各種事情。再加上最近上了 Notion 實戰課程:打造專屬數位工作術 ,學到了很多新的技巧,這次就結合學到技巧再加上 Notion API 來完成一些只有 Notion 本身做不到的事情。

因為自己本身有寫筆記的習慣,學到了一些新的知識、看了一些書、或者紀錄一些實戰的技巧時,我就會把這些知識記錄下來寫成筆記,甚至是分享到部落格中。我也運用課程中所學的,把筆記依照領域分門別類,並另用另一個資料庫來設定領域,把筆記和領域關聯起來。

筆記資料庫設計

以我自己的情況為例,我有一個筆記資料庫,在這資料庫中,每個筆記都會關聯到一個領域。在領域的資料庫中則是會統計該領域有多少筆記,還有該領域的筆記數量的百分比:領域筆記數量 / 總筆記數量,自己藉由筆記數量的百分比來了解自己的知識組成,也能看出自己在哪些領域相對比較有心得,下圖是我簡化過的範例。

在製作筆記數量百分比這個欄位時,我遇到了一個困難,那就是無法取得總筆記數量。雖然 Notion 有 Formula 可以根據多個欄位值來計算一些結果,但是 Formula 卻無法取得欄位總和數量。為了解決這個困擾,我想到利用腳本搭配 Notion API 來幫我更新這個欄位。

腳本呼叫 Notion API

在腳本撰寫的部分,我選用 python 來做,但其實這個部分使用 shell script、javascript、甚至是 C# 也都是可以的,只能是能呼叫 Notion API 的任何方式都可以。在開始寫腳本之前,我們需要到 Notion Integrations 建立一個 instance,並取得呼叫 API 需要使用到的 Token。

取得 Token 之後,就可以開始寫腳本來更新筆記數量百分比了,整個腳本可以分成三個部分。

  1. ,取得領域資料庫中的的關聯筆記數量與筆記 ID
    • 在這個步驟,我們可以利用 Notion API 的 Query a database 取得資料庫中的資料。在開始打 API 之前需要注意的是,領域資料庫筆記資料庫都需要 Invite 剛剛建立的 Notion Integration,讓這個 Integration 有權限可以存取,否則會呼叫 API 會發生錯誤。
      Article image
  2. 計算筆記數量百分比
    • 在這個步驟需要讀取每一筆資料中的筆記數量,藉此計算所有筆記數量。值得一提的是 Notion 中的 rollup 欄位並不會出現在 API 中,因為這個欄位實際上是 Client 端計算的。像是領域資料庫中的筆記數量欄位屬性就是 rollup,但是實際上呼叫 API 後,回傳的資料中卻沒有這個欄位。
  3. 更新領域資料庫中的筆記數量百分比
    • 在 Notion 中,資料庫的每一筆資料也是一個 page,所以我們可以使用 Update page properties 這個 API 來更新資料,透過第一個步驟中取得的筆記 ID 來更新相對應的筆記中的筆記數量百分比。Notion 目前似乎還不提供一次更新多個 page 的 API,所以在這個步驟中,我們只能一筆一筆資料更新。

另外,我自己使用 python requests 呼叫 Notion API,但是已經有其他人把 Notion API 操作包成一個 python module:notion-py 讓 Notion 操作更容易,有興趣的人也可以試試看。

用 Github Action 來定期更新

完成上面的步驟後我們會得到一個可以更新的腳本,手動執行就可以更新筆記數量百分比,但是如果每次新增筆記都要自己手動執行一次就變得有點麻煩,而且容易忘記。為了解決這個問題,我利用 GIthub Action 的定期觸發的功能來幫我每天更新。

Article image

不過值得注意的是,Github Action 的定期觸發功能並不保證時間一到就馬上觸發,可能會因為 Github 自己的資源狀況而有所延遲,如果想拿來做即時觸發的應用,可能需要三思。

小結

在上課之前,本身就有在使用 Notion,也有做一些知識管理的簡單系統,但是怎麼用好像都有點不方便。上課之後學到了許多 Notion 上面的技巧,也實際應用在自己的管理系統中,感覺好像比較順暢一點,目前也還在逐步地調整當中。但是只透過 Notion 本身提供的功能,有時候會達不到自己想要的目的,透過 Notion API,我們就能夠隨意讀取資料庫中的資料,用這些資料來完成很多原本做不到的事情。

相關資料

範例

讀完了?

如果這篇對你有幫助,可以分享給朋友,或追蹤後續更新。我在 Threads 也會貼一些零碎想法。

Paul Wu

Paul Wu

Driven by a love for figuring things out and creating seamless experiences.
Always curious, exploring — from fresh concepts to unexpected rabbit holes.

看更多 ↗