Blog

ブログ

Notion APIからDBアイテムを追加するときのプロパティごとの書き方

前田 大地

先日、Notion APIとGoogle Apps Scriptをつかって、定期タスクの自動登録をしようと思ったら、タスクの担当者欄(ユーザーを選択する項目)をどうやって指定すればいいのか分からず詰まりました。

公式のリファレンスを見てもノンプログラマーな私にはわかりにくく、他の人のブログ記事を見てもあまり詳しく書かれていません。

仕方なく他のプロパティもまとめて自分で調べたので、せっかくだから忘備録として掲載します。

検証用に使ったGAS

下記は、検証用に作った、Google Apps ScriptからNotion API経由でDBにアイテムを追加する関数です。これの「properties内をどうやって書けばいいか」が、この記事の本題です。

// Notion API TEST
function notion_api_test() {
  const notion_key = 'xxxxxxxxxxxx';
  const database_id = 'xxxxxxxxxxxx';
  const json_data = {
    'parent': {'database_id': database_id},
    'properties': {
      // ↓ここに今回紹介するプロパティをカンマで区切って記述していく
      'Name': {
        'title': [
          {
            'text': {
              'content': '新しいタスク',
            }
          }
        ]
      },
      "担当者":{
        "people":[
          {
            "id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
          }
        ]
      },
      "プロジェクト":{
        "relation":[
          {
            "id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
          }
        ]
      }
      // ↑ここまでプロパティ
    },
    'children': [
      // ↓こっちは本文ブロック
      {
        'object': 'block',
        'type': 'paragraph',
        'paragraph': {
          'text': [
            {
              'text': {
                'content': 'これはテストです'
              }
            }
          ]
        }
      }
      // ↑ここまで本文
    ]
  };
  UrlFetchApp.fetch( 'https://api.notion.com/v1/pages', {
    "method" : "post",
    "headers" : {
      'Content-Type' : 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + notion_key,
      'Notion-Version': '2021-05-13',
    },
    "payload" : JSON.stringify( json_data )
  });
}

上記コードをGoogle Apps Script上で試す場合は、「notion_key」と「database_id」2つの変数の「xxxxxxxxxxxx」部分を自分のものに置き換えて、propertiesの中身は下記「プロパティ別の指定方法」を見ながらあなたのDBに合わせて書き換えてください。事前に操作したいDBにIntegrationをシェアするのもお忘れなく。

実際に運用するなら、DBに追加する内容を自由に渡せるようにしたりして、もっとかっちょいい関数を作ったほうが便利だと思います。ちなみにセブンシックスでは、スプレッドシートの内容をもとに定期タスクが自動追加されるようなGASを使っています(すっごい調べて必死で作りました)。

DBアイテム新規追加時のプロパティ別指定方法

正規の情報はNotion公式をご覧ください。
https://developers.notion.com/reference/page

■ title – ページ名

DBアイテムの名称(ページ名に相当する部分)です。プロパティ名は「Name」で固定。中にRich text objectの配列が入りますが、まあタイトルなのでcontentだけ指定すればOK。

指定例
"Name":{
  "title":[
    {
      "text":{
        "content":"あたらしいアイテム"
      }
    }
  ]
}

■ text – テキスト

単一行のテキスト。Rich text objectの配列が入るので、細かく指定すれば太字にしたりリンクを貼ったりできるはず。

指定例
"好きな挨拶":{
  "rich_text":[
    {
      "text":{
        "content":"こんにちわ"
      }
    }
  ]
}

■ number – 数字

数字は、文字列ではなく数値なのでチョンチョンで囲わずに指定します。

指定例
"値段":{
  "number":1980
}

■ select – セレクト

単一の選択項目です。選択項目は、idかnameで指定しろとのこと。既存の選択項目を指定した場合、色の指定は無視されるっぽい。普通はデータベースがロックされていると新しい選択肢が追加できないけど、API経由で新しい選択項目名を指定したらちゃんと追加されました。

指定例
"性別":{
  "select":{
    "name":"男性",
    "color":"blue"
  }
}

■ multi_select – マルチセレクト

選択項目を複数選択できるやつ。単一のセレクトが配列になってる感じ。

指定例
"得意分野":{
  "multi_select":[
    {
      "name":"野菜"
    },
    {
      "name":"果物",
      "color":"yellow"
    }
  ]
}

■ date – 日付

日付は、開始日と終了日があって、それぞれISO8601形式で指定。終了日が不要な場合はnull。年月日だけでもOKで、「2020-12-08T12:00:00Z」みたいに時刻も指定できる。

指定例
"期日":{
  "date":{
    "start":"2020-12-08",
    "end":null
  }
}

■ people – メンバー選択

peopleプロパティには、user objectの配列が入ります。どうやらユーザーはidで指定しないといけないらしく、名前で指定してもダメでした。しかも肝心のユーザーidがどうやったら確認できるのか分からず、結局APIからユーザー情報を取得してそこに記載されているidを拾うという。。もっと手軽な調べ方ってないのだろうか・・・

指定例
"担当者":{
  "people":[
    {
      "id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
  ]
}

■ files – ファイル

ファイルは、アップロードしたときに付けられる参照名(ファイル名みたいなやつ)で指定します。

指定例
"プロフィール写真":{
  "files":[
    {
      "name":"my_face.jpg"
    }
  ]
}

■ checkbox – チェックボックス

チェックを付けるかどうかをtrue or falseで指定します。

指定例
"魚の仲間です":{
  "checkbox":true
}

■ url – URL

Webページのアドレスを文字列で指定します。

指定例
"ウェブサイト":{
  "url":"https://www.6666666.jp/"
}

■ email – Eメールアドレス

Eメールアドレスを文字列で指定します。

指定例
"メール連絡先":{
  "email":"mail@domain.test"
}

■ phone_number – 電話番号

電話番号を文字列で指定します。ハイフンありでもなしでも大丈夫。

指定例
"電話番号":{
  "phone_number":"090-0000-0000"
}

■ relation – リレーション

参照したいページのidを指定します。

指定例
"プロジェクト":{
  "relation":[
    {
      "id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
  ]
}

ページの中身(ブロック)の指定

DB固有の入力項目ではなくて、ページの本文にあたるブロック部分に内容を追加したい場合は、この記事の上のほうにあるGASのサンプルコードでいうところの「children」配下にブロックオブジェクトを配列で記述します。ちなみにサンプルでは、段落をひとつ追加しています。

ブロックオブジェクトの詳細はこちら
https://developers.notion.com/reference/block

調べてみた感想

これをまとめるにあたり、テスト用のDBに全種類のプロパティを追加してページを作り、それをAPIで取得してjson構造を確認したりしました。おかげで、最初はさっぱりだった公式リファレンスの内容も、なんとなく理解できるようになりました。やっぱり、自分で手を動かすと違いますね。

ところで、業務でタスクを自動登録する際、担当者を指定するケースって多いと思うんですよ。指定しないと、その人にNotionから通知がいかないですし。でも、ユーザーIDを調べるのがなんか大変。ユーザーに限らずNotionはidの値があまり表に出てこないので、もっと手軽に知る方法があったらいいのですが・・・謎です。

Web Designer / Developer

前田 大地

沼津高専中退。デザイン会社、システム開発会社を経てセブンシックスを設立。マーケティング、デザイン、テクノロジーに精通するオールラウンダーとして、県内の中小企業に向けた戦略型ホームページ制作を開始。一方で、都内の広告代理店からの要請で大企業案件にも多数参加。企業が本当に必要とするホームページ制作とは何か、を日々探求している。

Blog top