iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
AI & Data

Notion遇上LLM:30天打造我的AI知識管理系統系列 第 7

【Day 7】Notion 自動化 Pipeline 設計:Database → Page → Block

  • 分享至 

  • xImage
  •  

Day 5 我們成功抓取了 Database rows,並清理成乾淨的 JSON。
Day 6 我們更進一步,把 Page 與 Block 的內容展開,將學習筆記真正的知識(文字、程式碼、清單…)結構化儲存。

但是 —— 我們的 Notion 裡一定會有多個 Database、每個 Database 裡有很多 Page,而每個 Page 又有好幾個 Block,手動呼叫 API 很快就會遇到瓶頸。

因此,今天我們要設計一個自動化 Pipeline,把「Database → Page → Block → JSON」的流程完整串起來。

1. 為什麼需要 Data Pipeline?

Pipeline 就像一條工廠輸送帶:原料經過一站一站加工,最後變成可用的產品。而在資料工程領域裡,Pipeline 代表一組自動化流程,用來收集、清理、轉換資料,並輸出到標準格式或資料庫。

在 Notion 知識管理情境下,Pipeline 可以解決:

  • 多資料來源
    • 一個 Database 是課程筆記,另一個是專案文件,還有一個是旅遊規劃。
    • 如果沒有 Pipeline,就得一個一個 API 去拉資料,非常麻煩。
  • 不同內容深度
    • Database row 通常只有簡單屬性(標題、標籤、狀態)。
    • 真正的知識往往藏在 Page 裡的 Block(例如學習心得、程式碼範例、清單)。
  • 重複性工作
    • 每次都要手動呼叫 API,還要自己檢查分頁、合併結果,容易出錯,也難以維護。
  • 資料同步問題
    • Notion 筆記會持續更新,如果沒有 Pipeline,我們只能靠手動重跑,無法保證資料一致性。

2. Pipeline 設計重點

在設計這個 Pipeline 時,需要考慮幾個關鍵要素:

  1. 多 Database 管理
    • 指定要處理的 Database ID 清單(未來可改為自動抓取 workspace 下的所有 Database)。
    • .env 或設定檔載入 API Token 與基本參數。
  2. 增量更新
    不需要每次都全量拉取,可以依 last_edited_time 判斷,避免重複處理。
  3. 資料階層處理
    • Database 層:呼叫 /databases/{id}/query → 取得所有 rows。
    • Page 層:針對每個 Page ID 呼叫 /blocks/{page_id}/children → 拉出內容。
    • Block 層:展開段落、程式碼、清單,遞迴處理子 Block。
  4. 資料清理
    • 把不同型別的 Block 解析成統一 JSON 格式。
    • 加上 metadata(page_id、database_id、timestamp)。
    • 每個 Page 輸出成結構化 JSON
      {
        "page_id": "xxx",
        "title": "Python Variables",
        "db_id": "yyy",
        "last_edited_time": "2025-09-20T12:34:56Z",
        "blocks": [
          {"type": "heading_2", "text": "Python Variables"},
          {"type": "paragraph", "text": "變數用來存資料..."},
          {"type": "code", "language": "python", "text": "x = 5"}
        ]
      }
      
  5. 輸出資料
    • 將清理後的資料寫入 data/clean/,以 JSON 格式存檔。
    • 未來可以拓展:存進 SQLite、ChromaDB,或直接丟進 RAG Pipeline。

3. Pipeline 架構圖

[Databases.yml] 
     │
     ▼
[Fetch Database rows] → [Fetch Page blocks] → [Parse blocks] 
     │                                         │
     └───────────────[組合與清理]───────────────┘
                          │
                          ▼
                    [輸出 JSON]
  • Databases.yml:集中管理 Database ID 與名稱。
  • Fetch Database rows:抓取 rows,拿到 Page ID。
  • Fetch Page blocks:針對 Page ID 抓取 Block。
  • Parse blocks:解析 paragraph、code、heading、to_do… → 統一格式。
  • 組合與清理:將 metadata 與 Block 合併。
  • 輸出 JSON:最終結果落地存檔,方便後續使用。

小結與下篇預告

今天,我們設計了一條 Notion 自動化 Pipeline,把「Database → Page → Block → JSON」的流程概念化,並考慮了增量更新與資料清理。

在 Day 8,我們將正式實作這條 Pipeline:

  • 自動讀取多個 Database
  • 批次抓取 PageBlock
  • 清理成標準 JSON,存檔輸出

上一篇
【Day 6】實作抓取 Notion Page / Block:以 Python Basic 筆記為例
系列文
Notion遇上LLM:30天打造我的AI知識管理系統7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言