[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/896a0d14-47d8-fb53-b8ff-8bc441ec364d.png">

<img width=420 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/462147d4-d001-4a77-2bac-167d6ca9af6e.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
CalendarScopes.CALENDAR_SETTINGS_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.Settings settings = calendar.settings();
    Calendar.Settings.List list = settings.list();
    
    Settings res = list.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//www.googleapis.com/calendar/v3/users/me/settings
が実行されます。

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

|メソッド|引数|説明|
|---|---|---|
|setMaxResults|Integer|レスポンスで返されるエントリの最大数<br>デフォルトは100、最大250まで指定可能|
|setPageToken|String|次のページで前のリスト要求を継続するためのトークン<br>**レスポンスのgetNextPageTokenで取得が可能**|
|setSyncToken|String|結果を取得した後に変更された内容を取得するためのトークン<br>**レスポンスのgetNextSyncTokenで取得が可能**|

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

#### Settings

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

#### Setting

|メソッド|戻り値|説明|
|---|---|---|
|id|String|[設定ID](#設定id)|
|etag|String|Eタグ|
|getKind|String|リソースの種類<br>固定文字列："calendar#setting"|
|value|String|ユーザーの設定値<br>[設定ID](#設定id)によって変わります|

#### 設定ID

|設定ID|設定メニュー1|設定メニュー2|内容|値|
|---|---|---|---|---|
|locale|言語と地域|言語|ユーザーの言語/地域|"ja"など|
|dateFieldOrder|言語と地域|日付形式|日付を表示するときの順序|"MDY"(12/31/2024)<br>"DMY"(31/12/2024)<br>"YMD"(2024/12/31)|
|format24HourTime|言語と地域|時刻の表示形式|時刻を24時間形式で表示するか|"true"(13:00)<br>"false"(午後1:00)|
|timezone|タイムゾーン|メインのタイムゾーン|ユーザーのタイムゾーンID|"Asia/Tokyo"など|
|defaultEventLength|予定の設定|デフォルトの長さ|予定を作成した際のデフォルトの長さ|正の数(分単位)|
|hideInvitations|予定の設定|カレンダーに招待状を追加|招待したユーザーが、まだ応答（返信など）していない予定を非表示にするか|"true"(招待メールから出欠確認に返答したときに追加)<br>"false"(それ以外)|
|hideInvitationsSetting|予定の設定|カレンダーに招待状を追加|招待したユーザーのカレンダー追加方法|"NONE"(すべての招待状を追加)<br>"UNKNOWN_SENDERS"(知っているユーザーから届いた場合のみ追加)<br>"UNRESPONDED"(招待メールから出欠確認に返答したときに追加)|
|autoAddHangouts|予定の設定|作成した予定に自動的に Google Meet のビデオ会議を追加する|すべての予定にハングアウトを自動的に追加するか|"true"、"false"|
|remindOnRespondedEventsOnly|通知設定|[参加] または [未定] と返信した予定の通知のみ受ける|[参加] または [未定] と返信した予定の通知のみ受けるか|"true"、"false"|
|hideWeekends|ビューの設定|週末を表示する|週末を非表示にするか|"true"、"false"|
|showDeclinedEvents|ビューの設定|辞退した予定を表示する|辞退した予定を表示するか|"true"、"false"|
|weekStart|ビューの設定|週の始まり|週の始まりを指定|"0"(日曜日)<br>"1"(月曜日)<br>"6"(土曜日)|
|useKeyboardShortcuts|キーボード ショートカット|キーボード ショートカットを有効にする|キーボード ショートカットを有効にするか|"true"、"false"|

## 2. ユーザー設定情報の取得
指定した設定IDの情報を取得します。

取得したい設定情報は、[設定ID](#設定id)を指定します。

### 2.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
CalendarScopes.CALENDAR
CalendarScopes.CALENDAR_READONLY
CalendarScopes.CALENDAR_SETTINGS_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.Settings settings = calendar.settings();
    Calendar.Settings.Get get = settings.get("設定ID");
    
    Setting res = get.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
GET:　https:\//www.googleapis.com/calendar/v3/users/me/settings/{設定ID}
が実行されます。

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

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

#### Setting

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

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