5/13からパブリックベータが開始された Notion API と、最近勉強を始めたGASを組み合わせて、スプレッドシートの内容をNotionにコピーしてみました。
なお、Notion API の使い方は前回の投稿で紹介しています。
Notion の テーブル構成
非常にシンプルに、日付型の列を1つと、リッチテキスト型の列を1つテーブルに追加しました。
この場合、アイテム作成APIを実行するときのBodyは
{ "parent": { "database_id": "DATABASE_ID" }, "properties": { "Name": { "title": [ { "text": { "content": "Yurts in Big Sur, California" } } ] }, "Description": { "rich_text": [ { "text": { "content": "A dark green leafy vegetable" } } ] }, "Date": { "type": "date", "date": { "start": "2021-01-01", "end": null } } } }
となります。
GAS のスクリプト
GAS では 以下の処理を行っています。
- スプレッドシートの内容を取得
- JSON配列化
- Notionのアイテム作成APIのボディに合わせる
- API実行
この中で、3,4の処理は複数アイテムに対して行うのでループ処理しています。
また、Notion API のレートリミットが 3 request/sec ということで、Utilities.sleep()
で遅延処理を入れています。
const NOTIONTOKEN = ここにNotionのシークレット; const DATABASEID = ここにデータベースID; function myFunction() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const js = convertJson(ss.getDataRange().getValues()); js.forEach(function (elem, index) { //スプレッドシートの内容のJSON配列から、Notionのボディにマップ const obj = { "parent": { "database_id": DATABASEID }, "properties": { "Name": { "title": [ { "text": { "content": elem.Name } } ] }, "Description": { "rich_text": [ { "text": { "content": elem.Description } } ] }, "Date": { "type": "date", "date": { "start": Utilities.formatDate(elem.Date, "JST", "yyyy-MM-dd"), "end": null } } } }; postNotion(obj); Utilities.sleep(1000); }); } //Notionに対してアイテムを登録 function postNotion(object){ const options = { method: 'post', headers: { 'Content-Type': 'application/json', 'Notion-Version':'2021-05-13', 'Authorization':"Bearer "+NOTIONTOKEN }, payload: JSON.stringify(object) }; console.log(options) var response = UrlFetchApp.fetch('https://api.notion.com/v1/pages', options); } //スプレッドシートの内容の配列からJSON配列に加工する function convertJson(range) { const key = range[0]; const js = range.slice(1).map( function (row) { const obj = {}; row.map(function (item, index) { obj[String(key[index])] = item; } ); return obj; }); return js; }
ということで大変シンプルな感じでできました。 (スクリプト部分は最適ではないと思いますが)
動作は以下からご確認いただけます。
よしできた。
— Hiro (@mofumofu_dance) May 14, 2021
スプレッドシートの内容をGASでNotionのテーブルにコピー pic.twitter.com/hZJPP5NZnb
おわり
新しく使えるようになったAPI と 勉強中の内容を組み合わせてみました。
Notion の APIが公開されたことで、Google系のサービスからもデータを引っ張ってきやすくなりますね。
GAS便利ですわ。