Microsoft Graph を使って、会議室の予定表を取得する

# 本日の投稿について
こちらは [Office365 Advent Calendar 2018](https://adventar.org/calendars/3184) 22日目の記事です。

# 背景
PowerApps で会議室の予約や空き時間状況を取得するのはテンプレートから2クリックぐらいでできるんですけどね。
会議室が使用中・・・とか今何やってるんだとかを表示させたらいいよねぇと常々思ってましてね。
とりあえずAPIからどうやってとってくるんだ？というのを調べてみたのです。

# 実際にやってみよう！
取得にはMicrosoft Graphを使用します。

## アプリケーション登録方法
まず会議室データを取得するアプリケーションを登録し、会議室へのアクセス許可を取得する必要があります。

1. Azure Active Directory管理センターに入ります。
Office365の管理から左側にある管理センターのAzure Active Directoryをクリックしましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/56d57c3d-af4a-418a-90bb-123757508e51.png)

2. アプリの登録をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/92d925d1-454a-a34b-8306-8ff1c5623c4f.png)

3. 新しいアプリケーションの登録をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/1ceb9b8f-1801-3d80-63bd-4bd34d9a47c3.png)

4. パラメタを入力して作成をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/4d891434-b22f-80b1-dbd0-3c0b98b64715.png)

5. できたら「設定」＞「必要なアクセス許可」と展開する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/111e4d5b-d393-afee-7e81-950cb884e662.png)

6. 「追加」＞「APIを選択します」＞Microsoft Graphを選択する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/d28e6c99-2b69-8869-63b3-33389440142f.png)

7. アクセス許可を選択する
　・Read Mail in All mailboxes
　・Read calendars in all mailboxes


8. 追加されていることを確認
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/a1940a50-22c5-b2c5-745d-d30f7cc05395.png)


9. アクセスキーを作成する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/c691847a-8288-d9fc-943b-c30059e6bc96.png)
※保存すると値が入ります。一度画面変わると取得できなくなるので必ずコピーしましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/b77f3ac5-5f9e-04a6-263c-ae772a885a86.png)

10. エンタープライズ アプリケーションをクリックする
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/316a09e6-2f01-0e7e-9e55-9a63d332edc3.png)

11. 先ほど作ったアプリが一覧にあるのでクリックする
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/b19979de-5dde-c25b-91b6-9474558281e9.png)

12. アクセス許可をクリックする
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/91e4eb30-0ab1-5bcb-a1bf-bf4281e38ccc.png)

13. ＊＊＊に管理者の同意を与えますをクリックする

14. 「承諾」をクリックする
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/64a6455d-416e-305b-7016-fa66ce410e5a.png)

15. 前の画面に戻り、「更新」をクリックし、アクセス許可が表示されることを確認する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/99583e31-7582-7c82-eadb-6f3f617ceca7.png)

これでアプリケーション登録は完了です。

## 実際に取得してみる
ここからはPostmanを使用して説明します。

### アクセストークンを取得する
APIで何かアクセスをするときは、最初にアクセストークンを発行する必要があります。

Headers
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/93d61105-616f-4967-85c1-b54821e1128c.png)

Body
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/b76a00d5-ba89-c61a-4671-982455a202f4.png)

Sendをクリックするとアクセストークンが取得できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/b3c54eb7-9b3d-6160-09e3-88c3fa473aee.png)


### 会議室の予定を取得する
Header
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/fbf30ae9-64f7-4877-025c-8bcb89941987.png)

Params
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/7b85685b-c7c9-819d-53d8-635a2e179abb.png)

Sendをクリックすると予定一覧が取得できます
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/4f3096c1-c394-2901-fef9-5b6bd02f9add.png)


# 最後に
PowerAppsと組み合わせるとこんなことができますよ！
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">更にそれっぽくしてみた<a href="https://twitter.com/hashtag/powerapps?src=hash&amp;ref_src=twsrc%5Etfw">#powerapps</a> <a href="https://twitter.com/hashtag/meetingroom?src=hash&amp;ref_src=twsrc%5Etfw">#meetingroom</a><a href="https://twitter.com/hashtag/digitalsignage?src=hash&amp;ref_src=twsrc%5Etfw">#digitalsignage</a><a href="https://twitter.com/hashtag/microsoftgraph?src=hash&amp;ref_src=twsrc%5Etfw">#microsoftgraph</a> <a href="https://t.co/lHMw3Iz3hH">pic.twitter.com/lHMw3Iz3hH</a></p>&mdash; りなたむ@steed400 (@R_t_A_n_M) <a href="https://twitter.com/R_t_A_n_M/status/1069606240123150336?ref_src=twsrc%5Etfw">December 3, 2018</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>