質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Q&A

1回答

1631閲覧

共有してるGoogleカレンダーのイベント更新者アカウントの取得

go6oo

総合スコア0

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

0グッド

0クリップ

投稿2021/06/22 05:16

前提・実現したいこと

チーム内に共有しているGoogleカレンダーを監視する為に
Googe apps scriptのカレンダー変更時のトリガーとGoogle CalendarAPIを組み合わせて
イベントの作成、更新、削除時に通知が飛ぶBotを作成しています。

発生している問題

Google Calendar APIのEvents.getで得られるアカウント情報はイベントの所有者と作成者の2つだけです。
CalendarAPI/Events
その為アカウントAがイベントを作成し、アカウントBが編集した場合にBの情報を取得する手段が現在ありません。
API、他のサービス含め、共有してるGoogleカレンダーでイベントを更新したアカウントの情報を取得する方法がありましたらご教授いただけると幸いです。

該当のソースコード

GoogleAppsScript

1 2function doMain(e) { 3 Logger.log(e); 4 var items = onCalendarEdit(e.calendarId); 5 6 for (var i = 0; i < items.length; i++) { 7 //idからEventを取得 8 var Event = Calendar.Events.get(e.calendarId, items[i].id); 9 EventProcessing(Event); 10 } 11} 12 13 14//カレンダー編集時に自動的に起動するプログラム 15function onCalendarEdit(CalId) { 16 var calendarId = CalId //同期させたいカレンダーIDを入れる 17 var summary = Calendar.Calendars.get(calendarId).summary 18 var properties = PropertiesService.getScriptProperties(); 19 var nextSyncToken = properties.getProperty("syncToken_" + summary); 20 var optionalArgs = { 21 syncToken: nextSyncToken 22 }; 23 var events = Calendar.Events.list(calendarId, optionalArgs); 24 Logger.log(JSON.stringify(events)); 25 var nextSyncToken = events["nextSyncToken"]; 26 properties.setProperty("syncToken_" + summary, nextSyncToken); 27 return events.items; 28} 29 30function EventProcessing(Event) { 31/*整形して外部に通知を飛ばす処理 32*/ 33}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

力技ですが、Reports APIを利用して監査ログから変更者を取得することはできるかと思います。
Google Workspaceを利用しており、Google Adminのアクセス権限があることが前提となります。

Admin SDK APIのreportsを拡張サービスとして追加すると下記のようにログデータから変更されたカレンダーIDが取得できるので、対象のカレンダーIDと一致するログの変更者の情報を拾ってやるのが良いかと思います。
ただし、このやり方だと対象のカレンダーに同時に大量のアクセスがあった場合にそれぞれの変更がどのログに該当するかの識別をするロジックが必要になります。

参考:https://developers.google.com/admin-sdk/reports/v1/appendix/activity/calendar

GAS

1function getCalendarLog() { 2 var userKey = 'all'; 3 var applicationName = 'calendar'; 4 var optionalArgs = { 5 maxResults: 10 //直近のログの取得件数 6 }; 7 var response = AdminReports.Activities.list(userKey, applicationName, optionalArgs); 8 var activities = response.items; 9 if (activities && activities.length > 0) { 10 for (i = 0; i < activities.length; i++) { 11 var activity = activities[i]; 12 Logger.log(activity.id.time); //変更時間 13 Logger.log(activity.actor.email); //変更者のメールアドレス 14 Logger.log(activity.events[0].name); //変更の種類 15 Logger.log(activity.events[0].parameters[3].value); //変更されたカレンダーID 16 } 17 } else { 18 Logger.log('No calendars found.'); 19 } 20}

投稿2021/06/28 06:31

wefee

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問