見出し画像

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のプロパティごとにのオブジェクトの記法は以下の公式リファレンスに載っていました。


まずはGmailからスプレッドシートに保存(詳しくは前回の記事で)
スプレッドシートからNotionへ

ここまでとりあえず、良い感じにすすんでいます!

今後の課題


あとは、本文の転記です。
本文はプロパティではなく、ブロックに出力しないといけないので、それについてはまだどうしたらいいのかわかっていないです

それから、一旦スプレッドシートに出力しなくても、Gmailから直接Notionへ出力できたらいいな。
このあたりはまだよくわかっていないので、引き続き調べて試していこうと思います。


ーーーーーーーーーー
私の書いた本が出版されました!
\Twitterからうまれた/
ちょっと理系なおうち遊びの本

Amazon 売れ筋ランキング  
幼児教育 カテゴリー  有料Top100
ベストセラー1位✨ になりました!
ありがとうございます!


KindleUnlimited, ペーパーバックでも読めます!





この記事が気に入ったらサポートをしてみませんか?