[Google Photos Library API] JavaでGoogleフォトの共有アルバムに参加・退出する

Google Photos Library APIを使用して、
Googleフォトの共有アルバムに参加・退出する方法
についてご紹介します。

共有アルバムへの参加・退出は、共有済みのアルバムで
同じGCP認証、かつPhotos Library APIで作成したアルバムのみになります。

アルバムの作成方法は
[⧉[Google Photos Library API] JavaでGoogleフォトのアルバムを作成・更新する](https://qiita.com/doran/items/b5ecc7005f19fbf0a35a)
を参照ください。

作成したアルバムの共有方法は
[⧉[Google Photos Library API] JavaでGoogleフォトのアルバムを共有・共有解除する](https://qiita.com/doran/items/b15fe890e79d9b0d9d18)
を参照ください。

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

|No||目次|
|---|---|---|
|1||[参加する](#1-参加する)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|
|2||[退出する](#2-退出する)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](#23-レスポンスの内容)|

## 1. 参加する
指定した共有アルバムに参加します。

参加できるアルバムは、共有済みのアルバムで同じGCP認証、
かつPhotos Library APIで作成したアルバムのみになります。

アルバムの作成方法は
[⧉[Google Photos Library API] JavaでGoogleフォトのアルバムを作成・更新する](https://qiita.com/doran/items/b5ecc7005f19fbf0a35a)
を参照ください。

作成したアルバムの共有方法は
[⧉[Google Photos Library API] JavaでGoogleフォトのアルバムを共有・共有解除する](https://qiita.com/doran/items/b15fe890e79d9b0d9d18)
を参照ください。

指定する共有アルバムのトークンの取得は、
[⧉[Google Photos Library API] JavaでGoogleフォトの共有アルバムを取得する](https://qiita.com/doran/items/87a8eb4b7b808ab07a1e)
を参照ください。

### 1.1. スコープ
このAPIを実行するには、以下のスコープを指定してください。
```
https://www.googleapis.com/auth/photoslibrary.sharing
```
[⧉[Google Photos Library API(V1)] JavaでPhotos Library APIを使う(2.2. PhotosLibraryClientインスタンスを取得)](https://qiita.com/doran/items/8695e6007765ab5b382c#22-photoslibraryclientインスタンスを取得)
でスコープを指定してください。

### 1.2. 実行

```java
public static void main(String[] args) throws Exception{
	    try(PhotosLibraryClient client = getPhotosLibraryClient()){
	    	JoinSharedAlbumResponse response = client.joinSharedAlbum("共有アルバムのトークン");
      
	    	System.out.println(response.getAlbum());
	    }
}
```
#### 1.2.1. HTTPリクエスト
POST:　https:\//photoslibrary.googleapis.com/v1/sharedAlbums:join
が実行されます。

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

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

### 1.3. レスポンスの内容
#### JoinSharedAlbumResponse
|メソッド|戻り値|説明|
|---|---|---|
|getAlbum|[Album](#album)|ユーザーが参加している共有アルバム|

#### Album
|メソッド|戻り値|説明|
|---|---|---|
|getId|String|アルバムID|
|getTitle|String|アルバムの名前|
|getProductUrl|String|アルバムのGoogleフォトURL|
|getIsWriteable|Boolean|アルバム内にメディアアイテムを作成できるか|
|getShareInfo|[ShareInfo](#shareinfo)|共有アルバムに関する情報|
|getMediaItemsCount|Long|アルバム内のメディアアイテム数|
|getCoverPhotoBaseUrl|String|カバー写真のバイトへのURL|
|getCoverPhotoMediaItemId|String|カバー写真に関連付けられているメディアアイテムID|

#### ShareInfo
|メソッド|戻り値|説明|
|---|---|---|
|getSharedAlbumOptions|[SharedAlbumOptions](#sharedalbumoptions)|メディアアイテムの追加やコメントを許可するか|
|getShareableUrl|String|共有のGoogleフォトアルバムへのリンク|
|getShareToken|String|共有アルバムへの参加、共有アルバムからの退出、または詳細の取得に使用するトークン|
|getIsJoined|Boolean|ユーザーがアルバムに参加しているか|
|getIsOwned|Boolean|ユーザーがアルバムを所有しているか|
|getIsJoinable|Boolean|ユーザーがアルバムに参加できるか|

#### SharedAlbumOptions
|メソッド|戻り値|説明|
|---|---|---|
|getIsCollaborative|Boolean|共有アルバムで共同編集者にメディアアイテムの追加を許可するか|
|getIsCommentable|Boolean|共有アルバムで共同編集者がアルバムにコメントを追加できるようにするか|

## 2. 退出する
参加済みの共有アルバムから退出します。

共有アルバムのオーナーである場合は退出できません。

指定する共有アルバムのトークンの取得は、
[⧉[Google Photos Library API] JavaでGoogleフォトの共有アルバムを取得する](https://qiita.com/doran/items/87a8eb4b7b808ab07a1e)
を参照ください。

### 2.1. スコープ
このAPIを実行するには、以下のスコープを指定してください。
```
https://www.googleapis.com/auth/photoslibrary.sharing
```
[⧉[Google Photos Library API(V1)] JavaでPhotos Library APIを使う(2.2. PhotosLibraryClientインスタンスを取得)](https://qiita.com/doran/items/8695e6007765ab5b382c#22-photoslibraryclientインスタンスを取得)
でスコープを指定してください。

### 2.2. 実行

```java
public static void main(String[] args) throws Exception{
    try(PhotosLibraryClient client = getPhotosLibraryClient()){
        client.leaveSharedAlbum("共有アルバムのトークン");
    }
}
```
#### 2.2.1. HTTPリクエスト
POST:　https:\//photoslibrary.googleapis.com/v1/sharedAlbums:leave
が実行されます。

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

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

### 2.3. レスポンスの内容
成功した場合は何も返しません。
失敗した場合は例外を出力します。

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