[Google Photos Library API] JavaでGoogleフォトの共有アルバムを取得する

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

共有アルバムはGoogleフォトアプリの共有タブから確認することができます。
<img width="280" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/5eed5791-85c3-70da-2244-d8a3366d0ea6.png">

:::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. 共有アルバム一覧を取得
共有アルバム一覧を取得します。

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
https://www.googleapis.com/auth/photoslibrary
https://www.googleapis.com/auth/photoslibrary.readonly
https://www.googleapis.com/auth/photoslibrary.readonly.appcreateddata
```
[⧉[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()){
        ListSharedAlbumsRequest.Builder builder = ListSharedAlbumsRequest.newBuilder();
        builder.setPageSize(10);
        ListSharedAlbumsPagedResponse response = client.listSharedAlbums(builder.build());
    
        for (Album album : response.iterateAll()) {
            System.out.println(album);
        }
    }
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//photoslibrary.googleapis.com/v1/sharedAlbums
が実行されます。

#### 1.2.2. クエリパラメータ
ListSharedAlbumsRequest.Builderのsetメソッドにより、クエリパラメータを追加できます。
build()メソッドでListSharedAlbumsRequestインスタンスを取得し、
listSharedAlbums()に渡します。

|メソッド|引数|説明|
|---|---|---|
|setPageSize|Integer|レスポンスで返す共有アルバムの最大数<br>デフォルトは20、最大は50|
|setPageToken|String|結果の次のページを取得するための連続トークン|
|setExcludeNonAppCreatedData|Boolean|このアプリ以外で作成されたメディアアイテムを除外するか|

### 1.3. レスポンスの内容
#### ListSharedAlbumsPagedResponse
|メソッド|戻り値|説明|
|---|---|---|
|iterateAll|Iterable\<[Album](#album)\>|アルバムリスト|
|getNextPageToken|String|アルバムの次のセットを取得するためのトークン|

#### 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. 共有アルバムを取得
指定した共有アルバムの情報を取得します。

アルバムの共有トークンは
[1.3. レスポンスの内容(ShareInfo)のgetShareToken()](#shareinfo)
で取得できます。

### 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()){
        Album album = client.getSharedAlbum("アルバムの共有トークン");
        System.out.println(album);
    }
}
```
#### 2.2.1. HTTPリクエスト
GET:　https:\//photoslibrary.googleapis.com/v1/sharedAlbums/{shareToken}
が実行されます。

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

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

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