Googleが提供しているGoogle Docs APIをJavaで使ってみました。
Google Docs APIとは
Googleが提供しているAPIで、Googleドキュメントに関する操作ができます。
Google Docs APIの利用料金は無料です。
ただし下記の利用制限があります。
リクエスト | 単位 | 1分単位の上限 |
---|---|---|
読み取りリクエスト | プロジェクト単位 | 3000回/分 |
ユーザー単位 | 600回/分 | |
書き込みリクエスト | プロジェクト単位 | 600回/分 |
ユーザー単位 | 60回/分 |
詳細は公式ドキュメントを参照ください。
1. Google Docs APIを使用するための準備
設定は下記から行います。
⧉Google クラウド プラットフォーム
やることは大きく分けて下記の3つです。
1.GCPプロジェクトの作成
2.Google Docs APIの有効化
3.プログラムで使用するJSONファイルのダウンロード
最後の3.は、サービスアカウントかOAuth2.0を利用する2つの方法があります。
利用する方法によりアクセスできるGoogleドキュメントが異なります。
・サービスアカウント
サービスアカウントと、 そのサービスアカウントに共有されたタスク
・OAuth2.0
同意したユーザー と、 そのユーザーに共有されたタスク
用途に応じてどちらかを選択してください。
1.1. プロジェクトの作成
まずはGCPでプロジェクトを作成します。
詳細はこちらの記事を参照ください
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.1. プロジェクトの作成)
1.2. Google Docs APIの設定
Google Docs APIを使えるようにします。
1. メニューの 「APIとサービス」 -> 「ライブラリ」 を選択します。

2. docs と入力して「Google Docs API」を検索します。

3. 「有効にする」ボタンを押して「Google Docs API」を使用可能にします。

1.3. APIを使用するためのキー取得
プログラムからAPIを実行するための準備を行います。
サービスアカウントを利用する方法と、OAuth2.0を利用する方法があります。
同じ内容を下記の記事に掲載してますので、下記の記事を参照ください。
⧉[Google Drive API v3] JavaでDrive APIを使う
2. Google Docs APIを使ってみる
2.1. googleライブラリの読み込み
Google Docs APIを使用するためにライブラリのパスを設定します。
私の環境はpom.xmlで下記を指定しています。
Javaのバージョンは21を使用しています。
<dependencies>
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-docs</artifactId>
<version>v1-rev20230929-2.0.0</version>
</dependency>
<!-- OAuth2.0で認証を行う場合のみ使用します -->
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-jetty</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.34.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.2. Docsインスタンスを取得
2.2.1. サービスアカウントを利用する場合
コード中の「JSONファイルのパス」は、
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.3. Googleサービスアカウントの作成)
で取得したJSONファイルのパスを指定してください。
コード中の「スコープ」は、
実行するAPIによって異なるので適時に変更してください。
private static Docs getDocs() throws Exception {
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
GsonFactory jsonFactory = GsonFactory.getDefaultInstance();
try(InputStream input = new FileInputStream("JSONファイルのパス")){
GoogleCredentials credentials = GoogleCredentials
.fromStream(input)
.createScoped(Arrays.asList("スコープ"));
return new Docs.Builder(transport, jsonFactory, new HttpCredentialsAdapter(credentials)).build();
}
}
2.2.2. OAuth 2.0 クライアントIDを利用する場合
コード中の「JSONファイルのパス」は、
⧉[Google Drive API v3] JavaでDrive APIを使う(1.3.2.1 認証情報の作成)
で取得したJSONファイルのパスを指定してください。
コード中の「認証情報を保存するフォルダパス」は、
認証情報が保存されるフォルダのパスを指定してください。
このコードを実行するとOAuth同意画面が表示されます。
ユーザーが同意をすると認証情報を保存するフォルダにファイルが生成されます。
このファイルが存在した場合は、再度実行してもOAuth同意画面は表示されません。
コード中の「スコープ」は、
実行するAPIによって異なるので適時に変更してください。
途中でスコープを変更した場合は再度のOAuth同意が必要になるので
「認証情報を保存するフォルダパス」にあるファイルを削除するか、パスを変えてください。
private static Docs getDocs() throws Exception {
HttpTransport transport = GoogleNetHttpTransport.newTrustedTransport();
GsonFactory 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 Docs.Builder(transport, jsonFactory, credential).build();
}
}
2.3. プログラムの実行
プログラムを動かします。
サンプルではドキュメントの情報を取得しています。
public static void main(String[] args) throws Exception{
Docs docs = getDocs();
Docs.Documents documents = docs.documents();
Docs.Documents.Get get = documents.get("ファイルID");
Document res = get.execute();
System.out.println(res);
}
3. いろいろとAPIを叩いてみる
いろいろなAPIを叩いてみます。
3.1. v1.documents
メソッド | 概要 | 記事 |
---|---|---|
batchUpdate | ドキュメントを更新 | ⧉[Google Docs API(V1)] Javaでドキュメントを作成・更新する |
create | 空白のドキュメントを作成 | ⧉[Google Docs API(V1)] Javaでドキュメントを作成・更新する |
get | ドキュメントの情報を取得 | ⧉[Google Docs API(V1)] Javaでドキュメントの情報を取得する |
おしまい。。