adsense自動レスポンシブ

Calender GoogleAppsScript

Google Apps Script - Calendarカレンダー初級編

更新日:

G Suite Servicesのカレンダー(Calendar)についてまとめました。

まずは初級編として、概要とgetするところまでを書きたいと思います。(中級編ではcreateについて触れる予定)

 

Calendarを操作するAPIは二種類ある

Google Apps Script(以下GAS)を利用すると、普段Googleカレンダーで操作できることのほとんどの操作ができます。

厳密には、GASで直接的に使える組み込みAPI(Googleのリファレンスでは"built-in Calendar service"と表現されています)と、GASだけでなく様々なリソースから使用できるREST APIの"Google Calendar API"があります。

前者だと最近カレンダーに追加された新機能に対応していませんが、後者だと新機能も含むほぼすべて(たぶん...)のことができます。

要件に合わせて使いやすい方 or 使える方を使っていけばいいと思いますが、まずは簡単な組み込みの方のCalendarAppクラスを中心に説明していきます。

 

普段の用語とCalendar APIの用語の確認

各メソッドの説明に入る前に、用語の整理をしておきたいと思います。

「カレンダー」

Googleカレンダーでは、
「カレンダーを追加」という表記があるように、業務やグループ・人ごとに"Calendar"を作って、自分or複数人で共有することができます。

そして、Googleカレンダーで普段登録するあの「予定」は、いずれかの「カレンダー」にぶら下がっているのです。

特に指定しなければ、デフォルトのカレンダー(「マイカレンダー」として表示されるカレンダーのうち"×"ボタンが表示されないやつ)の配下に個々の「予定」が作られることになります。

「予定」

「予定」というのは、Googleカレンダーでは"Event"と呼ばれていて、前述の通り常に何かしらの"Calendar"に紐づくことになります。

Calendar APIを操作する際は、常に"Calendar"と"Event"を意識しておく必要があります。

 

Calendar API - 初級編

例えば、「特定の条件の予定をすべて取得して、Spreadsheetに一覧を表示する」というような要件の時に、どのように予定を取得すればよいでしょうか。

実は、カレンダーの予定の一つ一つにIDが振られており、そのIDが分かっていればEventを取得することができます。

↓こんな感じです。

var event0 = CalendarApp.getEventBiId("<id>");       //<id>にIDを指定する

 

しかし、多くの場合、これから取得したいEventのIDが分かっているわけもないので、別のアプローチが必要になってきます。

 

まずはカレンダーがないと始まらない

ダイレクトにEventを取得できないなら、まず、その親であるCalendarを取得しにいきます。
その後、カレンダーにぶら下がる予定のうち、条件にヒットする(複数の)予定を、配列に取得する方法をとります。

ひとまず、自分のデフォルトカレンダーを取得してみます。

 

もしくは、名称によりカレンダーを検索し、取得された配列の中から特定のカレンダーを判別して取得します。

 

カレンダーに紐づくEventを取得する

予定を取得するには、事前に取得したカレンダーに対して(仮に"mycalendar"とすると)mycalendar.getEvents(startTime, endTime, options)と書きます。

このメソッドの戻り値は配列となりますが、optionsに特定の連想配列を指定することで、さらに条件を絞って検索結果を絞ることができます。

Name 説明
start ヒットしたEventの最初から何番目以降を返すか
max 何件返すか
author Eventを作成したオーナーのEmailアドレスを指定
search 任意のテキストでEventタイトルを絞り込み(完全一致)
statusFilters[] 「はい/いいえ/未定」などのステータスで絞り込み

 

例えば、ある1ヶ月の週次で開催される「test定例Mtg」という予定を取得したい場合は、以下のように書きます。

サンプルコードにもコメントを書いていますが、searchオプションは完全一致なのでご注意ください。(部分一致ではありません。正規表現も試してみましたが無理なようです)

 

Eventの詳細を取得する

Eventを配列で取得したあとは、上記サンプルでいうところのevents[i](iは0~任意の数字)でEventを特定して、get~()で情報を取得します。

2017年/2018年からの新UIでは、その多くがアイコンのみの表示なので、どのメソッドを使えばどこを設定できるのかよくわからないですが、英語表記にすることで対応箇所が見えてきます。

以下に、主なものだけピックアップしたので参考にしてみてください。

 

さいごに

終日予定については省略しましたが、基本は同じです。

また、中級編でcreateを説明しますが、通知を出す出さないについてもそこで触れたいと思います。

 

レクタングル336

レクタングル336

-Calender, GoogleAppsScript

Copyright© JJ BLOG , 2019 All Rights Reserved.