[Google Drive API v3] Javaでファイルのコメントを取得する

Google Drive API v3（Java）を使用して、
Driveに置かれているファイルのコメントを取得する方法
についてご紹介します。

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

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

## 1. コメントリストを取得

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

DriveScopes.DRIVE
DriveScopes.DRIVE_FILE
DriveScopes.DRIVE_READONLY

[⧉[Google Drive API v3] JavaでDrive APIを使う(2.2 Driveインスタンスを取得)](https://qiita.com/doran/items/15b2c59adb410ddeeb8a#22-driveインスタンスを取得)
でスコープを指定してください。

### 1.2. 実行
コメントを取得したいファイルのファイルIDを指定します。

setFieldsで取得したいフィールド（[CommentList](#commentlist)）を指定します。
指定しないとエラーになります。
ここでは「*」(全て取得)を指定しています。

[レスポンスのgetNextPageToken](#commentlist)がNULLではない場合、
全てのリストが取得できていません。
[クエリパラメータのsetPageToken](#122-クエリパラメータ)に取得できた値を設定し、
再度APIを実行します。
```
public static void main(String[] args) throws Exception{
    Drive drive = getDrive();
    Drive.Comments comments = drive.comments();
    
    Drive.Comments.List list = comments.list("ファイルID");
    list.setFields("*");
    
//レスポンスのgetNextPageTokenがNULLではない場合
//list.setPageToken("レスポンスのgetNextPageToken");

    CommentList res = list.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//www.googleapis.com/drive/v3/files/{ファイルID}/comments　
が実行されます。

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

|メソッド|引数|説明|
|---|---|---|
|setIncludeDeleted|Boolean|削除されたコメントを含めるか|
|setPageSize|Integer|ページごとに返されるコメントの最大数|
|setPageToken|String|次のページで前のリスト要求を継続するためのトークン<br>**レスポンスのgetNextPageTokenで取得が可能**|
|setStartModifiedTime|String|レスポンスのgetModifiedTimeの最小値|

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

#### CommentList

|フィールド|メソッド|戻り値|説明|
|---|---|---|---|
|kind|getKind|String|リソースの種類<br>固定文字列："drive#commentList"|
|comments|getComments|List\<[Comment](#comment)\>|コメントのリスト|
|nextPageToken|getNextPageToken|String|次のページのページトークン<br>リストの最後の場合はNULL|

## 2. コメントを取得

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

DriveScopes.DRIVE
DriveScopes.DRIVE_FILE
DriveScopes.DRIVE_READONLY

[⧉[Google Drive API v3] JavaでDrive APIを使う(2.2 Driveインスタンスを取得)](https://qiita.com/doran/items/15b2c59adb410ddeeb8a#22-driveインスタンスを取得)
でスコープを指定してください。

### 2.2. 実行
取得したいコメントがあるファイルのファイルIDとコメントIDを指定します。

setFieldsで取得したいフィールド（[Comment](#comment)）を指定します。
指定しないとエラーになります。
ここでは「*」(全て取得)を指定しています。

```
public static void main(String[] args) throws Exception{
    Drive drive = getDrive();
    Drive.Comments comments = drive.comments();
    
    Drive.Comments.Get get = comments.get("ファイルID","コメントID");
    get.setFields("*");
    
    Comment res = get.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
GET：　https:\//www.googleapis.com/drive/v3/files/{ファイルID}/comments/{コメントID}
が実行されます。

#### 2.2.2. クエリパラメータ
Drive.Comments.Getのsetメソッドにより、クエリパラメータを追加できます。

|メソッド|引数|説明|
|---|---|---|
|setIncludeDeleted|Boolean|削除されたコメントを返すか|

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

#### Comment

|フィールド|メソッド|戻り値|説明|
|---|---|---|---|
|id|getId|String|コメントID|
|kind|getKind|String|リソースの種類<br>固定文字列："drive#comment"|
|createdTime|getCreatedTime|String|コメントが作成された時刻|
|modifiedTime|getModifiedTime|String|コメントまたはその返信が最後に変更された時刻|
|resolved|getResolved|Boolean|コメントがいずれかの返信によって解決されたか|
|anchor|getAnchor|String|JSON文字列として表されるドキュメントの領域|
|replies|getReplies|List\<[Reply](#reply)\>|コメントに対する返信の完全なリスト|
|author|getAuthor|[User](#user)|コメントの作成者|
|deleted|getDeleted|Boolean|コメントが削除されているか|
|htmlContent|getHtmlContent|String|HTML形式のコメントの内容|
|content|getContent|String|コメントのプレーンテキストの内容|
|quotedFileContent|getQuotedFileContent|[Comment.QuotedFileContent](#commentquotedfilecontent)|コメントが参照するファイルのコンテンツ|

#### Reply

|メソッド|戻り値|説明|
|---|---|---|
|getId|String|返信(リプライ)ID|
|getKind|String|リソースの種類<br>固定文字列："drive#reply"|
|getCreatedTime|String|応答が作成された時刻|
|getModifiedTime|String|応答が最後に変更された時刻|
|getAction|String|返信が親コメントに対して実行したアクション<br>resolve、reopen|
|getAuthor|[User](#user)|返信の作成者|
|getDeleted|Boolean|返信が削除されたか|
|getHtmlContent|String|HTML形式での返信の内容|
|getContent|String|返信のプレーンテキストの内容|

#### User

|メソッド|戻り値|説明|
|---|---|---|
|getDisplayName|String|表示名|
|getEmailAddress|String|ユーザーの電子メールアドレス|
|getKind|String|リソースの種類<br>固定文字列：\"drive#user\"|
|getMe|Boolean|このユーザーが要求ユーザーであるか|
|getPermissionId|String|権限リソースに表示されるユーザーID|
|getPhotoLink|String|利用可能な場合、ユーザーのプロフィール写真へのリンク|

#### Comment.QuotedFileContent

|メソッド|戻り値|説明|
|---|---|---|
|getMimeType|String|引用されたコンテンツのMIMEタイプ|
|getValue|String|引用した内容|
<br>
<br>
おしまい。。