Googleが提供しているDrive API v3をJavaで使ってみました。
Drive APIとは
Googleが提供しているAPIで、
GoogleDrive上のファイルやフォルダ、ユーザーの管理、作成、編集できます。
Drive APIの利用料金は無料です。
ただし、100秒あたりの使用制限があります。
ユーザーごとおよびプロジェクトごとに20,000回/100秒です。
No | 目次 | ||
---|---|---|---|
1 | Drive APIを使用するための準備 | ||
1 | プロジェクトの作成 | ||
2 | Drive APIの設定 | ||
3 | APIを使用するためのキー取得 | ||
1 | サービス アカウント | ||
2 | OAuth2.0 クライアントID | ||
2 | Drive APIを使ってみる | ||
1 | googleライブラリの読み込み | ||
2 | Driveインスタンスを取得 | ||
1 | サービスアカウントを利用する場合 | ||
2 | OAuth 2.0 クライアントIDを利用する場合 | ||
3 | プログラムの実行 | ||
3 | いろいろとAPIを叩いてみる | ||
1 | about | ||
2 | apps | ||
3 | changes | ||
4 | channels | ||
5 | comments | ||
6 | drives | ||
7 | files | ||
8 | permissions | ||
9 | replies | ||
10 | revisions |
1. Drive APIを使用するための準備
設定は下記から行います。
⧉Google クラウド プラットフォーム
やることは大きく分けて下記の3つです。
1.GCPプロジェクトの作成
2.Drive APIの有効化
3.プログラムで使用するJSONファイルのダウンロード
最後の3.は、サービスアカウントかOAuth2.0を利用する2つの方法があります。
利用する方法によりアクセスできるDriveが異なります。
・サービスアカウント
サービスアカウントのDrive と、 そのサービスアカウントに共有されたファイル
・OAuth2.0
同意したユーザーのDrive と、 そのユーザーに共有されたファイル
用途に応じてどちらかを選択してください。
1.1. プロジェクトの作成
まずはGCPでプロジェクトを作成します。
詳細はこちらの記事を参照ください
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.1. プロジェクトの作成)
1.2. Drive APIの設定
Drive APIを使えるようにします。
No | 手順 | |
---|---|---|
1 | メニューの 「APIとサービス」 -> 「ライブラリ」 を選択します。 | |
2 | Drive APIと入力して「Google Drive API」を検索します。 | |
3 | 「有効にする」ボタンを押して「Google Drive API」を使用可能にします。 |
1.3. APIを使用するためのキー取得
プログラムからAPIを実行するための準備を行います。
サービスアカウントを利用する方法と、OAuth2.0を利用する方法があります。
1.3.1. サービス アカウント
APIを操作するためにサービスアカウントを作成します。
詳細はこちらの記事を参照ください
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.3. Googleサービスアカウントの作成)
Google Drive APIを使用するにあたって、権限は必要ありません。
1.3.2. OAuth2.0 クライアントID
APIを操作するためにOAuth2.0の設定を行います。
1.3.2.1. 認証情報の作成
まずは認証情報を作成し、JSONファイルをダウンロードします。
1.3.2.2. OAuth 同意画面の設定
次に、OAuth同意画面の設定を行います。
プログラムから1.3.2.1. 認証情報の作成を使用してAPIを利用しようとすると、
Webブラウザが開かれ、OAuth同意画面が表示されます。
Google関連のサービスを利用しようとすると、この同意画面が開かれるので、
一度は見たことがあると思います。その画面の設定をここで行います。
2. Drive APIを使ってみる
2.1. googleライブラリの読み込み
Google Drive APIを使用するためにライブラリのパスを設定します。
私の環境はpom.xmlで下記を指定しています。
Javaのバージョンは21を使用しています。
<dependencies>
....
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-oauth2-http</artifactId>
</dependency>
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-drive</artifactId>
<version>v3-rev20240123-2.0.0</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.31.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.2. Driveインスタンスを取得
2.2.1. サービスアカウントを利用する場合
コード中の「JSONファイルのパス」は、
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.3. Googleサービスアカウントの作成)
で取得したJSONファイルのパスを指定してください。
コード中の「スコープ」は、
実行するAPIによって異なるので適時に変更してください。
private static Drive getDrive() throws Exception {
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
try(InputStream input = new FileInputStream("JSONファイルのパス")){
GoogleCredentials credentials = GoogleCredentials
.fromStream(input)
.createScoped(Arrays.asList("スコープ"));
return new Drive.Builder(transport, jsonFactory, new HttpCredentialsAdapter(credentials)).build();
}
}
2.2.2. OAuth 2.0 クライアントIDを利用する場合
コード中の「JSONファイルのパス」は、
1.3.2. OAuth2.0 クライアントIDで取得したJSONファイルのパスを指定してください。
コード中の「認証情報を保存するフォルダパス」は、
認証情報が保存されるフォルダのパスを指定してください。
このコードを実行するとOAuth同意画面が表示されます。
ユーザーが同意をすると認証情報を保存するフォルダにファイルが生成されます。
このファイルが存在した場合は、再度実行してもOAuth同意画面は表示されません。
コード中の「スコープ」は、
実行するAPIによって異なるので適時に変更してください。
途中でスコープを変更した場合は再度のOAuth同意が必要になるので
「認証情報を保存するフォルダパス」にあるファイルを削除するか、パスを変えてください。
private static Drive getDrive() throws Exception {
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
try(Reader reader = new InputStreamReader(new FileInputStream("JSONファイルのパス"))){
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(jsonFactory,reader);
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
transport, jsonFactory, clientSecrets,
Arrays.asList("スコープ"))
.setDataStoreFactory(new FileDataStoreFactory(new java.io.File("認証情報を保存するフォルダパス")))
.build();
LocalServerReceiver receiver = new LocalServerReceiver.Builder().build();
Credential credential = new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
return new Drive.Builder(transport, jsonFactory, credential).build();
}
}
2.3. プログラムの実行
プログラムを動かします。
サンプルではDriveのファイル一覧を取得しています。
public static void main(String[] args) throws Exception{
Drive drive = getDrive();
Drive.Files files = drive.files();
Drive.Files.List list = files.list();
System.out.println(list.execute());
}
3. いろいろとAPIを叩いてみる
いろいろなAPIを叩いてみます。
3.1. about
Driveに関する情報を操作するAPIです。
メソッド | 概要 | 記事 |
---|---|---|
get | ユーザーとドライブ、システムに関する情報を取得 | ⧉[Google Drive API v3] Javaでユーザーとドライブ、システムに関する情報を取得する |
3.2. apps
イントールされているアプリの情報を操作するAPIです。
メソッド | 概要 | 記事 |
---|---|---|
get | 指定したDriveにインストールされているアプリの情報を取得 | ⧉[Google Drive API v3] JavaでDriveにインストールされているアプリの情報を取得する |
list | Driveにインストールされているアプリの情報リストを取得 | ⧉[Google Drive API v3] JavaでDriveにインストールされているアプリの情報を取得する |
3.3. changes
変更の履歴情報を操作するAPIです。
メソッド | 概要 | 記事 |
---|---|---|
getStartPageToken | Driveに格納されているファイルの変更履歴を取得するための開始のトークンを取得 | ⧉[Google Drive API v3] Javaでユーザーや共有ドライブ、ファイルの変更履歴を取得する |
list | Driveに格納されているファイルの変更履歴リストを取得 | ⧉[Google Drive API v3] Javaでユーザーや共有ドライブ、ファイルの変更履歴を取得する |
watch | ユーザー情報の変更通知(サブスクライブ)を登録 | ⧉[Google Drive API v3] Javaでファイル、ユーザー情報の変更通知(サブスクライブ)を受信・停止する |
3.4. channels
変更通知を操作するAPIです。
メソッド | 概要 | 記事 |
---|---|---|
stop | 変更通知(サブスクライブ)の登録解除 | ⧉[Google Drive API v3] Javaでファイル、ユーザー情報の変更通知(サブスクライブ)を受信・停止する |
3.5. comments
ファイルのコメントを操作するAPIです。
メソッド | 概要 | 記事 |
---|---|---|
create | 指定したDriveに置かれているファイルのコメントを追加 | ⧉[Google Drive API v3] Javaでファイルのコメントを追加・変更・削除する |
delete | 指定したDriveに置かれているファイルのコメントを削除 | ⧉[Google Drive API v3] Javaでファイルのコメントを追加・変更・削除する |
get | 指定した指定したDriveに置かれているファイルのコメントを取得 | ⧉[Google Drive API v3] Javaでファイルのコメントを取得する |
list | Driveに置かれているファイルのコメントリストを取得 | ⧉[Google Drive API v3] Javaでファイルのコメントを取得する |
update | 指定したDriveに置かれているファイルのコメントを変更 | ⧉[Google Drive API v3] Javaでファイルのコメントを追加・変更・削除する |
3.6. drives
共有ドライブを操作するAPIです。
メソッド | 概要 | 記事 |
---|---|---|
create | 共有ドライブを作成 | ⧉[Google Drive API v3] Javaで共有ドライブを作成・更新・削除する |
delete | 指定した共有ドライブを削除 | ⧉[Google Drive API v3] Javaで共有ドライブを作成・更新・削除する |
get | 指定した共有ドライブの情報を取得 | ⧉[Google Drive API v3] Javaで共有ドライブの情報を取得する |
hide | 指定した共有ドライブのビューを表示 | ⧉[Google Drive API v3] Javaで共有ドライブのビューを表示・非表示にする |
list | 共有ドライブの情報リストを取得 | ⧉[Google Drive API v3] Javaで共有ドライブの情報を取得する |
unhide | 指定した共有ドライブのビューを非表示にする | ⧉[Google Drive API v3] Javaで共有ドライブのビューを表示・非表示にする |
update | 指定した共有ドライブの情報を更新 | ⧉[Google Drive API v3] Javaで共有ドライブを作成・更新・削除する |
3.7. files
ファイルを操作するAPIです。
3.8. permissions
ファイルの権限を操作するAPIです。
メソッド | 概要 | 記事 |
---|---|---|
create | 指定したDriveに置かれているファイルのパーミッションを付与 | ⧉[Google Drive API v3] Javaでファイルのパーミッションを付与・更新・削除する |
delete | 指定したDriveに置かれているファイルのパーミッションを削除 | ⧉[Google Drive API v3] Javaでファイルのパーミッションを付与・更新・削除する |
get | 指定したDriveに置かれているファイルのパーミッション情報を取得 | ⧉[Google Drive API v3] Javaでファイルのパーミッション情報を取得する |
list | Driveに置かれているファイルのパーミッション情報リストを取得 | ⧉[Google Drive API v3] Javaでファイルのパーミッション情報を取得する |
update | 指定したDriveに置かれているファイルのパーミッションを更新 | ⧉[Google Drive API v3] Javaでファイルのパーミッションを付与・更新・削除する |
3.9. replies
ファイルのコメントの返信を操作するAPIです。
メソッド | 概要 | 記事 |
---|---|---|
create | 指定したDriveに置かれているファイルのコメントのリプライを追加 | ⧉[Google Drive API v3] Javaでファイルのコメントの返信(リプライ)を追加・変更・削除する |
delete | 指定したDriveに置かれているファイルのコメントのリプライを削除 | ⧉[Google Drive API v3] Javaでファイルのコメントの返信(リプライ)を追加・変更・削除する |
get | 指定したDriveに置かれているファイルのコメントのリプライを取得 | ⧉[Google Drive API v3] Javaでファイルのコメントの返信(リプライ)を取得する |
list | 指定したDriveに置かれているファイルのコメントのリプライリストを取得 | ⧉[Google Drive API v3] Javaでファイルのコメントの返信(リプライ)を取得する |
update | 指定したDriveに置かれているファイルのコメントのリプライを変更 | ⧉[Google Drive API v3] Javaでファイルのコメントの返信(リプライ)を追加・変更・削除する |
3.10. revisions
ファイルのリビジョンを操作するAPIです。
メソッド | 概要 | 記事 |
---|---|---|
delete | 指定したDriveに置かれているファイルのリビジョンを削除 | ⧉[Google Drive API v3] Javaでファイルのリビジョンを更新・削除する |
get | 指定したDriveに置かれているファイルの指定したリビジョンを取得 | ⧉[Google Drive API v3] Javaでファイルのリビジョンを取得する |
list | Driveに置かれているファイルのリビジョンリストを取得 | ⧉[Google Drive API v3] Javaでファイルのリビジョンを取得する |
update | 指定したDriveに置かれているファイルのリビジョンを更新 | ⧉[Google Drive API v3] Javaでファイルのリビジョンを更新・削除する |
おしまい。。