LoginSignup
2
3

More than 1 year has passed since last update.

NotionAPI×GASで自動でページ作成

Last updated at Posted at 2021-10-28

概要

Notionのデータベース配下に定期的にページを作成したいときの方法を紹介します。
私はこの方法で習慣トラッカー用の空ページを毎日自動作成しています。

前提条件

  • NotionAPIトークンを発行していること

→ 記事を書いたのでご参照ください(2021/11/15 追記)

APIトークン発行後、ページを作成したいデータベースに対して、インテグレーションの招待を忘れないようにしてください

使用API

ソース

下記のコードでは翌日日付(yyyy/mm/dd形式)の空ページを作成する例を記載しています。

main.gs

/**
 * 習慣トラッカー用の日付ページを作成する
 * タイトルとしてyyyy/mm/dd形式の文字列
 * 曜日の算出に使用したいので、Dateというプロパティに日付型で
 */
function makeHabitTrackerDatePage() {
  let props = PropertiesService.getScriptProperties().getProperties();
  let d = new Date();
  let tomorrow = new Date(d.setDate(d.getDate() + 1));


  let payload = {
    "parent": {
      "database_id": props.DATABASE_ID_HABIT
    },
    "properties": {
      "Name": {
        "title": [
          {
            "text": {
              "content": Utilities.formatDate(tomorrow, "JST", "yyyy/MM/dd") // タイトルとして文字列型の日付
            }
          }
        ]
      },
      "Date": {
        "date": {
          "start": Utilities.formatDate(tomorrow, "JST", "yyyy-MM-dd") // 曜日の算出に使用したいので日付型の日付
        }
      }
    }
  }
  Logger.log(props.DATABASE_ID_HABIT)
  postPage(props, payload);
}

/**
 * 新規でページを作成する
 */
function postPage(props, payload) {
  let url = "https://api.notion.com/v1/pages";
  let options = {
    "method": "POST",
    "headers": {
      "Content-type": "application/json",
      "Authorization": "Bearer " + props.NOTION_TOKEN,
      "Notion-Version": props.NOTION_VERSION,
    },
    "payload": JSON.stringify(payload),
    "muteHttpExceptions": true
  };

  try {
    let res = UrlFetchApp.fetch(url, options);
    Logger.log(res)
    return JSON.parse(res);
  } catch (e) {
    Logger.log(e);
    return undefined;
  }
}

env.gs

/**
 * 手動実行で設定する
 * (新しいGASエディタだとGUIでの設定ができないため・・・古いエディタに切り替えての設定でも可)
 */
function setScriptProps() {
  let scriptProperties = PropertiesService.getScriptProperties();

  scriptProperties.setProperties({
    'NOTION_VERSION': '2021-08-16',
    'NOTION_TOKEN': 'secret_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
    'DATABASE_ID_HABIT': 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
  });
}

NOTION_TOKENはNotionAPIで発行したトークン、DATABASE_ID_HABITはデータベースのIDに書き換えてください

※ データベースのIDはデータベースをページとして開くで開いたときのURL (例)https://www.notion.so/{userID}/{databaseID}?v={vieID}
から取得します

実行方法

スクリプトの環境変数を設定する

上記env.gsのsetScriptProps()関数を実行します(以前はGUIによる設定ができていましたが、現在はGASを古いエディタに切り替えないと設定できないのでスクリプトで設定します)

2021-10-29_01h37_18.png

動作確認として実行

動作確認として手動でmakeHabitTrackerDatePage関数を実行して、ページが作成されることを確認します

2021-10-29_01h48_41.png

上記のコードの通り実行した場合、翌日日付の空ページが作成されていればOKです!

image.png

GASの定期実行設定

GASエディタページの左タブからトリガーを選択し、新しいトリガーを作成します。

2021-10-29_01h41_17.png

習慣トラッカーとして毎日実行したいときの例は下図のとおりです
(GASの時間実行は正確な時間(毎日ピッタリAM01時00分00秒に実行とか)ではないので、適当なものを選択しています)

2021-10-29_01h42_02.png

その他メモ

  • 習慣トラッカーであれば中に書いていくテンプレートは同じものを使用するので、テンプレートを指定してページを作ることができればいいなぁ。。。
    • →もしかしたらあるかもしれないので、今後調べようと思います。
  • Notion側で日付から曜日を算出するには式 formatDate(prop("Date"), "dddd") で算出できます
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3