概要
Notionのページを定期的に作成したり、更新したりするために使用する
NotionAPIの初期設定について紹介します
手順
トークンの発行
からAPIのトークン発行手続きを行います。
上記ページの「新しいインテグレーションを作成する」ボタンを押下
基本情報の名前に任意の名前を入力し、「関連ワークスペース」が導入を行いたいスペースになっていることを確認して、送信ボタンを押下
次の画面へ遷移すると、発行されたトークンを確認することができます。
このトークンが他人に漏れてしまうとAPIを利用してNotionに記述している内容を取得したり、
更新されてしまう可能性があるため流出しないように注意してください。
「インテグレーションの種類」は「内部インテグレーション」を選択したままでOKです。
(誰でも使えるAPIを作成する場合等に「パブリックインテグレーション」を選択するようです)
APIを使用したいページ(DB)にインテグレーションの招待
APIを使用したいページ(DB)に対して作成したインテグレーションの招待を行う必要があります。
使用したいページやデータベースなどの画面の右上の「共有」ボタンを押下→「招待」ボタンを押下
→作成したインテグレーションを選択して「招待」ボタンを押下
動作確認
動作確認として /pages (POST)のメソッドを使用します。
このメソッドはDBまたはページを親としてその配下にページを作るメソッドです。
curlで以下のリクエストを投げて、エラーが返ってこなければOK
secret_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
の部分は発行したトークン
"database_id": "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"
の部分はDBのページを開くと
URLが https://www.notion.so/{userName}/{databaseID}?v={viewID}
という形式になっているのでそこから取得します。
DBの子ページを作成
curl --location --request POST 'https://api.notion.com/v1/pages' \
--header 'Authorization: Bearer secret_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' \
--header 'Content-Type: application/json' \
--header 'Notion-Version: 2021-08-16' \
--data '
{
"parent": {
"database_id": "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"
},
"properties": {
"Name": {
"title": [
{
"type": "text",
"text": {
"content": "APIでページ作成テスト"
}
}
]
}
}
}'
properties.Name
は上図の例の列名がName
としているためproperties.Name
という名前にしています
名前
としている場合はproperties.名前
とします。
...
"properties": {
"名前": {
"title": [
{
...
トラブルシューティング
エラーメッセージ:
{"object":"error","status":404,"code":"object_not_found","message":"Could not find database with ID: XXXXXXXXXXXXXXXXXXXX."}
→ ページ(DB)に対してインテグレーションが追加されていることを確認してください。
他メモ等
リクエスト上限について
Rate-limited requests will return a "rate_limited" error code (HTTP response status 429). The rate limit for incoming requests is an average of 3 requests per second. Some bursts beyond the average rate are allowed.
からリクエストの頻度の上限として、平均3回/秒(おそらく瞬間的に1秒以内に3回以上リクエストが行われる分には制限がかからず、定常的に1秒間に3回以上のリクエストが行われると制限される)の制限があり、それを超えるとレスポンスとして429が返ってくる模様
回避するにはループ的にAPIを呼び出すようなことをするのであれば少しスリープを入れる等の対応が必要になりそう