📆
GASでNotionのスケジュールをGoogleカレンダーにコピーする
概要
Notionの作成したスケジュールをGoogleカレンダーにコピーしたい。お金かけたくないのでNotion APIとGASで実装してみた。
実装
Notion API
カレンダービューを持つデータベースを作成して、Notion API用のintegrationを追加する。
以前は"Share"からintegrationを追加していたようだが、2022年10月現在では "Connections" からintegrationを追加するように仕様変更されているので注意。
Notion APIのリファレンスを参考にしながら以下の機能を実装。
notion.gs
const NOTION_API_TOKEY = "secret_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
const DATABASE_ID = "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"
const NOTION_VERSION = "2022-06-28"
// Notion内のタスクを取得する関数
function getNotionTasks() {
const req_header = {
"Content-Type": "application/json; charset=UTF-8",
"Authorization": "Bearer " + NOTION_API_TOKEY,
"Notion-Version": NOTION_VERSION
}
const req_options = {
"method": "post",
"headers": req_header
}
const url = `https://api.notion.com/v1/databases/${DATABASE_ID}/query`
const res = UrlFetchApp.fetch(url, req_options).getContentText('UTF-8')
const notion_results = JSON.parse(res)["results"]
// タスク名、開始日、終了日を抽出して返す
return notion_results.map(
page => ({
"title": page["properties"]["Name"]["title"][0]["plain_text"],
"start": page["properties"]["Date"]["date"]["start"],
"end": page["properties"]["Date"]["date"]["end"]
})
)
}
Googleカレンダー
コピー先のGoogleカレンダーのカレンダーIDを取得してコードに貼り付ける。
gcalender.gs
// GoogleカレンダーのカレンダーIDを取得してコードに記入しておく。
const CALENDER_ID = "****************************************************************@group.calendar.google.com"
function registerGCalenderTask(task_name, start, end) {
const my_calender = CalendarApp.getCalendarById(CALENDER_ID)
my_calender.createAllDayEvent(task_name, start, end)
}
Main部分
main.gs
function main() {
notion_tasks = getNotionTasks()
// register task notion to gcalender
notion_tasks.forEach( i => {
if (i["end"]) {
registerGCalenderTask(i["title"], new Date(i["start"]), new Date(i["end"]))
} else {
registerGCalenderTask(i["title"], new Date(i["start"]))
}
})
}
実行
1. Notionのカレンダーにサンプルタスクを設定する
2. main.gsを実行する
3. 結果としてGoogleカレンダーにタスクがコピーされる
改善点
NotionとGoogleカレンダー間で同期されているわけではないので、継続的に利用する場合は要改善。その場合はGASのタイマートリガーで定期実行を行うとよさそう。また、main.gsを複数回実行すると、その度にGoogleカレンダー上のタスクが重複してコピーされる問題がある。
Discussion