[Google Calendar API(V3)] Javaでカレンダーを取得する

Google Calendar API V3(Java)を使用して、
Googleカレンダーを取得する方法
についてご紹介します。

Googleカレンダーの左下にあるマイカレンダー、他のカレンダーの情報が取得できます。
<img width=220 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/d0d0285d-7924-6c24-8b18-a70083c189f1.png">

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Google Calendar API(V3)] JavaでCalendar APIを使う](https://qiita.com/doran/items/c735c7b05c0a2ed4bfdb)
を参照ください。
:::

|No||目次|
|---|---|---|
|1||[カレンダー一覧を取得](#1-カレンダー一覧を取得)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|
|2||[カレンダーを取得](#2-カレンダーを取得)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](#23-レスポンスの内容)|

## 1. カレンダー一覧を取得
Googleカレンダーの一覧を取得します。

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
CalendarScopes.CALENDAR
CalendarScopes.CALENDAR_READONLY
```
[⧉[Google Calendar API(V3)] JavaでCalendar APIを使う(2.2 Driveインスタンスを取得)](https://qiita.com/doran/items/c735c7b05c0a2ed4bfdb#22-calendarインスタンスを取得)
でスコープを指定してください。

### 1.2. 実行

```java
public static void main(String[] args) throws Exception{
    Calendar calendar = getCalendar();
    
    Calendar.CalendarList calendarList = calendar.calendarList();
    Calendar.CalendarList.List list = calendarList.list();
    
    CalendarList res = list.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//www.googleapis.com/calendar/v3/users/me/calendarList
が実行されます。

#### 1.2.2. クエリパラメータ
Calendar.CalendarList.Listのsetメソッドにより、クエリパラメータを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setMaxResults|Integer|レスポンスで返されるエントリの最大数<br>デフォルトは100、最大250まで指定可能|
|setMinAccessRole|String|[最小のアクセス権限](#最小のアクセス権限)|
|setShowDeleted|Boolean|削除されたカレンダーを含めるか|
|setShowHidden|Boolean|非表示のエントリを含めるか|
|setPageToken|String|次のページで前のリスト要求を継続するためのトークン<br>**レスポンスのgetNextPageTokenで取得が可能**|
|setSyncToken|String|結果を取得した後に変更された内容を取得するためのトークン<br>**レスポンスのgetNextSyncTokenで取得が可能**|

#### 最小のアクセス権限
|文字列|説明|
|---|---|
|freeBusyReader|空き時間情報を読み取ることが可能|
|owner|イベントとアクセス制御リストの読み取りと変更を行うことが可能|
|reader|非公開ではないイベントを読み取ることが可能|
|writer|イベントの読み取りと変更を行うことが可能|

### 1.3. レスポンスの内容

#### CalendarList

|メソッド|戻り値|説明|
|---|---|---|
|getKind|String|リソースの種類<br>固定文字列："calendar#calendarList"|
|getEtag|String|Eタグ|
|getItems|List\<[CalendarListEntry](#calendarlistentry)\>|カレンダー情報|	
|getNextPageToken|String|次のページのページトークン<br>リストの最後の場合はNULL|
|getNextSyncToken|String|この結果が返された後に変更された内容を取得するためのトークン|

#### CalendarListEntry

|メソッド|戻り値|説明|
|---|---|---|
|getAccessRole|String|[認証済みユーザーのカレンダーに対してのアクセスロール](#アクセスロール)|
|getConferenceProperties|[ConferenceProperties](#conferenceproperties)|会議タイプ|
|getDefaultReminders|List\<[EventReminder](#eventreminder)\>|予定の通知|
|getDeleted|Boolean|削除済みか|
|getDescription|String|説明|
|getEtag|String|Eタグ|
|getHidden|Boolean|非表示か|
|getId|String|カレンダーID|
|getKind|String|リソースの種類<br>固定文字列："calendar#calendarListEntry"|
|getLocation|String|カレンダーの地域|
|getNotificationSettings|[NotificationSettings](#notificationsettings)|予定の通知（その他の通知）|
|getPrimary|Boolean|認証済みユーザーのメインカレンダーか|
|getSelected|Boolean|UIにコンテンツを表示するか|
|getSummary|String|名前|
|getSummaryOverride|String|概要|
|getTimeZone|String|タイムゾーン|
|getColorId|String|色のID|
|getBackgroundColor|String|背景色(16進数形式)|
|getForegroundColor|String|前景色(16進数形式)|

#### ConferenceProperties
|メソッド|戻り値|説明|
|---|---|---|
|getAllowedConferenceSolutionTypes|List\<String\>|サポートされている会議タイプ<br>"hangoutsMeet"(http:\//meet.google.com）のみ<br><br>"eventHangout"、"eventNamedHangout"はサポートが終了しているので取得のみ(設定不可)|

#### EventReminder
|メソッド|戻り値|説明|
|---|---|---|
|getMethod|String|通知方法<br>"email"：メール、"popup"：通知(UIポップアップ)|
|getMinutes|Integer|イベント開始の何分前に通知するか<br>0〜40320分まで指定可能|

#### NotificationSettings
|メソッド|戻り値|説明|
|---|---|---|
|getNotifications|List\<[CalendarNotification](#calendarnotification)\>|その他の通知|

#### CalendarNotification
|メソッド|戻り値|説明|
|---|---|---|
|getMethod|String|通知方法<br>"email"：メールで通知|
|getType|String|[通知タイプ](#通知タイプ)|

#### 通知タイプ
|文字列|説明|
|---|---|
|eventChange|予定の変更<br>このカレンダー上の予定が変更された場合|
|eventCancellation|予定のキャンセル<br>このカレンダー上の予定がキャンセルされた場合|
|eventResponse|予定への返信<br>ゲストがこのカレンダー上の予定に返信した場合|
|agenda|今日の予定リスト<br>このカレンダー上の予定の概要が毎日メールで届きます|

#### アクセスロール
|文字列|説明|
|---|---|
|freeBusyReader|空き時間情報への読み取りアクセス権を付与|
|reader|カレンダーへの読み取り権限を付与|
|writer|カレンダーへの読み取りおよび書き込み権限を付与|
|owner|カレンダーの所有権を提供|

## 2. カレンダーを取得
指定したカレンダーの情報を取得します。

取得したいカレンダーIDは、
[1. カレンダー一覧を取得(CalendarListEntry)](#calendarlistentry)のgetId()で取得した値を使います。

### 2.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
CalendarScopes.CALENDAR
CalendarScopes.CALENDAR_READONLY
```
[⧉[Google Calendar API(V3)] JavaでCalendar APIを使う(2.2 Driveインスタンスを取得)](https://qiita.com/doran/items/c735c7b05c0a2ed4bfdb#22-calendarインスタンスを取得)
でスコープを指定してください。

### 2.2. 実行

```java
public static void main(String[] args) throws Exception{
    Calendar calendar = getCalendar();
    Calendar.CalendarList calendarList = calendar.calendarList();
    Calendar.CalendarList.Get get = calendarList.get("カレンダーID");
    
    CalendarListEntry res = get.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
GET:　https:\//www.googleapis.com/calendar/v3/users/me/calendarList/{カレンダーID}
が実行されます。

#### 2.2.2. クエリパラメータ
クエリパラメータはありません。

### 2.3. レスポンスの内容

#### CalendarListEntry

[1.3. レスポンスの内容(CalendarListEntry)](#calendarlistentry)と同じです。

<br>
<br>
おしまい。。