LoginSignup
3
0

More than 1 year has passed since last update.

Notionで作成したテーブルに対して追加/検索/更新/削除を行う

Posted at

前回のあらすじ

Notionでテーブルやトークンなどを準備して、テーブルにあるデータを取ってくる検証を行いました。

今回やったこと

Notionで作ったテーブルに対してデータを追加/検索/更新/削除がひととおりできるようAPIを検証してみました。

以下の公式情報を参考にしています。

環境

・AWS Lambda(Node.js 14.X)
・Notionのテーブルイメージ
 カラム構成はキー(key)・値(value)・タイムスタンプ(timestamp)です。
・各カラムのNotionにおけるタイプについて、キーはtitle、値はrich_text、タイムスタンプはnumberにしています。

image.png

書いたもの

準備

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);
  }
}

次回予告

時間かかりそうですがそろそろ何か形にしたいです。

3
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
3
0