Google Apps Scriptで、Googleカレンダーを調べる
最近個人的にアツいのが、Google Apps Scriptです。
Google Docsでオンラインでスクリプトを記述でき、そこで実行してGoogleの様々なサービスにアクセスできたりします。かなり夢が広がります。今後何回か扱っていきたいと思っていますが、まずは簡単な導入の話です。
Google Docsのスプレッドシートにもスクリプトを書けますが、今回はちゃんとした開発画面をDocsに導入し、そこで開発してみます。
導入
Google Docsの左の「作成」ボタンを押し、「アプリを追加」を押して、「Google Apps Script」を選びます。
これで作成できるドキュメントの種類に「スクリプト」が追加されますので、それを押して新規作成します。
メールを送ってみる
以下のようなコードを書きます。簡単ですね。
function sampleSendEmail() { var email = "自分のアドレス@hogehoge.com" GmailApp.sendEmail(email, "無題", "こんにちは世界"); }
実行するfunction名を、今書いたコードに合わせて(ここではsampleSendEmail)、実行すると、指定したEmailアドレスにメールが届きます。
実行は上の三角ボタンです。隣の虫マークはデバッグ実行です。コードの行番号付近に赤丸のブレークポイントを設定しておくと、そこで実行を一時停止できたりします。ブラウザでここまでやるとは、恐ろしい。
ドキュメントを作ってみる
function sampleCreateDoc() { var doc = DocumentApp.create("Hello world!"); doc.getBody().appendParagraph('Hogehogeeeee'); }
Google Docsのホームディレクトリを見ると、「Hello world!」というタイトルのドキュメントができているはずです。中には「Hogehogeeeee」と書かれています。
ここまで2つは、公式のQuick Startのサンプルからでした。こんな感じで、次はカレンダーに触ってみます。
カレンダーから検索
「ある指定したカレンダーの、指定した時間帯に予定が無いかどうか」を調べるコードを書いてみます。
一応背景を言いますと、私の会社では全社員がGoogle Calendarで予定管理をしています。ほかの社員のスケジュールは全部見える状態です。で、特に上役の人は予定がびっちりで、そこに自分のための会議等を入れ込むのは簡単ではありません。それを探せると便利です。
(目で見たほうが早いとかいう無粋な話は禁止です。)
今回の例では、対象の人のカレンダーをフォローしている前提で、その人のランチの都合が取れそうか(12:00~13:00がの予定が空いているか)、を調べるコードになっています。
コード
mainから実行します。
function main() { startTime = new Date(); endTime = new Date(); startTime.setHours(12, 0, 0); endTime.setHours(13, 0, 0); meetable("Hoge", startTime, endTime); } function meetable(name, startTime, endTime) { // nameの人のカレンダーを取得 (フォローしてる前提) var cals = CalendarApp.getAllCalendars(); var cal = getCalendarByName(cals, name); if(cal == null) { Logger.log(name + "という名前のカレンダーは見つかりません"); return; } // この先一週間で空いてるかどうか for(var i=0; i<7; i++){ var events = cal.getEvents(startTime, endTime); var dateStr = (startTime.getMonth()+1) + "月" + startTime.getDate() + "日"; if(events.length > 0){ Logger.log(dateStr +"は、"+name+"さんの予定は埋まってそう"); }else{ Logger.log(dateStr +"は、"+name+"さんの予定は空いてます"); } startTime.setDate(startTime.getDate()+1); endTime.setDate(endTime.getDate()+1); } } function getCalendarByName(calendars, name){ for(var i=0; i<calendars.length; i++){ if(calendars[i].getName() == name) return calendars[i]; } return null; }
実行結果例
Logger.log による出力内容は、上のメニューの「表示」→「ログ」で表示できます。
こんな感じで、直近一週間でランチに行けそうな日がわかります。土日が入ってしまっていますが。
これが5人の会議で全員が空いている日を調べる、ですとか、この先1か月で調べる、となれば、コードで調べる意義も出てくる・・・はずです。