ゴール
スプレッドシートで作成した一覧(機能一覧やタスク一覧など)をnotionへ連携する
前提
・Googleアカウントを作成している
・スプレッドシートを作成している
・notionにデータベースを作成している
・スプレッドシートとnotionは列定義を揃えておいた方が扱いやすいと思います
1.実装
Notion側での作業
作業1.APIキーを取得する
1.左上の歯車マークの「設定」をクリック
2.ダイアログ左下の「コネクト」をクリック
3.下部の「インテグレーションを作成または管理する」をクリック
4.新しいインテグレーションをクリックし、必要項目を入力
*注: ワークスペースのオーナーのみ作成可能です。
*注: この時につけた名前がレコードの作成者になります。
5.作成したインテーグレーションをクリックするとシークレットというタブにAPIキーが取得できます。
6.どこかにメモしておきましょう。
作業2.データベースのURLを取得する
1.Notionのデータベースの横に3点リーダーがあるのでクリック。
2.リンクをコピーをクリックしどこかにメモしておきましょう。
作業3.データベースにコネクトを追加
1.連携先になるデータベースをクリック。
2.右上の3点リーダーをクリック。
3.接続先を追加から作業1で選択した接続先を選択し追加します。
これしないと、APIからデータベースにアクセスできずエラーになりますので注意
スプレッドシート側での作業
作業1.GASプロジェクトを作成する
1.スプレッドシート上部の「拡張機能」をクリック
2.「Apps Script」をクリック
3.別タブで開くコードエディタを確認
4.コード.gsというファイルがある(はずな)ので、下記のプログラムを記載します。
作業2.GASでプログラムを作成する
1.下記にGASプログラムのサンプルを記載しているので貼り付け
2.APIキーとデータベースのURLを上記のNotion側の作業で取得したものへ変更
APIキーやURLはベタ書きでなく環境変数を使うのがよいですが、
ひとまず、使わない手順としています。
function sendDataToNotion() {
// NotionのAPIキー *Notion側の作業1で取得したもの
const notionApiKey = "YOUR_NOTION_API_KEY";
// NotionのデータベースのURL *Notion側の作業2で取得したもの
const notionDatabaseUrl = "YOUR_NOTION_DATABASE_URL";
// スプレッドシートのデータを取得
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const dataRange = sheet.getRange('A1:C10'); // データの範囲を適切なものに変更する
const data = dataRange.getValues();
// Notionにデータを送信
const notionDatabaseId = extractDatabaseIdFromUrl(notionDatabaseUrl);
for (let i = 0; i < data.length; i++) {
let rowData = data[i];
sendDataToNotionDatabase(notionApiKey, notionDatabaseId, rowData);
}
}
// NotionのデータベースのIDを取得
function extractDatabaseIdFromUrl(url) {
const matches = url.match(/\/(\w{32})\?/);
return matches ? matches[1] : null;
}
// Notionのデータベースにデータを送信
function sendDataToNotionDatabase(apiKey, databaseId, rowData) {
const url = "https://api.notion.com/v1/pages";
const headers = {
"Authorization": "Bearer " + apiKey,
"Content-Type": "application/json",
"Notion-Version": "2021-05-13"
};
const payload = {
"parent": { "database_id": databaseId },
"properties": {
// ここにスプレッドシートの列に対応するデータを追加してください
"列名1": { "title": [{ "text": { "content": rowData[1] }}] }, //必須
"列名2": { "rich_text": [{ "text": { "content": rowData[2] }}] },
"ステータス": { "select": { "name": "未完了"} }, // プルダウン
"タグ": { "multi_select": [{ "name": "チーム1"},{"name":"チーム2"}] } // タグ
}
};
const options = {
"method": "post",
"headers": headers,
"payload": JSON.stringify(payload)
};
UrlFetchApp.fetch(url, options);
}
2.実行
GASのプログラムを実行しましょう。
*既存のデータベースにデータを連携する場合は、テスト用のデータベースを作成し、想定通りの連携ができるかどうかを確認されることをお勧めします。
関数を実行
1.コードエディタの上部の実行する関数を選択するプルダウンで「sendDataToNotion」を選択
2.コードエディタの上部の「実行」をクリック
3.初回のみ「承認が必要」のダイアログが出るので、許可しましょう。
参考
Notion APIによる連携
Notion APIの呼び出しには、明示的にNotionのVersionをHeaderをつけることを推奨しているそうです
Notion APIからレコードを登録する際のPayload定義の参考