![見出し画像](https://assets.st-note.com/production/uploads/images/128146576/rectangle_large_type_2_fae10296f76a402ca43c60630473a7d3.png?width=800)
Notionでメールマガジンを管理する:スプレッドシートのデータをNotionへGoogle Apps Script(GAS)を使って転記する編
最新記事はこちら⬇️です。
はじめに
デジタル化が進み情報が氾濫する中、情報をうまく管理し整理することが大切な課題になっています。
特に、私にとって毎日届くメールマガジンは価値ある情報源ですが、管理に労力がかかります。Gmailのメールマガジンを読むのが大変で整理しづらいと感じていました。
Chrome拡張機能を使う
そこで、メールマガジンをNotionに保存するChromeの拡張機能「Save to Notion」を使うようにしました。しかし「1クリック」とはいえ、手動で保存していたため、効率が悪いと感じていました。
自動化への第一歩:Gmail からスプレッドシート
そこでGoogle Apps Script(GAS)を学び、メールマガジン受信時にタイトルと本文をスプレッドシートに自動出力するシステムを作りました。
これはメールマガジン管理の大きな進歩で、自動化への第一歩だと思います。
次のステップ:スプレッドシートからNotion
今日はこれの続きで、いよいよスプレッドシートのデータをNotionに転記するプロセスについて記録したいと思います。
Notion APIを使う
この自動化プロセスでは、Notion APIの活用が必須となります。
Notion APIを使えば、プログラムからNotionのデータを操作できます。
ここではGASでNotion APIを呼び出し、スプレッドシートのデータをNotionに送信します。
NotionAPIをつかうための準備
Notionにインテグレーションを登録し、APIトークンを取得
送信先のデータベースIDも控えておく
こちらの記事が参考になります。
スプレッドシートからデータを取得する
【作業内容】
1_新規インテグレーション作成→トークン取得
Notion APIを使うためには、Notionのアプリ連携を設定する必要があります。アプリ連携を設定すると、NotionからGASにアクセスするためのトークンが発行されます。
2_コネクトの追加&データベースID取得
Notionのアプリ連携を設定したら、GASからNotionにアクセスするための接続(コネクト)を追加します。コネクトを追加すると、GASからアクセスするNotionのデータベースのIDが取得できます。
3_スクリプトプロパティにデータベースIDとトークンを格納
スクリプトプロパティとは、GASのスクリプトで使用する変数や定数を定義するための場所です。「データベースID」と「トークン」をスクリプトプロパティに格納することで、スクリプト内で簡単にアクセスすることができます。
4_GASのスクリプト
スクリプトプロパティにデータベースIDとトークンを格納したら、GASのスクリプトを作成します。スクリプトでは、データベースIDとトークンを使って、スプレッドシートに保存されたデータをNotionに転送します。
5_GAS実行
スクリプトを作成したら、GASを実行します。GASが実行されると、スプレッドシートに保存されたデータがNotionに転送されます。
データをNotionに転送する
スプレッドシートに保存されたデータをNotionに転送するスクリプト
function addDataToNotion() {
const props = PropertiesService.getScriptProperties();
const dbId = props.getProperty('NOTION_DB_ID');
const token = props.getProperty('NOTION_TOKEN');
const apiUrl = 'https://api.notion.com/v1/pages';
const obj = generateNotionPageObject(dbId);
postToNotion(apiUrl, token, obj);
}
function generateNotionPageObject(dbId) {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('メール');
const date = formatDate(sheet.getRange(2, 5).getValue());
const mainTitle = sheet.getRange(2, 1).getValue();
const number = sheet.getRange(2, 2).getValue();
const subTitle = sheet.getRange(2, 3).getValue();
return {
parent: { database_id: dbId },
properties: {
"日付": { "date": { "start": date, "end": null }},
"メインタイトル": { "title": [{ "text": { "content": mainTitle }}]},
"何日目": { "rich_text": [{ "text": { "content": number }}]},
"サブタイトル": { "rich_text": [{ "text": { "content": subTitle }}]},
}
};
}
function postToNotion(apiUrl, token, pageObject) {
const options = {
method: "POST",
headers: {
"Content-type": "application/json",
"Authorization": `Bearer ${token}`,
"Notion-Version": '2022-06-28',
},
payload: JSON.stringify(pageObject),
muteHttpExceptions: true
};
const response = UrlFetchApp.fetch(apiUrl, options);
Logger.log(response.getContentText());
}
function formatDate(date) {
return Utilities.formatDate(new Date(date), "Asia/Tokyo", "yyyy-MM-dd");
}
Notionのプロパティごとにのオブジェクトの記法は以下の公式リファレンスに載っていました。
![](https://assets.st-note.com/img/1705670566446-KbG1tS5U76.png?width=800)
![](https://assets.st-note.com/img/1705670204749-G4JROc4nov.png?width=800)
![](https://assets.st-note.com/img/1705670232283-DfISHVkZZk.png?width=800)
ここまでとりあえず、良い感じにすすんでいます!
今後の課題
あとは、本文の転記です。
本文はプロパティではなく、ブロックに出力しないといけないので、それについてはまだどうしたらいいのかわかっていないです
それから、一旦スプレッドシートに出力しなくても、Gmailから直接Notionへ出力できたらいいな。
このあたりはまだよくわかっていないので、引き続き調べて試していこうと思います。
ーーーーーーーーーー
私の書いた本が出版されました!
\Twitterからうまれた/
ちょっと理系なおうち遊びの本
Amazon 売れ筋ランキング
幼児教育 カテゴリー 有料Top100
ベストセラー1位✨ になりました!
ありがとうございます!
KindleUnlimited, ペーパーバックでも読めます!
![](https://assets.st-note.com/img/1705671997630-EiY8DMIEUX.png?width=800)
この記事が気に入ったらサポートをしてみませんか?