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

はじめに

hkob の雑記録の第355回目は、プロパティ要素の Property item object と Property value object について改訂していきます。本記事は2025年ユカスタマスの21日目(2023年ユカスタマスの752日目)の記事になります。

P.88 Property item object, Property value object

Property item object と Property value object についてはあまり変更がありません。ただし、初版の時に記載していなかったプロパティを追加しました。

ボタンプロパティの追加

ボタン(button)は初版の時には存在していなかったプロパティです。Notion API でもサポートはなく、特に重要な属性は取得できません。取得すると空の "button" キーオブジェクトが取得できるだけです。

print JSON.pretty_generate(pps.slice "ボタン")
{
  "ボタン": {
    "id": "vtR_",
    "type": "button",
    "button": {}
  }
}=> nil

ID プロパティの追加

ID (unique_id) は以下のような構成になります。 "unique_id" キーオブジェクトには、 "prefix""number" のそれぞれのキー値が格納されます。

print JSON.pretty_generate(pps.slice "ID")
{
  "ID": {
    "id": "xl%7CF",
    "type": "unique_id",
    "unique_id": {
      "prefix": null,
      "number": 1
    }
  }
}=> nil

有効期限プロパティの追加

有効期限 (verification) は以下のような構成になります。 "state" キー値には、 "verified" または "unverified" のどちらかの値になります。 "verified" の場合には、 "verified_by" キー値にはページを検証したユーザの User object が入ります。また、検証開始日を "start" 、有効期限が "end" とした Data object が入ります。ただし、 "unverified" の場合には、 "verified_by""date" も null が入ります。

print JSON.pretty_generate(pps.slice "Verification")
{
  "Verification": {
    "id": "verification",
    "type": "verification",
    "verification": {
      "state": "verified",
      "verified_by": {User object},
      "date": {Date object}
    }
  }
}=> nil

場所プロパティの追加

場所 (place) は以下のような構成になります。場所が設定されている場合には、 "lat" キー値に緯度、 "lon" キー値に経度、 "name"

print JSON.pretty_generate(pps.slice "場所")
{
  "場所": {
    "id": "LoeU",
    "type": "place",
    "place": {
      "lat": 35.60663,
      "lon": 139.74877,
      "name": "東京都立産業技術高等専門学校 品川キャンパス",
      "address": "〒140-0011 東京都品川区東大井1丁目10-40 東京都立産業技術高等専門学校 品川キャンパス",
      "aws_place_id": "非常に長い文字列",
      "google_place_id": null
    }
  }
}=> nil

ファイル&メディアの更新

変更点で一番大きい部分は、P.94 のファイル&メディア(file) の部分です。以前はファイルアップロードができなかったので、 "external" キーオブジェクトのみしか指定できませんでした。現在は、File upload object を作成する後に、その id を持つ "file_upload" キーオブジェクトを指定することができるようになりました。ここではまだプロパティの紹介だけなので、以下のように説明を変更しました。

Property value object は File object の配列のみを持ちます。以前は、Notion に API からファイルをアップロードすることはできなかったので、設定できるのは "external" のみでした。現在では、File upload object を作成した上で、ファイルをアップロードすることができるようになりました。この場合、File object にはその id を "file_upload" キーオブジェクトとして指定します。この例では一つ目のファイルが "external" 、二つ目のファイルが "file_upload" になっています。

{
  "ファイル&メディア": {
    "files": [
      {
        "type": "external",
        "name": "説明文字列",
        "external": {
            "url": "外部リンク"
        }
      }, 
      {
        "type": "file_upload",
        "file_upload": {
            "id": "File upload object の id"
        }
      }
    ]
  }
}

タイトルプロパティの ID について

また、P.100 のタイトルのプロパティID が "title" で固定されていることは、アプリ生成時に非常に有効なので、改訂版で追加しました。

また、タイトルプロパティは常にプロパティID が "title" 固定になります。このため、ユーザがどんな名前をつけていたとしても、常に以下の Property value object でタイトルを設定・変更することができます。

{
  "title": {
    "title": [
      {
        "type": "text",
        "text": {
          "content": "テキスト"
        },
      }
    ]
  }
}

ステータスプロパティの追加

ステータス(status) は以下のような構成になります。現在のステータスが "status" キー値に格納されています。

print JSON.pretty_generate(pps.slice "ステータス")
{
  "ステータス": {
    "id": "m%5DPL",
    "type": "status",
    "status": {
      "id": "4f585691-804a-44c5-b6e6-b0e3f9097ca0",
      "name": "Not started",
      "color": "default"
    }
  }
}=> nil

Property value object は "name" キー値のみを持ちます。セレクトなどと異なり、存在しない "name" を設定しても追加することはできません。

{
  "status": {
    "name": "In progress"
  }
}

おわりに

今回は、Property item object, Property value object の変更点を解説しました。Filter object もほぼ変更はないのですが、Verification のフィルタが追加されているようなので、それを追加しようと思います。NotionRubyMapping に実装していないので、明日はそれを実装した上で今日の不足分も含めて修正していきます。

hkob.notion.site