みやもとメモ

「Notion」「Google Apps Script」「ブログカスタマイズ」などについて書いていきます。

目次
目次

【GAS】Notionデータベースを検索して更新する(複数件)

この記事をシェアする

今回はGAS(Google Apps Script)に関して書いていきます。

以前もGASに関する記事を書いています(以下リンク)。

miya-moto-memo.hatenablog.com

上記の記事で、GASでNotionのデータを更新する処理について書いています。
データを更新するにあたってページIDを直接指定しているのですが、本来そういったケースは少ないのではないかなと。

更新する前にデータ検索して、ヒットしたデータに対して更新するケースの方が多いのではないかなと思っています。

ということで、今回の記事ではその辺りに関して書いていきます。

それでは本題へ。

やりたいこと

記事の冒頭でも触れましたが、GASでNotionの「データ検索」→「データ更新」の流れをやってみます。
以前の記事はページIDを直接指定した方法でしたが、もう少し実際にありそうなケースに寄せて試してみます。

今回は日記Notionに対して「データ検索」→「データ更新」してみます。

日記Notionに対して「データ検索」→「データ更新」

実際にありそうなケースとか言いつつ、結局はサンプルデータです。
ただ、ページIDを直接指定するケースよりは現実的かなと。

プログラム事前準備

GASでNotionのデータを操作するためには、事前準備が必要です。
事前準備の手順は別記事にて詳しく書いています。
以下あたりの記事を見てもらえればと思います。

miya-moto-memo.hatenablog.commiya-moto-memo.hatenablog.com

プログラム

準備が整ったところで、プログラムです。
※事前準備が完了している前提です。

// Notionインテグレーションキー
const NOTION_API_KEY = PropertiesService.getScriptProperties().getProperty('NOTION_API_KEY');
// 日記NotionのデータベースID
const DATABASE_ID = PropertiesService.getScriptProperties().getProperty('DATABASE_ID');

/**
 * メイン処理
 */
function main() {
  // Notion検索
  const result = queryNotion();
  for (const data of result.results) {
    // Notion更新
    updateNotion(data.id);
  }
}

/**
 * Notion検索
 */
function queryNotion() {
  // URL
  const url = 'https://api.notion.com/v1/databases/' + DATABASE_ID + '/query';
  // パラメータ
  const params = {
    'method': 'POST',
    'headers': headers,
    'payload': JSON.stringify(payloadForQuery),
  };
  // 実行
  return JSON.parse(UrlFetchApp.fetch(url, params));
}

/**
 * Notion更新
 */
function updateNotion(pageId) {
  // URL
  const url = 'https://api.notion.com/v1/pages/' + pageId;
  // パラメータ
  const params = {
    'method': 'PATCH',
    'headers': headers,
    'payload': JSON.stringify(payloadForUpdate),
  };
  // 実行
  UrlFetchApp.fetch(url, params);
}

/**
 * headers
 */
const headers = {
  'Notion-Version': '2022-06-28',
  'Authorization': 'Bearer ' + NOTION_API_KEY,
  'Content-Type': 'application/json'
};

/**
 * payload(検索用)
 */
const payloadForQuery = {
  'filter': {
    'property': 'タイトル',
    'title': {
      'contains': 'サンプル'
    }
  }
};

/**
 * payload(更新用)
 */
const payloadForUpdate = {
  'properties': {
    'ステータス': {
      'status': {
        'name': '進行中'
      }
    }
  }
};

スクリプトプロパティとして以下2つを登録しています。

プロパティ 説明
NOTION_API_KEY Notionインテグレーション
DATABASE_ID NotionデータベースID

フローチャート

プログラムを実行する前に、フローチャートも載せておきます(ざっくりですが)。

フローチャート

ちなみに上記のフローチャートはMermaidで書いています。
Mermaidに関しては記事も書いています。
こちらも良ければぜひ。

miya-moto-memo.hatenablog.com

今回のフローチャートのMermaidコードも載せておきます。

%%{init:{'theme':'forest'}}%%
flowchart TB
    A([開始]) --> B[[queryNotion\nNotion検索]]
    B --> C[/取得したNotionデータ\nループ開始\]
    C --> D[[updateNotion\nNotion更新]]
    D --> E[\取得したNotionデータ\nループ終了/]
    E --> F([終了])

プログラム実行

上記のプログラムを実行すると、Notionのデータが更新されます。

プログラム実行
データ検索して、ステータスを更新(3件)

「タイトル」に”サンプル”が含まれるデータを検索します(赤枠の3件)。
ヒットした3件を1件ずつループさせ、「ステータス」を”進行中”に更新しています。

「Notion API」の詳細

上記のプログラムから「Notion API」に関する処理をピックアップして具体的に説明します。

Query a database(検索)

Notionデータベースを検索する「Query a database」のリファレンスは以下です。

developers.notion.com

「Query a database」のレスポンスにページIDがあります。
それをNotion更新URLに渡します。

検索処理に関して、以下の記事でも詳しく書いています。
miya-moto-memo.hatenablog.com

Update page properties(ページプロパティ更新)

Notionデータベースのページプロパティを更新する「Update page properties」のリファレンスは以下です。

developers.notion.com

「Query a database」で取得したページIDをまとめて渡して一括で更新できたら良かったのですが、その方法はちょっと分からず。
取得したページIDを1件ずつ更新URLに渡して処理しています。

更新処理に関して、以下の記事でも詳しく書いています。
miya-moto-memo.hatenablog.com

おわりに

ということで、「【GAS】Notionデータベースを検索して更新する(複数件)」に関してアレコレ書いてみました。

実はNotion側の機能に一括更新の機能があります(以下リンク)。
dev.classmethod.jpkb.biz-notion.northsand.co.jp

なのでGASで処理するというよりは、Notionでフィルターして一括更新するシチュエーションの方が多いのかもしれません。
とりあえずGASでNotionのデータ更新を実装してみたいなということで、記事にしてみました。

この記事が参考になれば幸いです。

関連記事

GAS(Google Apps Script)に関してはいくつか記事にしています。
気になる記事があればぜひ。

GASの活用事例


GASでのNotionデータベースCRUD操作(登録/参照/更新/削除)

TOPへ戻る HOMEへ