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

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

アルバムはGoogleフォトアプリのアルバムタブから確認することができます。
<img width="380" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/ff71eb04-5b88-8d7b-6be6-acc531d4ee15.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()){
        ListAlbumsRequest.Builder builder = ListAlbumsRequest.newBuilder();
        builder.setPageSize(10);
        
        ListAlbumsPagedResponse  response = client.listAlbums(builder.build());
        for (Album album : response.iterateAll()) {
            System.out.println(album);
        }
    }
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//photoslibrary.googleapis.com/v1/albums
が実行されます。

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

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

### 1.3. レスポンスの内容
#### ListAlbumsPagedResponse
|メソッド|戻り値|説明|
|---|---|---|
|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. アルバムを取得
指定したアルバムの情報を取得します。

### 2.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インスタンスを取得)
でスコープを指定してください。

### 2.2. 実行

```java
public static void main(String[] args) throws Exception{
    try(PhotosLibraryClient client = getPhotosLibraryClient()){
        Album album = client.getAlbum("アルバムID");
        System.out.println(album);
    }
}
```
#### 2.2.1. HTTPリクエスト
GET:　https:\//photoslibrary.googleapis.com/v1/albums/{アルバムID}
が実行されます。

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

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

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