Notion API 活用術 改訂作業(8) : hkob の雑記録 (343)

はじめに

hkob の雑記録の第343回目は、Section-010 の ブロック要素の分類から Page object までの修正を行なっていきます。本記事は2025年ユカスタマスの9日目(2023年ユカスタマスの740日目)の記事になります。

P.50 ブロック要素の分類

ブロック要素の分類では、以下のように「ブロック要素の関係」の図を大きく変更しました。この図は ELK layout でも崩壊しなかったので、このままにしています。初版との違いは、Database の下に DataSource を挿入したことです。2025年9月の更新により、データベースはデータソースを入れるコンテナとしての役割のみとなっています。特に一つのデータベースに複数のデータソースが含まれることを図で説明しています。

ブロック要素の関係

本文では、「データソース」のキーワードを追加して 4 つの要素としています。また、「データベースの中にたくさんの子供のページを持つことができます。」となっていた部分を「データベースの中に一つ以上のデータソースを持つことができます。さらにそのデータソースの中にたくさんの子供のページを持つことができます。」と変更しました。

Page object

ここでは、最初に取得した Page の URL を修正しています。初版の頃には末尾が page_id で終わっていたのですが、最近はリンクを取得すると ?source=copy_link が入るようになっています。

https://www.notion.so/hkob/2bcd8e4e98ab81e883b6ff10b6cd88e8?source=copy_link

最初の単体ページを取得したときの JSON は以下のようになりました。初版の時と異なるのは、in_trash, is_locked, public_url そして request_id が付与されていることです。

page = Page.find "コピーしたリンクをここに貼り付け"
=> NotionRubyMapping::Page-2bcd8e4e98ab81e883b6ff10b6cd88e8

print JSON.pretty_generate(page.json)
{
  "object": "page",
  "id": "2bcd8e4e-98ab-81e8-83b6-ff10b6cd88e8",
  "created_time": "2025-12-01T11:54:00.000Z",
  "last_edited_time": "2022-12-29T05:41:00.000Z",
  "created_by": {
    "object": "user",
    "id": "2200a911-6a96-44bb-bd38-6bfb1e01b9f6"
  },
  "last_edited_by": {
    "object": "user",
    "id": "2200a911-6a96-44bb-bd38-6bfb1e01b9f6"
  },
  "cover": null,
  "icon": {
    "type": "emoji",
    "emoji": "1️⃣"
  },
  "parent": {
    "type": "page_id",
    "page_id": "2bcd8e4e-98ab-810e-9ec0-e5316edb8aec"
  },
  "archived": false,
  "in_trash": false,
  "is_locked": false,
  "properties": {
    "title": {
      "id": "title",
      "type": "title",
      "title": [
        {
          "type": "text",
          "text": {
            "content": "単体ページサンプル",
            "link": null
          },
          "annotations": {
            "bold": false,
            "italic": false,
            "strikethrough": false,
            "underline": false,
            "code": false,
            "color": "default"
          },
          "plain_text": "単体ページサンプル",
          "href": null
        }
      ]
    }
  },
  "url": "https://www.notion.so/2bcd8e4e98ab81e883b6ff10b6cd88e8",
  "public_url": "https://hkob.notion.site/2bcd8e4e98ab81e883b6ff10b6cd88e8",
  "request_id": "d9193198-8f24-4a6f-b80e-d6ce5ca048b0"
}=> nil

初版では次にデータベースに所属するページを取得しています。前述したようにデータベースは単なるコンテナになったため、ここでは「データベース」ではなく「データソース」に変更しました。こちらも JSON はこのようになりました。

page = Page.find "コピーしたリンクをここに貼り付け"
=> NotionRubyMapping::Page-2bcd8e4e98ab81c5963cdbc38ea9d93f

print JSON.pretty_generate(page.json)
{
  (中略)
  "parent": {
    "type": "data_source_id",
    "data_source_id": "2bcd8e4e-98ab-8127-a7e7-000b1ca841bd",
    "database_id": "2bcd8e4e-98ab-813a-8b68-cfec895adc46"
  },
  (中略)
  "properties": {
    "タグ": {
      "id": "mkN%5D",
      "type": "select",
      "select": {
        "id": "eda78983-0fde-413c-a2cd-9386ceb29da1",
        "name": "タグ1",
        "color": "pink"
      }
    },
    "名前": {
      "id": "title",
      "type": "title",
      "title": [
        (中略)
      ]
    }
  },
  (中略)
}=> nil

これに対応して説明書きも以下のように変更しました。

「Parent object の "type""data_source_id"となっており、 "data_source_id"キー値に親となるデータソースの ID が格納されています。また、参考情報としてなのかデータソースの親であるデータベースの ID も database_id として格納されています。」

おわりに

とりあえず Page object まで修正しました。初版では次に Database object を説明していますが、今回取得した親を取得する流れとなっているので、DataSource object を先に説明します。内容はほぼ現在の Database object と同一になるはずです。そのあとで、DataSource object の親として Database object の節を追加することにします。

https://hkob.notion.site/hkob-16dd8e4e98ab807cbe3cf3cc94cdfe0f?pvs=4