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

はじめに

hkob の雑記録の第344回目は、Section-010 の DataSource の修正を行なっていきます。本記事は2025年ユカスタマスの10日目(2023年ユカスタマスの741日目)の記事になります。

P.54 Database object → DataSource object

データソースが導入されたため、前回読み込んだ page の親はデータベースではなくデータソースに変更されています。このため、P.54 は DataSource object に変更します。早速 page の親を取得しようとしたところ、以下のようにエラーになってしまいました。

ds = page.parent
/Users/hkob/.local/share/mise/installs/ruby/3.4.6/lib/ruby/gems/3.4.0/gems/notion_ruby_mapping-3.0.3/lib/notion_ruby_mapping/blocks/base.rb:289:in 'NotionRubyMapping::Base#parent': List does not have any parent (StandardError)

base.rb の該当部分を確認すると、確かに data_source_id に対応していませんでした。

    # @param [Boolean] dry_run true if dry_run
    def parent(dry_run: false)
      parent_json = @json && @json["parent"]
      raise StandardError, "Unknown parent" if parent_json.nil?

      type = parent_json["type"]
      klass = case type
              when "database_id"
                Database
              when "page_id"
                Page
              when "block_id"
                Block
              else
                raise StandardError, "List does not have any parent"
              end
      klass.find parent_json[type], dry_run: dry_run
    end

早速以下のように修正します。

    # @param [Boolean] dry_run true if dry_run
    def parent(dry_run: false)
      parent_json = @json && @json["parent"]
      raise StandardError, "Unknown parent" if parent_json.nil?

      type = parent_json["type"]
      klass = case type
              when "data_source_id"
                DataSource
              when "database_id"
                Database
              when "page_id"
                Page
              when "block_id"
                Block
              else
                raise StandardError, "List does not have any parent"
              end
      klass.find parent_json[type], dry_run: dry_run
    end

この修正を含めた NotionRubyMapping v3.0.4 をリリースしました。

rubygems.org

取得した JSON は以下のようになりました。

print JSON.pretty_generate(ds.json)
=> {
  "object": "data_source",
  "id": "2bcd8e4e-98ab-8127-a7e7-000b1ca841bd",
  (中略: "cover", "icon", "created_time", "created_by",
  "last_edited_by", "last_edited_time"までは Page と共通)
  "title": [
    {
      "type": "text",
      (中略)
      "plain_text": "サンプルデータベース",
    }
  ],
  "description": [],
  "is_inline": false,
  "properties": {
    "タグ": {
      "id": "mkN%5D",
      "name": "タグ",
      "type": "select",
      "select": {
        "options": [
          {
            "id": "eda78983-0fde-413c-a2cd-9386ceb29da1",
            "name": "タグ1",
            "color": "pink"
          },
          {
            "id": "f3d8b94c-2108-4d76-9c47-a6ada9315175",
            "name": "タグ2",
            "color": "green"
          }
        ]
      }
    },
    "名前": {
      "id": "title",
      "name": "名前",
      "type": "title",
      "title": {
      }
    }
  },
  "parent": {
    "type": "database_id",
    "database_id": "2bcd8e4e-98ab-813a-8b68-cfec895adc46"
  },
  "database_parent": {
    "type": "block_id",
    "block_id": "2bcd8e4e-98ab-8127-8c53-ed60b09d42c7"
  },
  (中略: "url", "public_url", "archived", "in_trash", "request_id" は Page と共通)
}=> nil

4行目のデータソースID については、データベースと取得方法が異なるので説明を以下のように丸ごと変更しました。

  • 4行目: ここにはデータソースの ID が格納されています。Notion でデータソースIDを取得するためには、データベースビューの「データソースを管理する」から該当するデータソースを選び「…」から「データソースIDをコピー」とします。クリップボードに格納されていたデータベース ID は以下のようになっており、4行目の値と一致していることが確認できます。

      2bcd8e4e-98ab-8127-a7e7-000b1ca841bd
    

    データソースIDをコピー

これ以外の部分はあまり変更がありませんが、parent がデータベースに変更になるので、その部分に以下の解説を追加しました。

  • 44-47行目: parent には親となる database_id が格納されています。コンテナに変更されてしまった Database についてはこの後で解説します。
  • 48-51行目: 以前はデータソースがなかったので、parent はデータベースが所属する上位ブロックまたはページが格納されていました。DataSource の親が Database になってしまったので、今までの parent に相当するものが、database_parent として格納されるようになったようです。

おわりに

今回、NotionRubyMapping のアップデートも実施してしまったので、データベースまで進められませんでした。明日は 10.4 として新規に Database object の節を起こします。

hkob.notion.site