0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Notion DBをJavaScritクライアントからAPIで更新してみる

Last updated at Posted at 2023-06-09

NotionのDBをAPIから触って更新してみます。
JavaScriptクライアントを使うサンプルがあまりなかったのでメモ的に残しておきます。

公式ドキュメントだとクライアントのリクエストサンプルしかない模様...?

調査不足かもですが、公式にはJavaScriptクライアントでの更新の実装例がなさそうでした。

参考: https://developers.notion.com/reference/update-a-database
参考: https://developers.notion.com/reference/post-database-query

こちらのTwilioのブログにて、以下のような指定を発見。

const response = await notion.pages.update({
                    page_id: pageId,
                    properties: {
                        'Status': {
                            checkbox: status,
                        },
                        'Date': { 
                            type: 'date',
                            date: {
                                "start": inputDate
                            }
                        },
                    },
                    });

特定の値を更新する処理

ブログのコードを参考に以下でいけました。

  • name(テキスト): n0bisuke
  • score(数値): 80

みたいなDBがあったとして、n0bisukeさんを検索してスコアの更新をしてみます。

'use strict';

const { Client } = require("@notionhq/client")
const DB_ID = 'xxxxxxxxxxxxxxxxxxxxx'; //自身の利用するデータベースID
const API_KEY = 'zzzzzzzzzzzzzzzzzzzz'; //NotionのAPIキー

// Initializing a client
const main = async () => {
    const notion = new Client({
        auth: API_KEY,
    })
    
    //1. ユーザーn0bisukeをnameプロパティから検索
    const response = await notion.databases.query({
        database_id: DB_ID,
        filter: {
            "and": [
                {
                  "property": "name",
                  "rich_text": {
                    "equals": 'n0bisuke'
                  }
                }
            ]
        }
    })
    
    const userInfo = response.results[0].properties; //n0bisukeさんの情報が入っている
    const userRecordId = response.results[0].id; //n0bisukeさんの情報があるレコードのID
    let userScore = userInfo['score'].number || 0; //スコアの値がなかったら0で
    userScore++; //1点追加
    
    
    //2. レコードのIDを指定して更新
    const response2 = await notion.pages.update({
        page_id: userRecordId,
        properties: {
            'age': { 
                type: 'number',
                number: userScore //追加された点数でDB更新
            },
        },
    });
    
    console.log(response2);    
}

main();

所感

page_idを指定することでいけましたが、ここがrecord_idではなくpage_idという部分がNotionの仕様を感じますね。
あとテキスト型の場合はtextでは動かずrich_textという指定にしないといけないのは少し罠っぽいです。

APIのそもそもの使い方という面だとスプレッドシートを使う場合はGoogleの認証がすごく面倒な印象ですが、APIキーとDBのIDで使えるのでGoogleとNotionを比較するとAPI利用は楽な印象です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?