LoginSignup
3
6

[Google Drive API v3] JavaでDrive APIを使う

Last updated at Posted at 2024-03-09

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ファイルをダウンロードします。

No 手順
1 「APIとサービス」 -> 「認証情報」 を選択すると以下の画面が表示されます。
2 「認証情報を作成」 -> 「OAuth クライアントID」 を選択します。
3 アプリケーションの種類に「デスクトップアプリ」、名前を入力し、「作成」 ボタンを押します。

アプリケーションの種類は用途に応じて選択してください。
4 OAuthクライアントが作成されます。
「JSONをダウンロード」 を押してJSONファイルを取得してください。

このJSONファイルはプログラムで指定します。

1.3.2.2. OAuth 同意画面の設定

次に、OAuth同意画面の設定を行います。

プログラムから1.3.2.1. 認証情報の作成を使用してAPIを利用しようとすると、
Webブラウザが開かれ、OAuth同意画面が表示されます。
Google関連のサービスを利用しようとすると、この同意画面が開かれるので、
一度は見たことがあると思います。その画面の設定をここで行います。

No 手順
1 「APIとサービス」 -> 「OAuth 同意画面」  を選択すると以下の画面が表示されますので、Use Typeに「外部」 を選択し、「作成」 ボタンを押してください。

Use Typeは用途に応じて選択してください。
2 アプリ登録の編集画面になりますので、アプリ名、ユーザーサポートメールを入力します。
3 下の方の出ペロッパーの連絡先情報を入力し、「保存して次へ」 ボタンを押します。
4 アプリ登録の編集 ②スコープ の画面になりますが、ここでは何も設定せずに「保存して次へ」 ボタンを押します。
5 アプリ登録の編集 ③テストユーザー の画面になりますので、テストユーザーの「+ ADD USER」 ボタンでユーザーを追加し、「保存して次へ」 ボタンを押します。

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です。

メソッド 概要 記事
copy 指定したDriveのファイルをコピー ⧉[Google Drive API v3] Javaでファイルをアップロード・生成・コピー・更新・削除する
create Driveにファイルを生成 ⧉[Google Drive API v3] Javaでファイルをアップロード・生成・コピー・更新・削除する
delete 指定したDriveのファイルを削除 ⧉[Google Drive API v3] Javaでファイルをアップロード・生成・コピー・更新・削除する
emptyTrash Driveのゴミ箱を空にする ⧉[Google Drive API v3] JavaでDriveのゴミ箱を空にする
export Driveに置かれているファイルをダウンロード ⧉[Google Drive API v3] JavaでDriveのファイルをダウンロードする
generateIds Driveにファイルを作成(新規、またはコピーにより作成)するときに使用可能なファイルIDのリストを取得 ⧉[Google Drive API v3] JavaでDriveのファイルの情報を取得する
get 指定したDriveに置かれているファイルの情報を取得

指定したDriveに置かれているファイルを形式を指定してダウンロード
⧉[Google Drive API v3] JavaでDriveのファイルの情報を取得する

⧉[Google Drive API v3] JavaでDriveのファイルをダウンロードする
list Driveに置かれているファイルの情報リストを取得 ⧉[Google Drive API v3] JavaでDriveのファイルの情報を取得する
listLabels 指定したDriveに置かれているファイルのラベル情報リストを取得 ⧉[Google Drive API v3] JavaでDriveのファイルの情報を取得する
modifyLabels 指定したDriveに置かれているファイルのラベルを更新 ⧉[Google Drive API v3] JavaでDriveのファイルのラベルを更新する
update Driveにファイルをアップロード ⧉[Google Drive API v3] Javaでファイルをアップロード・生成・コピー・更新・削除する
watch 指定したファイルの変更通知(サブスクライブ)を登録 ⧉[Google Drive API v3] Javaでファイル、ユーザー情報の変更通知(サブスクライブ)を受信・停止する

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でファイルのリビジョンを更新・削除する


おしまい。。
3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6