[Google Drive API v3] Javaで共有ドライブの情報を取得する

Google Drive API v3（Java）を使用して、
共有ドライブの情報を取得する方法
についてご紹介します。

:::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_READONLY

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

setFieldsで取得したいフィールド（[DriveList](#drivelist)）を指定できます。
指定しない場合は、必要最小限のレスポンスしか返ってきません。
ここでは「*」(全て取得)を指定しています。

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

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

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

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

|フィールド|メソッド|引数|説明|
|---|---|---|---|
|pageSize|setPageSize|Integer|ページごとに返されるファイルの最大数<br>指定なしだと100件、指定しても最大 100件|
|pageToken|setPageToken|String|次のページで前のリスト要求を継続するためのトークン<br>**レスポンスのgetNextPageTokenで取得が可能**|
|q|setQ|String|[共有ドライブを検索するためのクエリ文字列](#共有ドライブを検索するためのクエリ文字列)|
|useDomainAdminAccess|setUseDomainAdminAccess|Boolean|ドメイン管理者としてリクエストを発行するか|

#### 共有ドライブを検索するためのクエリ文字列
表の「文字」がoの場合は、シングルクォート(')で囲む必要があります。

表の「管理者権限」が必要の場合は、
クエリパラメータのsetUseDomainAdminAccessをtrueにする必要があります。

例えば、名前がABCで、メンバーの数が3人以上を検索する場合
name = 'ABC' and memberCount>=3
と指定します。

|用語|使用可能な演算子|内容|文字|管理者権限|
|---|---|---|---|---|
|createdTime|<=, <, =, !=, >, >=|共有ドライブが作成された日付|o|必要|
|hidden|=, !=|共有ドライブを非表示にするかどうか(true or false)|x||
|memberCount|	<=, <, =, !=, >, >=|共有ドライブのメンバーであるユーザーとグループの数|x|必要|
|name|	contains, =, !=|共有ドライブの名前|o||
|organizerCount|<=, <, =, !=, >, >=|共有ドライブの主催者であるユーザーとグループの数|x|必要|
|orgUnitId|=, !=|共有ドライブの組織単位ID|o|必要|

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

#### DriveList

|メソッド|戻り値|説明|
|---|---|---|
|getNextPageToken|String|次のページのページトークン<br>リストの最後の場合はNULL|
|getKind|String|リソースの種類<br>固定文字列：\"drive#fileList\"|
|getDrives|List\<[Drive](#drive)\>|共有ドライブのリスト|

## 2. 共有ドライブの情報を取得

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

DriveScopes.DRIVE
DriveScopes.DRIVE_READONLY

[⧉[Google Drive API v3] JavaでDrive APIを使う(2.2 Driveインスタンスを取得)](https://qiita.com/doran/items/15b2c59adb410ddeeb8a#22-driveインスタンスを取得)
でスコープを指定してください。
### 2.2. 実行
情報を取得した共有ドライブIDを指定します。

setFieldsで取得したいフィールド（[Drive](#drive)）を指定できます。
指定しない場合は、必要最小限のレスポンスしか返ってきません。
ここでは「*」(全て取得)を指定しています。

```
public static void main(String[] args) throws Exception{
    Drive drive = getDrive();
    Drive.Drives drives = drive.drives();
	    
    Drive.Drives.Get get = drives.get("共有ドライブID");
    get.setFields("*");
    
    com.google.api.services.drive.model.Drive res = get.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
GET：　https:\//www.googleapis.com/drive/v3/drives/{共有ドライブID}
が実行されます。

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

|メソッド|引数|説明|
|---|---|---|
|setUseDomainAdminAccess|Boolean|ドメイン管理者としてリクエストを発行するか|

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

#### Drive
「com.google.api.services.drive.model.Drive」を示します。

|フィールド|メソッド|戻り値|説明|
|---|---|---|---|
|id|getId|String|共有ドライブID|
|name|getName|String|共有ドライブの名前|
|colorRgb|getColorRgb|String|共有ドライブの色|
|kind|getKind|String|リソースの種類<br>固定文字列："drive#drive"|
|backgroundImageLink|getBackgroundImageLink|String|共有ドライブの背景イメージへの短期間のリンク|
|capabilities|getCapabilities|[Capabilities](#capabilities)|現在のユーザーが共有ドライブ上で持つ機能|
|themeId|getThemeId|String|背景画像と色が設定されるテーマID|
|createdTime|getCreatedTime|String|共有ドライブが作成された時刻|
|hidden|getHidden|Boolean|共有ドライブをデフォルトのビューで非表示にするか|
|restrictions|getRestrictions|[Restrictions](#restrictions)|共有ドライブまたは共有ドライブ内のアイテムに適用される一連の制限|
|orgUnitId|getOrgUnitId|String|共有ドライブの組織単位<br>**クエリパラメータのsetUseDomainAdminAccessがtrueの場合のみ**|

#### Capabilities

|メソッド|戻り値|説明|
|---|---|---|
|getCanAddChildren|Boolean|現在のユーザーが共有ドライブ内のフォルダーに子を追加できるか|
|getCanComment|Boolean|現在のユーザーが共有ドライブ内のファイルにコメントできるか|
|getCanCopy|Boolean|現在のユーザーが共有ドライブ内のファイルをコピーできるか|
|getCanDeleteDrive|Boolean|現在のユーザーが共有ドライブを削除できるか|
|getCanDownload|Boolean|現在のユーザーが共有ドライブにファイルをダウンロードできるか|
|getCanEdit|Boolean|現在のユーザーが共有ドライブ内のファイルを編集できるか|
|getCanListChildren|Boolean|現在のユーザーが共有ドライブ内のフォルダーの子の一覧を表示できるか|
|getCanManageMembers|Boolean|現在のユーザーが共有ドライブにメンバーを追加、削除、または役割を変更できるか|
|getCanReadRevisions|Boolean|現在のユーザーが共有ドライブ内のファイルのリビジョン リソースを読み取ることができるか|
|getCanRename|Boolean|現在のユーザーが共有ドライブ内のファイルまたはフォルダーの名前を変更できるか|
|getCanRenameDrive|Boolean|現在のユーザーが共有ドライブの名前を変更できるか|
|getCanChangeDriveBackground|Boolean|現在のユーザーが共有ドライブの背景を変更できるか|
|getCanShare|Boolean|現在のユーザーが共有ドライブ内のファイルまたはフォルダーを共有できるか|
|getCanChangeCopyRequiresWriterPermissionRestriction|Boolean|現在のユーザーがcopyRequiresWriterPermission共有ドライブの制限を変更できるか
|getCanChangeDomainUsersOnlyRestriction|Boolean|現在のユーザーがdomainUsersOnly共有ドライブの制限を変更できるか|
|getCanChangeDriveMembersOnlyRestriction|Boolean|現在のユーザーがdriveMembersOnly共有ドライブの制限を変更できるか|
|getCanChangeSharingFoldersRequiresOrganizerPermissionRestriction|Boolean|現在のユーザーがsharingFoldersRequiresOrganizerPermission共有ドライブの制限を変更できるか|
|getCanResetDriveRestrictions|Boolean|現在のユーザーが共有ドライブの制限をデフォルトにリセットできるか|
|getCanDeleteChildren|Boolean|現在のユーザーが共有ドライブ内のフォルダーから子を削除できるか|
|getCanTrashChildren|Boolean|現在のユーザーが共有ドライブ内のフォルダーから子をゴミ箱に入れることができるか|

#### Restrictions

|メソッド|戻り値|説明|
|---|---|---|
|getCopyRequiresWriterPermission|Boolean|共有ドライブ内のファイルをコピー、印刷、またはダウンロードするオプションを、読者とコメント投稿者に対して無効にするか|
|getDomainUsersOnly|Boolean|共有ドライブおよび共有ドライブ内のアイテムへのアクセスを、共有ドライブが属するドメインのユーザーに制限するかどうか|
|getDriveMembersOnly|Boolean|共有ドライブ内のアイテムへのアクセスをそのメンバーに制限するか|
|getAdminManagedRestrictions|Boolean|制限を変更するには、共有ドライブに対する管理者権限が必要か|
|getSharingFoldersRequiresOrganizerPermission|Boolean|オーガナイザーの役割を持つユーザーのみがフォルダーを共有できるか|

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