GraphAPIでM365の他人のカレンダーを取得する方法
この記事ではMicrosoftのGraphAPIを使用して自分が閲覧権限がある他人のカレンダーのデータを取得する方法について解説します。
目次
・権限とスコープについて
・APIエンドポイント
・カレンダーの共有設定
https://learn.microsoft.com/en-us/graph/api/overview?view=graph-rest-1.0
権限とスコープ
GraphAPIを呼び出すにはOAuth認証で権限を取得する必要があります。自分自身の権限の範囲で処理を行うにはDelegated permissionを使用します。Delegated permissionを使用するとAさんの代理としてAさんがアクセス可能な範囲のデータの取得だけができるようになります。
スコープは以下のCalendars関係のを設定します。

他にはオンラインミーティングのURLを取得するのに以下のスコープも必要です。

あとはAPIを呼び出すことでデータの取得ができます。
もう一つのApplication permissionはサービスとして動作される場合に使用します。例えば「毎日深夜1時に全ユーザーのカレンダーを取得して会議に費やした時間を計算する」といった場合にはApplication permissionの方が適切でしょう。こちらは全ユーザーのデータが取得できてしまうため意図しない範囲の権限を付与してしまわないように注意が必要です。
参考サイト
APIエンドポイント
APIエンドポイントで自分ははまったのですがDelegated permissionでは以下のエンドポイントは呼び出すことができません。
GET /users/{id | userPrincipalName}/calendars/{id}/events
このエンドポイントは多分Application permissionでしか呼び出せません(未確認)
https://learn.microsoft.com/ja-jp/graph/api/user-list-events?view=graph-rest-1.0&tabs=http
他人のイベントを取得するにはまず他のユーザーから共有済みのカレンダーの一覧を取得する必要があります。
https://learn.microsoft.com/ja-jp/graph/api/user-list-calendars?view=graph-rest-1.0&tabs=http
取得したカレンダーのCalendarIdを保存し、その値を使ってこのAPIを呼び出します。
https://learn.microsoft.com/ja-jp/graph/api/calendar-list-events?view=graph-rest-1.0&tabs=http
これでイベントの一覧を取得できます。
カレンダーの共有
https://learn.microsoft.com/ja-jp/graph/api/user-list-calendars?view=graph-rest-1.0&tabs=http
このエンドポイントでは他人から共有されたカレンダーの一覧が取得できます。AさんがBさんのカレンダーをAPIで取得できるようになるためにはBさんに共有設定をしてもらう必要があります。
Outlookカレンダーの上部のメニューバーの共有をクリックして設定ができます。

これでAPIから他人のカレンダーとイベントのデータを取得できるようになりました。