[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-レスポンスの内容)|
|3||[カレンダーを更新](#3-カレンダーを更新)|
||1|[スコープ](#31-スコープ)|
||2|[実行](#32-実行)|
||3|[レスポンスの内容](#33-レスポンスの内容)|
|4||[カレンダーを削除](#4-カレンダーを削除)|
||1|[スコープ](#41-スコープ)|
||2|[実行](#42-実行)|
||3|[レスポンスの内容](#43-レスポンスの内容)|

## 1. カレンダーを作成
Googleカレンダーを作成します。
作成したカレンダーは「マイカレンダー」に追加されます。

### 1.1. スコープ
このAPIを実行するには、以下のスコープを指定してください。
```
CalendarScopes.CALENDAR
```
[⧉[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.Calendars calendars = calendar.calendars();
    
    com.google.api.services.calendar.model.Calendar content = new com.google.api.services.calendar.model.Calendar();
    content.setSummary("カレンダーのタイトル");
    Calendar.Calendars.Insert insert = calendars.insert(content);
    
    com.google.api.services.calendar.model.Calendar res = insert.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
POST:　https:\//www.googleapis.com/calendar/v3/calendars
が実行されます。

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

#### 1.2.3. リクエストボディ
Calendar(com.google.api.services.calendar.model)のsetメソッドにより、リクエストボディを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setSummary|String|【必須】カレンダーのタイトル|

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

#### Calendar
(com.google.api.services.calendar.model)

|メソッド|戻り値|説明|
|---|---|---|
|getId|String|カレンダーID|
|getEtag|String|Eタグ|
|getKind|String|リソースの種類<br>固定文字列："calendar#calendar"|
|getConferenceProperties|[ConferenceProperties](#conferenceproperties)|会議タイプ|
|getDescription|String|説明|
|getLocation|String|カレンダーの地域|
|getSummary|String|名前|
|getTimeZone|String|タイムゾーン|

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

## 2. カレンダーを上書き
Googleカレンダーの指定したカレンダーを上書きします。

[3. カレンダーを更新](#3-カレンダーを更新)と違うところは、
指定した存在するカレンダーを新しいカレンダーに置き換えます。

カレンダーIDは、
[1. カレンダーを作成(Calendar)](#calendar)のgetId()で取得した値を使います。

### 2.1. スコープ
このAPIを実行するには、以下のスコープを指定してください。
```
CalendarScopes.CALENDAR
```
[⧉[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.Calendars calendars = calendar.calendars();
    
    com.google.api.services.calendar.model.Calendar content = new com.google.api.services.calendar.model.Calendar();
    content.setSummary("カレンダーのタイトル");
    Calendar.Calendars.Update update = calendars.update("カレンダーID",content);
    
    com.google.api.services.calendar.model.Calendar res = update.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
PUT:　https:\//www.googleapis.com/calendar/v3/calendars/{カレンダーID}
が実行されます。

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

#### 2.2.3. リクエストボディ
Calendar(com.google.api.services.calendar.model)のsetメソッドにより、リクエストボディを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setSummary|String|【必須】カレンダーのタイトル|
|setDescription|String|カレンダーの説明|
|setLocation|String|カレンダーの地域|
|setTimeZone|String|タイムゾーン|

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

#### Calendar

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

## 3. カレンダーを更新
Googleカレンダーの指定したカレンダーを更新します。

[2. カレンダーを上書き](#2-カレンダーを上書き)と違うところは、
指定した存在するカレンダーを更新します。

カレンダーIDは、
[1. カレンダーを作成(Calendar)](#calendar)のgetId()で取得した値を使います。

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

### 3.2. 実行

```java
public static void main(String[] args) throws Exception{
    Calendar calendar = getCalendar();
    Calendar.Acl acl = calendar.acl();
    
    AclRule content = new AclRule();
    content.setRole("reader");
    Calendar.Acl.Patch patch = acl.patch("カレンダーID","ACLルールID",content);
    
    AclRule res = patch.execute();
    System.out.println(res);
}
```
#### 3.2.1. HTTPリクエスト
PATCH:　https:\//www.googleapis.com/calendar/v3/calendars/{カレンダーID}
が実行されます。

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

#### 3.2.3. リクエストボディ
Calendar(com.google.api.services.calendar.model)のsetメソッドにより、リクエストボディを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setSummary|String|カレンダーのタイトル|
|setDescription|String|カレンダーの説明|
|setLocation|String|カレンダーの地域|
|setTimeZone|String|タイムゾーン|

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

#### Calendar

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

## 4. カレンダーを削除
Googleカレンダーの指定したカレンダーを削除します。

カレンダーIDは、
[1. カレンダーを作成(Calendar)](#calendar)のgetId()で取得した値を使います。

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

### 4.2. 実行

```java
public static void main(String[] args) throws Exception{
    Calendar calendar = getCalendar();
    
    Calendar.Calendars calendars = calendar.calendars();
    Calendar.Calendars.Delete clear = calendars.delete("カレンダーID");
    
    clear.execute();
}
```
#### 4.2.1. HTTPリクエスト
DELETE:　https:\//www.googleapis.com/calendar/v3/calendars/{カレンダーID}
が実行されます。

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

#### 4.2.3. リクエストボディ
リクエスボディはありません。

### 4.3. レスポンスの内容
レスポンスはありません。
削除に失敗した場合、例外が発生します。

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