Apps Script公式リファレンス: Apps Script Reference |障害・課題追跡: IssueTracker |Google Workspace: Status Dashboard - Summary

2017年12月24日日曜日

Googleカレンダーでイベントのlinkを取得する(htmlLink)

カレンダーのイベントのLINKを取得したくて調べていて、Google Apps ScriptのCalendar Serviceで取得できるかと思いきや取得するmethodが見つからず、Google Calendar API を利用すると取得できたため、今回はその方法を書いていきます

  1. Google Calendar API を有効にする
  2. htmlLinkを取得するコードを書く
  3. 実行する


1. Google Calendar API を有効にする


有効にする方法がわからない場合は以下の手順でAPIを有効にできます


1. スプレッドシートのツール→スクリプトエディタ...を選択します


2. リソース→Google の拡張サービス.. を選択します


3. プロジェクト名を任意で設定して「OK」をクリックします


4. Calender API の右のボタンが無効になっているので
クリックして「ON」にします


 5. ↑の画面の Google API コンソール をクリックして「calendar」で検索して出て来る
Google Calendar APIを選択します


6.「有効にする」をクリックします


7. スクリプトエディタに戻って「OK」をクリックします



2. htmlLinkを取得するコードを書く


Advanced Calendar Service のlistNext10Events()を改造してhtmlLinkを取得するコードを書きました

コード.gs
function listNext10Events_with_link() {
  var calendarId = 'primary';
  var now = new Date();
  var events = Calendar.Events.list(calendarId, {
    timeMin: now.toISOString(),
    singleEvents: true,
    orderBy: 'startTime',
    maxResults: 10
  });
  if (events.items && events.items.length > 0) {
    for (var i = 0; i < events.items.length; i++) {
      var event = events.items[i];
      var link = event.htmlLink;
      if (event.start.date) {
        var start = event.start.date;
        Logger.log([event.summary, start, link]);
      } else {
        var start = Utilities.formatDate(new Date(event.start.dateTime), 'Asia/Tokyo', 'yyyy/MM/dd/HH:mm');
        Logger.log([event.summary, start, link]);
      }
    }
  } else {
    Logger.log('No events found.');
  }
}
意訳.gs
この処理は以下の処理を実行する
カレンダーのIDを設定する
現在日時を取得する
カレンダーIDを指定してイベントたちを取得する
現在日時以降で
繰り返しのイベントを個別に展開して
開始時刻で並べて
10件取得する

eventsのitemsが存在して長さが0より大きければ
events.itemsの数だけ以下を繰り返す
events.itemsを順番に取得する
htmlLinkでlinkを取得する
もしeventにstart.dateが存在すれば
start.dateを取得して
summaryとlinkと一緒にログに出す
start.dateが存在しなければ
event.start.dateTimeをフォーマットして
summaryとlinkと一緒にログに出す


eventsのitemsが存在しないか長さが0より大きくなければ
'No events found.'をログに出す




listNext10Events_with_link()を実行するとこれらからの予定が10件ログに出ます


var link = event.htmlLinkでは以下のようなリンクを取得できます
https://www.google.com/calendar/event?eid=EVENT_ID

ここで取得したリンクから開けるのはこの画面

編集画面を開きたい場合は
https://calendar.google.com/calendar/r/eventedit/EVENT_ID
とすれば良さそうなのでそれも次の記事で書きます


参考

Google Calendar API (calendar/quickstart/apps-script)
https://developers.google.com/google-apps/calendar/quickstart/apps-script

Calendar Service
https://developers.google.com/apps-script/reference/calendar/


maxResults
Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries. Optional.
https://developers.google.com/google-apps/calendar/v3/reference/calendarList/list

Google Calendar API Usage Limits
The Google Calendar API has a courtesy limit of 1,000,000 queries per day.
https://developers.google.com/google-apps/calendar/pricing?hl=ja


Listing events
https://developers.google.com/apps-script/advanced/calendar

Events/Resource representations
https://developers.google.com/google-apps/calendar/v3/reference/events#resource





Latest post

Google Apps Scriptの障害時はIssueTrackerを見てみる - Incidents for Apps Script are reported on Issue Tracker

IssueTracker > Apps Script issues https://issuetracker.google.com/savedsearches/566234 Google Apps Scriptの障害時は IssueTracker に課題が上がっていることが...