[Google Forms API(V1)] JavaでGoogleフォームの回答を取得する

Google Forms API V1（Java）を使用して、
Googleフォームの回答を取得する方法
についてご紹介します。

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

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

## 1. 回答一覧を取得
指定したGoogleフォームの回答一覧を取得します。

### 1.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。

```
FormsScopes.DRIVE
FormsScopes.DRIVE_FILE
FormsScopes.FORMS_RESPONSES_READONLY
```
[⧉[Google Forms API(V1)] JavaでForms APIを使う(2.2 Gmailインスタンスを取得)](https://qiita.com/doran/items/6a25c15309f442c4d679#22-formsインスタンスを取得)
でスコープを指定してください。

### 1.2. 実行
取得したいGoogleフォームのフォームID(ファイルID)を指定します。

レスポンスの[getNextPageToken](#filelist)がNULLではない場合、
全てのリストが取得できていません。
[クエリパラメータのsetPageToken](#122-クエリパラメータ)に取得できた値を設定し、
再度APIを実行します。
```java
public static void main(String[] args) throws Exception{
    Forms forms = getForms();
    Forms.FormsOperations op = forms.forms();
    Forms.FormsOperations.Responses responses = op.responses();
    Forms.FormsOperations.Responses.List list = responses.list("フォームID");

//レスポンスのgetNextPageTokenがNULLではない場合
//list.setPageToken("レスポンスのgetNextPageToken");

    ListFormResponsesResponse res = list.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//forms.googleapis.com/v1/forms/{フォームID}/responses
が実行されます。

#### 1.2.2. クエリパラメータ
Forms.FormsOperations.Responses.Listのsetメソッドにより、クエリパラメータを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setFilter|String|取得したい回答をクエリで指定<br>現在は「timestamp」のみサポート|
|setPageSize|Integer|取得するレスポンスの最大数（デフォルトは5000）|
|setPageToken|String|次のページで前のリスト要求を継続するためのトークン<br>**レスポンスのgetNextPageTokenで取得が可能**|

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

#### ListFormResponsesResponse
|メソッド|戻り値|説明|
|---|---|---|
|getResponses|List\<[FormResponse](#formresponse)\>|フォームのレスポンス|
|getNextPageToken|String|次のページのページトークン<br>リストの最後の場合はNULL|

#### FormResponse
|メソッド|戻り値|説明|
|---|---|---|
|getFormId|String|フォームID|
|getResponseId|String|レスポンスID|
|getCreateTime|String|レスポンスが初めて送信されたときのタイムスタンプ<br>RFC3339 UTC「Zulu」形式|
|getLastSubmittedTime|String|回答が送信された直近のタイムスタンプ<br>RFC3339 UTC「Zulu」形式|
|getRespondentEmail|String|回答者のメールアドレス|
|getAnswers|Map\<String,[Answer](#answer)\>|質問に対する実際の回答<br>キーはquestionId|
|getTotalScore|Double|回答が送信された際に回答者が獲得した合計点数|

#### Answer
|メソッド|戻り値|説明|
|---|---|---|
|getQuestionId|String|質問ID|
|getGrade|[Grade](#grade)|フォームがクイズの場合の回答の成績|
|getTextAnswers|[TextAnswers](#textanswers)|テキストとしての回答|
|getFileUploadAnswers|[FileUploadAnswers](#fileuploadanswers)|ファイル アップロードに関する回答|

#### Grade
|メソッド|戻り値|説明|
|---|---|---|
|getScore|Double|回答に対して与えられたスコア|
|getCorrect|Boolean|質問に正解したか|
|getFeedback|[Feedback](#Feedback)|回答に対する追加のフィードバック|

#### Feedback
[⧉[Google Forms API(V1)] GoogleフォームとFormクラス(Feedback)](https://qiita.com/doran/items/4eeae5ce3fe92bd59d75#feedback)
を参照ください。

#### TextAnswers
|メソッド|戻り値|説明|
|---|---|---|
|getAnswers|List\<[TextAnswer](#textanswer)\>|質問への回答|

#### TextAnswer
|メソッド|戻り値|説明|
|---|---|---|
|getValue|String|回答の値<br>[⧉[Google Forms API(V1)] GoogleフォームとFormクラス(正解の値)](https://qiita.com/doran/items/4eeae5ce3fe92bd59d75#正解の値)<br>を参照ください。|

#### FileUploadAnswers
|メソッド|戻り値|説明|
|---|---|---|
|getAnswers|List\<[FileUploadAnswer](#fileuploadanswer)\>|質問で送信されたすべてのファイル|

#### FileUploadAnswer
|メソッド|戻り値|説明|
|---|---|---|
|getFileId|String|GoogleドライブのファイルID|
|getFileName|String|アップロード時にGoogleドライブに保存されるファイル名|
|getMimeType|String|アップロード時にGoogleドライブに保存されるファイルのMIMEタイプ|

## 2. 回答を取得
指定したGoogleフォームの指定した回答を取得します。

### 2.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。

```
FormsScopes.DRIVE
FormsScopes.DRIVE_FILE
FormsScopes.FORMS_RESPONSES_READONLY
```
[⧉[Google Forms API(V1)] JavaでForms APIを使う(2.2 Gmailインスタンスを取得)](https://qiita.com/doran/items/6a25c15309f442c4d679#22-formsインスタンスを取得)
でスコープを指定してください。

### 2.2. 実行
取得したいGoogleフォームのフォームID(ファイルID)とレスポンスIDを指定します。

レスポンスIDは、[FormResponse](#formresponse)のgetResponseId()で取得できます。
```java
public static void main(String[] args) throws Exception{
    Forms forms = getForms();
    Forms.FormsOperations op = forms.forms();
    Forms.FormsOperations.Responses responses = op.responses();
    Forms.FormsOperations.Responses.Get get = responses.get("フォームID","レスポンスID");
    
    FormResponse res = get.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
GET:　https:\//forms.googleapis.com/v1/forms/{フォームID}/responses/{レスポンスID}
が実行されます。

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

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

#### FormResponse

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

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