今回はGAS(Google Apps Script)に関して書いていきます。
以前もGASに関する記事を書いています(以下リンク)。
上記の記事で、GASでNotionのデータを更新する処理について書いています。
データを更新するにあたってページIDを直接指定しているのですが、本来そういったケースは少ないのではないかなと。
更新する前にデータ検索して、ヒットしたデータに対して更新するケースの方が多いのではないかなと思っています。
ということで、今回の記事ではその辺りに関して書いていきます。
それでは本題へ。
やりたいこと
記事の冒頭でも触れましたが、GASでNotionの「データ検索」→「データ更新」の流れをやってみます。
以前の記事はページIDを直接指定した方法でしたが、もう少し実際にありそうなケースに寄せて試してみます。
今回は日記Notionに対して「データ検索」→「データ更新」してみます。
実際にありそうなケースとか言いつつ、結局はサンプルデータです。
ただ、ページIDを直接指定するケースよりは現実的かなと。
プログラム事前準備
GASでNotionのデータを操作するためには、事前準備が必要です。
事前準備の手順は別記事にて詳しく書いています。
以下あたりの記事を見てもらえればと思います。
プログラム
準備が整ったところで、プログラムです。
※事前準備が完了している前提です。
// 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に関しては記事も書いています。
こちらも良ければぜひ。
今回のフローチャートの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件を1件ずつループさせ、「ステータス」を”進行中”に更新しています。
「Notion API」の詳細
上記のプログラムから「Notion API」に関する処理をピックアップして具体的に説明します。
Query a database(検索)
Notionデータベースを検索する「Query a database」のリファレンスは以下です。
「Query a database」のレスポンスにページIDがあります。
それをNotion更新URLに渡します。
検索処理に関して、以下の記事でも詳しく書いています。
miya-moto-memo.hatenablog.com
Update page properties(ページプロパティ更新)
Notionデータベースのページプロパティを更新する「Update page properties」のリファレンスは以下です。
「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操作(登録/参照/更新/削除)