![見出し画像](https://assets.st-note.com/production/uploads/images/129980949/rectangle_large_type_2_4ba5f0ea9884e19fd393001d3fd53355.png?width=1200)
Notionでメールマガジンを管理する:スプレッドシートのデータをNotionへGoogle Apps Script(GAS)を使って転記する編
最新記事はこちら⬇️です。
はじめに
デジタル化が進み情報が氾濫する中、情報をうまく管理し整理することが大切な課題になっています。
特に、私にとって毎日届くメールマガジンは価値ある情報源ですが、管理に労力がかかります。Gmailのメールマガジンを読むのが大変で整理しづらいと感じていました。
Chrome拡張機能を使ってみる
そこで、メールマガジンをNotionに保存するChromeの拡張機能「Save to Notion」を使うようにしました。しかし「1クリック」とはいえ、手動で保存していたため、効率が悪いと感じていました。
自動化への第一歩:Gmail からスプレッドシート
そこでGoogle Apps Script(GAS)を学び、メールマガジン受信時にタイトルと本文をスプレッドシートに自動出力するシステムを作りました。これはメールマガジン管理の大きな進歩で、自動化への第一歩だと思います。
次のステップ:スプレッドシートからNotion
今日はこれの続きで、いよいよスプレッドシートのデータをNotionに転記するプロセスについて記録したいと思います。
タイトルと日付をNotionのプロパティへ、
本文を下の自由に書ける部分(ブロック)へ出力してみました。
必要なツール
Google Spreadsheet
Google Apps Script
NotionアカウントとAPIキー
ステップ1: Spreadsheetを準備しよう
まず、メールのデータが入ったGoogle Spreadsheetを用意します。タイトル、日付、本文が記載されていることを確認してくださいね。
私は、このような方法で、Gmailに届くメールマガジンをSpreadsheetへ自動的に保存しています。
ステップ2: Notionに接続しよう
次に、NotionのAPIキーを取得します。これはNotionの設定ページから簡単に取得できます。APIキーがあれば、Notionにデータを送れるようになります。
以下のページがとても参考になります。
ステップ3: スクリプトを書こう
Google Apps Scriptを使って、Spreadsheetのデータを読み込んでNotionに送るコードを書きます。
下の方に書いているので興味があれば見てみてください!
ステップ4: タイトルと日付を送ろう
タイトルと日付は、Notionの「プロパティ」として送ります。これで、Notion上でキレイで見やすく便利に整理されます。
ステップ5: 本文をどうする?
本文は、Notionのページ内に「ブロック」として追加します。これで、長い文章も読みやすく表示されます。
ステップ6: 長い本文を分けよう
もし本文が2000文字を超えていたら、ちょっと工夫が必要です。2000文字ごとに分けて、複数のブロックにして送ります。
まとめ
これで、やっと、Spreadsheetのデータを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, 1).getValue());//(2,1)にある日付
const mainTitle = sheet.getRange(2, 2).getValue();//(2,2)にあるタイトル
const content = sheet.getRange(2, 3).getValue(); //(2,3)にある本文
const contentBlocks = splitTextIntoBlocks(content, 2000); // 本文を2000文字ごとに分割
return {
parent: { database_id: dbId },
properties: {
"日付": { "date": { "start": date, "end": null }},
"メインタイトル": { "title": [{ "text": { "content": mainTitle }}]},
},
children: contentBlocks.map(block => ({
type: 'paragraph',
paragraph: {
rich_text: [{ type: 'text', text: { content: block } }]
}
}))
};
}
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");
}
function splitTextIntoBlocks(text, maxLength) {
var blocks = [];
for (let i = 0; i < text.length; i += maxLength) {
blocks.push(text.substring(i, Math.min(i + maxLength, text.length)));
}
return blocks;}
このスクリプトはGoogle Apps Scriptを使って、Google Spreadsheetに保存されているデータをNotionのデータベースに転送するためのものです。具体的には、
Spreadsheetの「メール」というシートから
特定の列のデータ(日付、メインタイトル、本文)を読み取り、
それらをNotionのページとして新たに作成します。
各関数の役割は以下の通りです。
◆addDataToNotion 関数
PropertiesService.getScriptProperties()を使用して、スクリプトのプロパティからNotionデータベースのIDとAPIトークンを取得します。
次に、generateNotionPageObject関数を呼び出して、Notion APIに送信するためのページオブジェクトを生成します。
最後に、postToNotion関数を呼び出して、このページオブジェクトをNotionに送信します。
◆generateNotionPageObject 関数
この関数はNotionページオブジェクトを生成します。
まず、Spreadsheetの「メール」シートから必要なデータを読み取り、
そのデータを用いてNotionのページオブジェクトを作成します。
このオブジェクトには、ページの「parent」(親データベースID)、プロパティ(日付、メインタイトル)と、本文が含まれます。
本文は2000文字ごとに分割され、複数のパラグラフブロックとしてページに追加されます。
◆postToNotion 関数
この関数は、指定されたNotion APIのURLにページオブジェクトをPOSTリクエストとして送信します。
リクエストのヘッダーには、コンテンツタイプ、認証トークン、Notion APIのバージョンが含まれます。リクエストの本文(payload)には、JSON形式でシリアライズされたページオブジェクトが含まれます。送信が完了すると、レスポンスがロガーに記録されます。
◆formatDate 関数
この関数は、日付を「Asia/Tokyo」タイムゾーンに基づいて「yyyy-MM-dd」形式にフォーマットします。これは、Spreadsheetから読み取った日付データをNotion APIに適した形式に変換するために使用されます。
◆splitTextIntoBlocks 関数
この関数は、与えられたテキストを指定された最大文字数(この場合は2000文字)ごとに分割します。これは、Notionのテキストブロックには2000文字の制限があるため、長いテキストを適切に分割するために必要です。
ーーーーーーーーーー
私の書いた本が出版されました!
\Twitterからうまれた/
ちょっと理系なおうち遊びの本
Amazon 売れ筋ランキング
幼児教育 カテゴリー 有料Top100
ベストセラー1位✨ になりました!
ありがとうございます!
KindleUnlimited, ペーパーバックでも読めます!
![](https://assets.st-note.com/img/1705732895714-FVMnqeZliA.png?width=1200)