[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_APPDATA
DriveScopes.DRIVE_FILE
DriveScopes.DRIVE_METADATA
DriveScopes.DRIVE_METADATA_READONLY
DriveScopes.DRIVE_PHOTOS_READONLY
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で取得したいフィールド（[RevisionList](#revisionlist)）を指定できます。
指定しない場合は、必要最小限のレスポンスしか返ってきません。
ここでは「*」(全て取得)を指定しています。

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

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

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

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

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

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

#### RevisionList

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

## 2. リビジョンを取得

### 2.1. スコープ
このAPIを実行するには、以下のいずれかのスコープを指定してください。
```
DriveScopes.DRIVE
DriveScopes.DRIVE_APPDATA
DriveScopes.DRIVE_FILE
DriveScopes.DRIVE_METADATA
DriveScopes.DRIVE_METADATA_READONLY
DriveScopes.DRIVE_PHOTOS_READONLY
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で取得したいフィールド（[Revision](#revision)）を指定できます。
指定しない場合は、必要最小限のレスポンスしか返ってきません。
ここでは「*」(全て取得)を指定しています。

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

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

|メソッド|引数|説明|
|---|---|---|
|setAcknowledgeAbuse|Boolean|ユーザーが既知のマルウェアまたはその他の不正なファイルをダウンロードするリスクを認識しているか|

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

#### Revision

|フィールド|メソッド|戻り値|説明|
|---|---|---|---|
|id|getId|String|リビジョンID|
|mimeType|getMimeType|String|リビジョンのMIMEタイプ|
|kind|getKind|String|リソースの種類<br>固定文字列："drive#revision"|
|published|getPublished|Boolean|このリビジョンが公開されるか|
|exportLinks|getExportLinks|Map<String,String>|ファイルを特定の形式にエクスポートするためのリンク|
|keepForever|getKeepForever|Boolean|このリビジョンを永久に保持するか<br>**バイナリコンテンツのみ**|
|md5Checksum|getMd5Checksum|String|リビジョンのコンテンツのMD5チェックサム<br>**バイナリコンテンツのみ**|
|modifiedTime|getModifiedTime|String|リビジョンが最後に変更された時刻|
|publishAuto|getPublishAuto|Boolean|以降のリビジョンが自動的に再公開されるか<br>**ドキュメントファイルのみ**|
|publishedOutsideDomain|getPublishedOutsideDomain|Boolean|このリビジョンがドメイン外で公開されるか<br>**ドキュメントファイルのみ**|
|publishedLink|getPublishedLink|String|公開されたリビジョンへのリンク<br>**Googleサイトのファイルのみ**|
|size|getSize|String|リビジョンのコンテンツのサイズ (バイト単位)<br>**バイナリコンテンツのみ**|
|originalFilename|getOriginalFilename|String|このリビジョンの作成に使用された元のファイル名<br>**バイナリコンテンツのみ**|
|lastModifyingUser|getLastModifyingUser|[User](#user)|このリビジョンを最後に変更したユーザー|

#### User

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

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