前回のあらすじ
Notionでテーブルやトークンなどを準備して、テーブルにあるデータを取ってくる検証を行いました。
今回やったこと
Notionで作ったテーブルに対してデータを追加/検索/更新/削除がひととおりできるようAPIを検証してみました。
以下の公式情報を参考にしています。
環境
・AWS Lambda(Node.js 14.X)
・Notionのテーブルイメージ
カラム構成はキー(key)・値(value)・タイムスタンプ(timestamp)です。
・各カラムのNotionにおけるタイプについて、キーはtitle、値はrich_text、タイムスタンプはnumberにしています。
書いたもの
準備
const { Client } = require("@notionhq/client");
const notionToken = "secret_Notionから発行したトークン";
const databaseId = 'ここにデータベースを指定するIDを書きます。';
const notion = new Client({
auth: notionToken,
});
追加
function addItem(keyItem, valueItem) {
//成功or失敗したときのメッセージとして用意しています。
let returnMessage = "";
try {
const response = notion.pages.create({
parent: { database_id: databaseId },
properties: {
key: {
title: [
{
text: {
// 引数
content: keyItem,
},
},
],
},
value: {
rich_text: [
{
text: {
// 引数
content: valueItem,
},
},
],
},
timestamp: {
// 現在時刻を取得
number: Date.now()
}
}
});
console.log(response);
returnMessage = `key:${keyItem}・value:${valueItem}をメモに追加しました。`;
} catch (error) {
console.error(error.body);
returnMessage = `追加処理に失敗しました。詳細:${error.body}`;
}
return returnMessage;
}
検索
function searchPage(searchItem){
const response = notion.search({
query: searchItem,
});
// 検索でヒットした結果の分だけ改行しながら文字列を作成しています。
// response.results[i].id の値はこの後の更新・削除で対象を特定するのに必要になります。
for (let i =0; i < response.results.length; i++) {
let count = i + 1;
let searchResult = "\n【" + count + "件目】\nid: "
+ response.results[i].id
+ "\nkey: "
+ response.results[i].properties.key.title[0].text.content
+ "\nvalue: "
+ response.results[i].properties.value.rich_text[0].text.content;
searchResults += searchResult;
}
return searchResults;
}
次の更新と削除では、変更対象を指定するために上記の検索で取得したIDが必要です。
更新
指定したIDに該当するデータのkeyを「target」に変更する例です。
function updateItem(item) {
try {
const response = notion.pages.update({
page_id: "上記の検索で取得したID",
properties: {
key: {
title: [
{
text: {
content: 'target',
},
},
],
},
},
});
console.log(response);
console.log("Success! Entry updated.");
} catch (error) {
console.error(error.body);
}
}
削除
指定したIDに該当するデータのセットを削除します。
データの削除そのもののAPIは存在せず、データをarchivedにすることで削除となります。
function deleteItem(item) {
try {
const response = notion.pages.update({
page_id: "上記の「検索」で取得したID",
archived : true,
});
console.log(response);
console.log("Success! Entry deleted.");
} catch (error) {
console.error(error.body);
}
}
次回予告
時間かかりそうですがそろそろ何か形にしたいです。