ケントのブログ(ふわふわ)

技術メモ、アイドル、演劇、美術など分からないなりに

Google Apps Scriptを使って複数のGoogleカレンダーをひとつにまとめる

いきさつ(Skip推奨)

ももクロのスケジュールを逃さないために、僕はももクロまとめノフさんが公開・更新してくださっているカレンダーを登録していました。(トップページ下)

情報が多い為にももクロの[イベント情報]、[テレビ情報]、[グッヅ情報]などなどいくつものカレンダーに分かれていまして、当然それらを全て登録していました。

自分の予定が見えづらいので、ももクロカレンダーを表示/非表示して切り替えるんですが、沢山あるカレンダーをポチポチするのって面倒でどうにか一つにまとめられないかなと思っていました。カレンダーとしてはももクロの予定でひとつであって欲しいわけで。

先日、見かけた Google Apps Scriptでホリエモンメルマガに載っている「今週のメディアスケジュール」を自分のカレンダーに自動登録してみた! - 悪あがきプログラマー。この記事を読んで、Googleカレンダーの情報って案外簡単に扱えるんだなということで先ほどの課題解決にチャレンジしてみました。

使い方・書き方

基本的なことは悪あがきプログラマーさんの記事で紹介のありました、こちら→初心者のためのGoogle Apps Scriptプログラミング入門(昔Javaを勉強するのにこの津耶乃さんの本にお世話になりました。こんな所で遭遇するなんて!)と、こちら→逆引きGoogle Apps Scriptリファレンス « bmoo.netを見て把握。

その他欲しかったAPIの情報はこちら→Google Apps Script Documentation - Calendar Servicesでお世話になりました。

それだけで簡単にできちゃいましたよ!

スクリプトの作成実行までは、先ほどの悪あがきプログラマーさんの記事を参考にしてださい。

書き方はJavascriptなので取っ付きやすいです。 ただalert()が使えないので、Browser.msgBox()を使います。

カレンダーを取得するのにはこれだけ。 - cal = CalendarApp.getCalendarById(CAL_ID);

そのうち期間を指定して予定(イベント)を取得するのは下記。 - ev = cal.getEvents(FROM_DATE,TO_DATE);

予定を追加するのにはCalenderオブジェクトのメソッドを使います。 - cal.createEvent(TITLE,START_DATE,END_DATE,OPTION);

そんなこんなを使って作りました。

作ったもの

  • 欲しい機能
  • 複数のカレンダーを1つのカレンダーに同期
  • 過去の情報は変更がないはずなので同期しない
  • 毎日同期

  • 実装内容

    • 処理時刻以降2ヶ月間の自分のももクロカレンダーの予定を削除
    • 処理時刻以降2ヶ月間の複数のももクロ公開カレンダーの予定を取得して追加
    • 毎晩3〜4時起動(トリガー設定)
    • 毎月1日には6ヶ月先のスケジュールを同期する

→毎日、2ヵ月先の情報を同期するスクリプトとなりました。

CAL_ID0は出力先のカレンダーを作って、そのIDにしてください。 CAL_1〜CAL_2の部分をまとめたいカレンダーのIDにしてください。いくつでもOKです。

その上でトリガーを設定しました。

これで沢山登録していたカレンダーを1つにできますね!やったぜ!