[Google Drive API v3] JavaでDriveにインストールされているアプリの情報を取得する

Google Drive API v3（Java）を使用して、
Driveにインストールされているアプリの情報を取得する方法
についてご紹介します。
アプリとは、「Google スライド」、「Google 図形描画」、「Google フォーム」、
「Google Apps Script」、「Google スプレッドシート」などのことを指します。

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

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

### 1.2. 実行
APIを実行します。

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

アプリの名前などを日本語で取得したい場合は、
Drive.Apps.ListのsetLanguageCodeで言語を指定します。

例えば、日本語を指定した場合、取得できるアプリの名前は、
「Google Slides」 -> 「Google スライド」 となります。

```
public static void main(String[] args) throws Exception{
    Drive drive = getDrive();
    Drive.Apps apps = drive.apps();
    
    Drive.Apps.List list = apps.list();
    list.setFields(*);
    //アプリの名前等を日本語で取得したい場合
    //list.setLanguageCode("ja");
    
    AppList res = list.execute();
    System.out.println(res);
}
```
#### 1.2.1. HTTPリクエスト
GET:　https:\//www.googleapis.com/drive/v3/apps
が実行されます。

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

|メソッド|引数|説明|
|---|---|---|
|setAppFilterExtensions|String|返される結果を制限するファイル拡張子のカンマ区切りのリスト|
|setAppFilterMimeTypes|String|返される結果を制限するMIMEタイプのカンマ区切りのリスト|
|languageCode|String|言語コード|

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

|フィールド|メソッド|戻り値|説明|
|---|---|---|---|
|defaultAppIds|getDefaultAppIds|List\<String\>|ユーザーがデフォルトで使用するように指定したアプリIDのリスト|
|kind|getKind|String|リソースの種類<br>固定文字列："drive#appList"
|selfLink|getSelfLink|String|このリストへのリンク|
|items|getItems|List\<[App](#app)\>|アプリのリスト|

## 2. アプリの情報を取得

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

DriveScopes.DRIVE
DriveScopes.DRIVE_APPDATA
DriveScopes.DRIVE_READONLY
DriveScopes.DRIVE_FILE
DriveScopes.DRIVE_METADATA
DriveScopes.DRIVE_METADATA_READONLY
DriveScopes.DRIVE_READONLY

### 2.2. 実行
情報を取得したいアプリIDを指定します。

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

```
public static void main(String[] args) throws Exception{
    Drive drive = getDrive();
    Drive.Apps apps = drive.apps();
    
    Drive.Apps.Get get = apps.get("アプリID");
    get.setFields(*);
    
	App res = get.execute();
    System.out.println(res);
}
```
#### 2.2.1. HTTPリクエスト
GET：　https:\//www.googleapis.com/drive/v3/apps/{アプリID}
が実行されます。

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

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

#### App

|フィールド|メソッド|戻り値|説明|
|---|---|---|---|
|id|getId|String|アプリのID|
|name|getName|String|アプリの名前|
|kind|getKind|String|リソースの種類<br>固定文字列："drive#app"|
|objectType|getObjectType|String|このアプリが作成するオブジェクトのタイプ|
|supportsCreate|getSupportsCreate|Boolean|このアプリがオブジェクトの作成をサポートしているか|
|productUrl|getProductUrl|String|このアプリの製品リストへのリンク|
|primaryMimeTypes|getPrimaryMimeTypes|List\<String\>|プライマリ MIMEタイプのリスト|
|secondaryMimeTypes|getSecondaryMimeTypes|List\<String\>|セカンダリ MIMEタイプのリスト|
|primaryFileExtensions|getPrimaryFileExtensions|List\<String\>|プライマリファイル拡張子のリスト|
|secondaryFileExtensions|getSecondaryFileExtensions|List\<String\>|二次ファイル拡張子のリスト|
|supportsImport|getSupportsImport|Boolean|このアプリが Googleドキュメントからのインポートをサポートしているか|
|installed|getInstalled|Boolean|アプリがインストールされているか|
|authorized|getAuthorized|Boolean|アプリがユーザーのドライブ上のデータにアクセスすることを承認されているか|
|icons|getIcons|List\<[AppIcons](#appicons)\>|アプリのさまざまなアイコン|
|useByDefault|getUseByDefault|Boolean|アプリがサポートするタイプのデフォルトのハンドラーとして選択されているか|
|shortDescription|getShortDescription|String|アプリの簡単な説明|
|longDescription|getLongDescription|String|アプリの詳細な説明|
|supportsMultiOpen|getSupportsMultiOpen|Boolean|このアプリが複数のファイルを開くことをサポートしているか|
|productId|getProductId|String|このアプリの商品リストのID|
|openUrlTemplate|getOpenUrlTemplate|String|このアプリでファイルを開くためのテンプレートURL|
|createUrl|getCreateUrl|String|このアプリでファイルを作成するためのURL|
|createInFolderTemplate|getCreateInFolderTemplate|String|このアプリを使用して特定のフォルダーにファイルを作成するためのテンプレート URL|
|supportsOfflineCreate|getSupportsOfflineCreate|Boolean|このアプリがオフライン時のファイルの作成をサポートするか|
|hasDriveWideScope|getHasDriveWideScope|Boolean|アプリがドライブ全体のスコープを持つか|

#### AppIcons

|メソッド|戻り値|説明|
|---|---|---|
|getSize|Integer|アイコンのサイズ|
|getCategory|String|[アイコンのカテゴリ](#アイコンのカテゴリ)|
|getIconUrl|String|アイコンのURL|

#### アイコンのカテゴリ

|定義値|内容|
|---|---|
|application|アプリケーションのアイコン|
|document|アプリに関連付けられたファイルのアイコン|
|documentShared|アプリに関連付けられた共有ファイルのアイコン|


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