プログラミング フロントエンド バックエンド

【Notion API × Javascript】@notionhq/clientを使うとテーブルデータを正しく取得できない

こんにちは!

今回は「Notion API でJSモジュール「@notionhq/client」を使うとテーブルデータを正しく取得できないときの対処法」についてお伝えしたいと思います。

事象としては、https://api.notion.com/v1/databases/{database_id}/query のエンドポイントに対して、POSTリクエストを送ると、エラーになりました。
また、sortfilter のオプションを設定しないで送った場合にはリスポンスの一部が欠損していました。

結論として、原因はわからず、axiosを使って取得することで解決しました。
@notionhq/client を使って解決する方法を期待してた方はすみませんm(__)m

対処法:axiosをインストールし、NotionAPIに対してPOSTリクエストを送信

npmでaxiosをインストール

node環境において、以下を実行します。

npm install axios

 

axiosを使ってPOSTリクエストの処理を作成

エンドポイントは https://api.notion.com/v1/databases/{database_id}/queryです。

実際に以下の具体例を用いて説明します。


const axios = require('axios');

const getNotionDatabaseData = async () => {
  const token = 'secret_xxxxxxxxxxxxxxxxxx';
  const databaseId = 'abc123abc123abc123';
  const response = await axios({
    method: 'post',
    url: 'https://api.notion.com/v1/databases/' + databaseId + '/query',
    headers: {
      'Authorization': `Bearer ${token}`,
      'Notion-Version': '2021-08-16', // 2022年7月時点 必要に応じて変更してください
      'Content-Type': 'application/json',
    },
    data: {
      filter: {
        and: [ // 配列でand条件を設定可能
          {
            property: "期日",
            date: { // notionの日付型
              equals: "2022-07-22", // 期日が2022-07-22のものを抽出
            }
          },
          {
            property: "ステータス",
            select: { // notionのセレクトボックス型(単数選択)
              equals: "未着手", // 未着手のものを抽出
            }
          },
        ]
      },
    }
  }).catch((error) => {
    //接続に失敗した場合の処理
    console.log('err', error);
  });
  // データ1件以上取得できた場合
  if (response && response.data) {
    for (const data of response.data.results) {
      // 取得したテーブルデータを使った処理を記述
      console.log('**********************');
      console.log(data);
      console.log('**********************');
    }
  }
};

getNotionDatabaseData(); // 関数実行

 

フィルター条件やソート条件の設定方法はNotionの公式APIドキュメントをご参照お願いします。

参考

Notion APIドキュメント https://developers.notion.com/reference/post-database-query

以上、お疲れさまでした〜🍵

 

-プログラミング, フロントエンド, バックエンド
-

© 2022 エンジニア×ライフハック Powered by AFFINGER5