[Google Cloud Text-to-Speech API(V1)] Javaで長時間実行オペレーションを取得する

Cloud Text-to-Speech API V1(Java)を使用して、
長時間実行オペレーションを取得する方法についてご紹介します。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Google Cloud Text-to-Speech API(V1)] JavaでText-to-Speech APIを使ってみる](https://qiita.com/doran/items/9edbd7d4ed11c5c4ec5f)
を参照ください。
:::

|No||目次|
|---|---|---|
|1||[オペレーション一覧を取得](#1-オペレーション一覧を取得)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|
|2||[オペレーションを取得](#2-オペレーションを取得)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](#23-レスポンスの内容)|

## 1. オペレーション一覧を取得
長時間実行オペレーション一覧を取得します。

### 1.1. スコープ
OAuth2.0でこのAPIを実行するには、以下のスコープを指定してください。
サービスアカウントで実行する場合はスコープの指定は不要です。
```
https://www.googleapis.com/auth/cloud-platform
```

### 1.2. 実行

```java
public static void main(String[] args) throws Exception{
    try(TextToSpeechLongAudioSynthesizeClient client = getTextToSpeechLongAudioSynthesizeClient();
        OperationsClient op = client.getOperationsClient()){
        
        ListOperationsRequest.Builder builder = ListOperationsRequest.newBuilder();
        builder.setName(String.format(
                    "projects/%s/locations/%s", 
                    "プロジェクトID","ロケーションID"));
        
        OperationsClient.ListOperationsPagedResponse response = op.listOperations(builder.build());
        for(Operation o : response.iterateAll()) {
            System.out.println(o);
        }
        System.out.println(response.getNextPageToken());
    }
}
```

#### 1.2.1. HTTPリクエスト
GET:　https:\//texttospeech.googleapis.com/v1/projects/{プロジェクトID}/locations/{ロケーションID}/operations
が実行されます。

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

|メソッド|引数|説明|
|---|---|---|
|setName|String|【必須】リソース名<br>形式："projects/{プロジェクトID}/locations/{ロケーションID}"|
|steFilter|String|リストフィルター|
|setPageSize|int|リストのページサイズ|
|setPageToken|String|ページトークン|

### 1.3. レスポンスの内容
#### OperationsClient.ListOperationsPagedResponse
|メソッド|戻り値|説明|
|---|---|---|
|iterateAll|Iterable\<[Operation](#operation)\>|操作のリスト|
|getNextPageToken|String|次ページのトークン|

#### Operation
|メソッド|戻り値|説明|
|---|---|---|
|getName|String|オペレーション名<br>形式："projects/{プロジェクト　ID}/locations/{ロケーションID}/operations/{オペレーションID}"|
|getMetadata|Any|操作に関連付けられたサービス固有のメタデータ|
|getDone|boolean|操作が進行中か|
|getError|[Status](#status)|失敗またはキャンセルされた場合の操作のエラー結果|
|getResponse|Any|操作の正常な正常な応答|

#### Status
|メソッド|戻り値|説明|
|---|---|---|
|getCode|int|ステータスコード|
|getMessage|String|開発者向けのエラーメッセージ|
|getDetailsList|List\<Any\>|エラーの詳細を伝えるメッセージのリスト|

## 2. オペレーションを取得
長時間実行オペレーションを取得します。

### 2.1. スコープ
OAuth2.0でこのAPIを実行するには、以下のスコープを指定してください。
サービスアカウントで実行する場合はスコープの指定は不要です。
```
https://www.googleapis.com/auth/cloud-platform
```

### 2.2. 実行
オペレーション名は、[OperationのgetName()](#operation)で取得できる値を指定します。

```java
public static void main(String[] args) throws Exception{
    try(TextToSpeechLongAudioSynthesizeClient client = getTextToSpeechLongAudioSynthesizeClient();
        OperationsClient op = client.getOperationsClient()){
    
        Operation response = op.getOperation("オペレーション名");
        System.out.println(response);
    }
}
```

#### 2.2.1. HTTPリクエスト
GET:　https:\//texttospeech.googleapis.com/v1/projects/{プロジェクト　ID}/locations/{ロケーションID}/operations/{オペレーションID}
が実行されます。

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

### 2.3. レスポンスの内容
#### Operation
[1.2. レスポンスの内容(Operation)](#operation)と同じです。

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