[PHPでnotion API] データベースに行を追加する

今回はデータベースへの行追加について触ってみました。公式ドキュメントではわかりにくかった場所なども含めてまとめておきます。

公式ドキュメントはこちら

アカウント作成について

アカウント作成方法については紹介されている記事がありますのでそちらをご覧ください。

上記を参考にアカウントを作成後、新しいintegrationsを作成して、トークン(Internal Integration Token)を取得しておいてください。

操作用のデータベースを作成する

既存のデータベースでも問題ありません。操作したいデータベースのページを開き右上のShareをクリックします。

画像1

「Invite」をクリックすると、先ほど作成した「integrations」の一覧ができますので、選択します。

画像2

これで、このintegrationsから、データベースをAPIで操作できるようになりました。

データベースの構造は、とりあえずデフォルトから触らなくていいです。

データベースのIDを取得する

データベースを外部から操作するには、どのデータベースを操作するかを特定する必要があります。それがデータベースIDになります。

データベースIDは、URLからわかります。操作するデータベースページを開きURLを見ると以下のような形になっていて、△△△△△△△△△△の部分になります。

https://www.notion.so/△△△△△△△△△△△?v=●●●●●●●●●●●●●●

PHPでプログラミング

では早速プログラミングをしていきましょう。公式ドキュメントではcURLで書かれていますので、それをPHPに書き換えるだけです。

まずはcURLを見ていきます。

curl -X POST https://api.notion.com/v1/pages \
 -H "Authorization: Bearer {MY_NOTION_TOKEN}" \
 -H "Content-Type: application/json" \
 -H "Notion-Version: 2021-05-13" \
 --data '{
   "parent": { "database_id": "{DATABASE_ID}" },
   "properties": {
     "Name": {
       "title": [
         {
           "text": {
             "content": "Yurts in Big Sur, California"
           }
         }
       ]
     }
   }
 }'

{MY_NOTION_TOKEN}のところに、自分のトークン
{DATABASE_ID}に操作するデーベースのID
を入れると、Name(タイトル)のところに「Yurts in Big Sur, California」となった行が新しく追加されます。cURLを実行できる環境があればやってみてください。macであれば、Terminalに上記のトークンとデータベースをIDを書き換えた状態で貼り付けて実行するだけで動きます。

では、上記と同じ動作をするPHPは

<?php

//Shareで招待しているintegrationsのトークン
define('SECRET_KEY', '{MY_NOTION_TOKEN}');

//操作したいデータベースのID
$target_db_id = "{DATABASE_ID}";

$post_data = [
   "parent"=> ["database_id"=>$target_db_id],
   "properties"=>[
       "Name"=>[
           "title"=>[
               [
                   "text"=>[
                       "content"=> "Yurts in Big Sur, California"
                   ]
               ]
           ]
       ],
   ]
];

//ヘッダー情報
$header = array(
   'Authorization: Bearer ' . SECRET_KEY,
   'Content-Type: application/json',
   'Notion-Version: 2021-05-13',
);


$url = 'https://api.notion.com/v1/pages';

$curl = curl_init($url);
//ヘッダー
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
//POST
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($post_data));//json形式に書き換える

//実行
$result = curl_exec($curl);

//結果を表示
print_r(json_decode($result,true));

上記うまく動作すると以下のようなレスポンスが返ってきます

Array
(
   [object] => page
   [id] => *********************
   [created_time] => 2021-05-31T16:07:01.931Z
   [last_edited_time] => 2021-05-31T16:07:01.931Z
   [parent] => Array
       (
           [type] => database_id
           [database_id] => *********************
       )

   [archived] => 
   [properties] => Array
       (
           [Name] => Array
               (
                   [id] => title
                   [type] => title
                   [title] => Array
                       (
                           [0] => Array
                               (
                                   [type] => text
                                   [text] => Array
                                       (
                                           [content] => Yurts in Big Sur, California
                                           [link] => 
                                       )

                                   [annotations] => Array
                                       (
                                           [bold] => 
                                           [italic] => 
                                           [strikethrough] => 
                                           [underline] => 
                                           [code] => 
                                           [color] => default
                                       )

                                   [plain_text] => Yurts in Big Sur, California
                                   [href] => 
                               )

                       )

               )

       )

)

失敗すると、こんな感じ。以下の失敗は、指定のデータベースIDにアクセスする許可がない場合。Share設定がちゃんとされているか確認してみましょう。

Array
(
   [object] => error
   [status] => 404
   [code] => object_not_found
   [message] => Could not find database with ID: **********
)

タイトルを挿入することはできました、次はさまざまなプロパティ(テキスト、セレクト、マルチセレクト、リンクなど)の場合、どのような形でリクエストすればいいのかみていきます。調べるのに時間が結構かかったので有料(100円)にさせてくださいm(_ _)m

有料で紹介している方法は、現時点では
Text、Number、Select、Multi-Select、Date、URL
になります。要望があれば調査&追加しますのでコメントください。

画像3

プロパティごとのリクエスト方法(有料)

全てカラム名(列の名前)はTagsとします。

ここから先は

1,255字

¥ 777

この記事が気に入ったらサポートをしてみませんか?