こんにちは!
今回は「Notion API でJSモジュール「@notionhq/client」を使うとテーブルデータを正しく取得できないときの対処法」についてお伝えしたいと思います。
事象としては、https://api.notion.com/v1/databases/{database_id}/query
のエンドポイントに対して、POSTリクエストを送ると、エラーになりました。
また、sort
やfilter
のオプションを設定しないで送った場合にはリスポンスの一部が欠損していました。
結論として、原因はわからず、axiosを使って取得することで解決しました。
@notionhq/client
を使って解決する方法を期待してた方はすみませんm(__)m
Contents
対処法: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
以上、お疲れさまでした〜🍵