• AI 是什麼?
    • Deep Learning
    • Machine Learning
    • Reinforcement Learning
  • Android
    • Android 開機流程
    • OTA 升級
    • Partition
  • 筆記雜學
    • Notion 你的第二大腦
    • Life Operating System
    • 人生資料庫
  • 旅行足跡
    • 日本交換
    • 單車環島
    • 新竹一日遊s
  • 生活隨筆
    • 日更30 – 小金魚的人生實驗室
    • 未來規劃
    • 閱讀分享
Robin Kuo
程式學習|筆記雜學|旅行足跡
Notion 你的第二大腦筆記雜學

【Notion API-1】,用 Python 自由操作 Notion

by Robin Kuo 2022-01-22

內容目錄

Toggle
  • 前言
  • 前置作業
  • 1. 申請 Notion API 機器人
  • 2. 透過 Python 取得 Notion Database 資料
  • 3. POST 獲取 Database 的原理

前言

前陣子想把電腦中一些資料轉移到 Notion 上,純手動太花時間了,就下定決心花點時間研究 Notion API,結果查來查去中文的網站上查不到容易體驗的文章,只好自己研究,就在不斷的試錯浪費不少時間…

以下透過一段簡短的範例,希望使用 Python 處理 Notion 資料自動化有興趣的人,也可以少走彎路

看完這篇文章你會學會:

  1. 申請 Notion API 機器人
  2. 透過 Python 取得 Notion Database 資料
  3. 了解獲取 Database 的原理

前置作業

本篇內容是基於 requests 這個模組,可透過以下指令來安裝:pip install requests

1. 申請 Notion API 機器人

  1. 申請一個 API 機器人: https://www.notion.com/my-integrations
    記下這個機器人的身份碼:Internal Integration Token (本文後續簡稱 token)

2. Notion 上創建一個 Database,並給予機器人權限

為了方便後續講解,我們創建的 Database 長這樣:


2. 透過 Python 取得 Notion Database 資料

在開始前先說明一下運作原理,requests 會把包好的訊息傳送給 Notion API
Notion API 則會根據 requests 中的訊息把資料回傳

  • requests 中包哪些資訊呢?
    • URL:由於透過 Notion API 抓取資料,只要給 Notion API 我們要抓取的 Database ID 即可
    • header:用於驗證我們的身份,Notion API 只回應有權限的人

機器人的身份碼 Internal Integration Token 和 database ID 嵌入方式如下:

token = "secret_wiVVieccxLNPtXXXGwHBog1CfVr0ZErg3cgUL4wKgNU" 
database_id = "a8aec43384f447ed84390e8e42c2e089"

r = requests.get(
    url="https://api.notion.com/v1/databases/{}".format(database_id) ,
    headers={"Authorization": "Bearer " + token, "Notion-Version": "2021-05-13"},
)
print(r.text)
r.text 回傳的字串

順利得到一串起來很傷眼的字串,而且找來找去,看起來比較眼熟的是「交通 🚥 」
也沒有看到「飛機」或「汽車」?我們到底撈回什麼資料?

這串訊息是 Json 格式,可以搜尋 Json轉換工具,整理成較適合閱讀的格式

使用 Json 格式整理後的 r.text
  • 把比較瑣碎的資訊剔除,得到:
    • object — 回傳的資料種類
    • id — 此 object 的 id
    • title — 此 database 的標題文字
    • properties — 此 database 的標籤
    • parent — 此 object 的父 object
      舉例來說:「汽車」「飛機」的父 object 是「交通 🚥」這個 database
    • url — 所在的網頁網址

依據上述資訊,我們可以把現有 r.text 與 Notion 上的頁面做個連結……
不對啊,Database 中的資料「汽車」和「飛機」呢?

r.text 與 Notion頁面對照圖

讓我們把目光放回剛剛的 requests,我們給予 API 的網址是:

https://api.notion.com/v1/databases/{database_id}

所以 Notion 回傳的其實是「交通 🚥 」這個 database 的屬性,並沒有涵蓋到 database 內部的資料

想要抓取 database 內部的資料,request 要在做一些小變動:

  1. requests.post
  2. url 中新增 /query
token = "secret_wiVVieccxLNPtXXXGwHBog1CfVr0ZErg3cgUL4wKgNU" 
database_id = "a8aec43384f447ed84390e8e42c2e089"

r = requests.post(
    url="https://api.notion.com/v1/databases/{}/query".format(database_id) ,
    headers={"Authorization": "Bearer " + token, "Notion-Version": "2021-05-13"},
)
print(r.text)

Database 中的「飛機」、「汽車」終於出現了!

回傳結果為 page 的 list,正如大家所知,Database 中每一「橫列」代表一個 page

為了凸顯 object,有刪掉部分回傳資訊

3. POST 獲取 Database 的原理

POST、GET 都是 HTTP Verbs,可以理解為我們向網頁執行的動作,想了解更多的話可以參考這裡:

  • GET=抓取
  • POST=新增
  • PATCH=更新

這是因為使用 /query 類似於 Notion 上使用 Filter 或 Sort 對 database 其中的資料並沒有改動
只是將符合條件的 pages 回傳

Notion 上 Filter, Sort 示意圖

因此實際上我們是對 Notion「新增」一串搜索的指令,API 回傳的則是依此搜索的 results

Notion APIPython
0 comment
0
FacebookTwitterPinterestEmail
previous post
蜻蜓國的初衷
next post
【NotionAPI-2】Python 新增、修改、刪除 Notion Database (Page)

You may also like

技術範本專案: ...

2023-12-31

【網路其實不只是...

2023-12-28

【防彈筆記閱讀心...

2023-11-28

【NotionA...

2022-01-23

Leave a Comment Cancel Reply

Save my name, email, and website in this browser for the next time I comment.

關於 Robin Kuo

▍分享關於:閱讀、AI、筆記、生活中的小趣事
尋覓生活價值的逐夢者
雖然目前是個載浮載沉的一般上班族…
▍莫忘初衷,紀錄生活、分享為樂

近期文章

  • 【腦海中的那張圖片🖼️】

    2024-01-03
  • 技術範本專案: OSH 框架

    2023-12-31
  • 【網路其實不只是網頁? Ted Nelson在網路上的超文本】

    2023-12-28
  • 【Pika 是否能讓啾吉動起來?】

    2023-12-22
  • 【日更30達成!】#Day30

    2023-12-09

分類

  • AI 是什麼?
  • Android
  • Deep Learning
  • NLP
  • Notion 你的第二大腦
  • OTA 升級
  • 單車環島
  • 旅行足跡
  • 日更30 – 小金魚的人生實驗室
  • 未來規劃
  • 生活隨筆
  • 筆記雜學
  • 閱讀分享
Robin Kuo
  • AI 是什麼?
    • Deep Learning
    • Machine Learning
    • Reinforcement Learning
  • Android
    • Android 開機流程
    • OTA 升級
    • Partition
  • 筆記雜學
    • Notion 你的第二大腦
    • Life Operating System
    • 人生資料庫
  • 旅行足跡
    • 日本交換
    • 單車環島
    • 新竹一日遊s
  • 生活隨筆
    • 日更30 – 小金魚的人生實驗室
    • 未來規劃
    • 閱讀分享