Googleが提供しているGoogle Tasks APIをJavaで使ってみました。
Google Tasks APIとは
Googleが提供しているAPIで、Google ToDoリストに関する操作ができます。
Googleカレンダーからは、右上にあるを選択することで呼び出すことができます。
その他のGoogleサービス(Googleスプレットシート等)でもアイコンがあれば、
そのサービス上で呼び出すことができます。
Google Tasks APIの利用料金は100万回までは無料です。
それを超えた場合、50億回までは100万回単位で$0.4だそうです。
料金に関する詳細は公式ドキュメントを参照ください。
Cloud Tasks の料金
1. Google Tasks APIを使用するための準備
設定は下記から行います。
⧉Google クラウド プラットフォーム
やることは大きく分けて下記の3つです。
1.GCPプロジェクトの作成
2.Google Tasks APIの有効化
3.プログラムで使用するJSONファイルのダウンロード
最後の3.は、サービスアカウントかOAuth2.0を利用する2つの方法があります。
利用する方法によりアクセスできるGoogle Tasksが異なります。
・サービスアカウント
サービスアカウントと、 そのサービスアカウントに共有されたタスク
・OAuth2.0
同意したユーザー と、 そのユーザーに共有されたタスク
用途に応じてどちらかを選択してください。
1.1. プロジェクトの作成
まずはGCPでプロジェクトを作成します。
詳細はこちらの記事を参照ください
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.1. プロジェクトの作成)
1.2. Google Tasks APIの設定
Google Tasks APIを使えるようにします。
1. メニューの 「APIとサービス」 -> 「ライブラリ」 を選択します。
2. task と入力して「Google Tasks API」を検索します。
3. 「有効にする」ボタンを押して「Google Tasks API」を使用可能にします。
1.3. APIを使用するためのキー取得
プログラムからAPIを実行するための準備を行います。
サービスアカウントを利用する方法と、OAuth2.0を利用する方法があります。
同じ内容を下記の記事に掲載してますので、下記の記事を参照ください。
⧉[Google Drive API v3] JavaでDrive APIを使う
2. Google Tasks APIを使ってみる
2.1. googleライブラリの読み込み
Google Tasks 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-tasks</artifactId>
<version>v1-rev20240312-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. Tasksインスタンスを取得
2.2.1. サービスアカウントを利用する場合
コード中の「JSONファイルのパス」は、
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.3. Googleサービスアカウントの作成)
で取得したJSONファイルのパスを指定してください。
コード中の「スコープ」は、
実行するAPIによって異なるので適時に変更してください。
private static Tasks getTasks() 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 Tasks.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 Tasks getTasks() 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 Tasks.Builder(transport, jsonFactory, credential).build();
}
}
2.3. プログラムの実行
プログラムを動かします。
サンプルではタスクリストの一覧を取得しています。
public static void main(String[] args) throws Exception{
Tasks tasks = getTasks();
Tasks.Tasklists tasklists = tasks.tasklists();
Tasks.Tasklists.List list = tasklists.list();
TaskLists res = list.execute();
System.out.println(res);
}
3. いろいろとAPIを叩いてみる
いろいろなAPIを叩いてみます。
3.1. tasklists
タスクリストを操作するAPIです。
メソッド | 概要 | 記事 |
---|---|---|
delete | タスクリストを削除 | ⧉[Google Tasks API(V1)] Javaでタスクリストを作成・更新・削除する |
get | タスクリストを取得 | ⧉[Google Tasks API(V1)] Javaでタスクリストを取得する |
insert | 新しいタスクリストを作成 | ⧉[Google Tasks API(V1)] Javaでタスクリストを作成・更新・削除する |
list | タスクリストをすべて取得 | ⧉[Google Tasks API(V1)] Javaでタスクリストを取得する |
patch | タスクリストを更新 | ⧉[Google Tasks API(V1)] Javaでタスクリストを作成・更新・削除する |
update | タスクリストを上書き更新 | ⧉[Google Tasks API(V1)] Javaでタスクリストを作成・更新・削除する |
3.2. tasks
タスクを操作するAPIです。
メソッド | 概要 | 記事 |
---|---|---|
clear | タスクリストから完了したタスクをすべてクリア | ⧉[Google Tasks API(V1)] Javaでタスクリストから完了したタスクを全て削除する |
delete | タスクをタスクリストから削除 | ⧉[Google Tasks API(V1)] Javaでタスクを作成・更新・削除する |
get | タスクを取得 | ⧉[Google Tasks API(V1)] Javaでタスクを取得する |
insert | タスクリストに新しいタスクを作成 | ⧉[Google Tasks API(V1)] Javaでタスクを作成・更新・削除する |
list | タスクリスト内のすべてのタスクを取得 | ⧉[Google Tasks API(V1)] Javaでタスクを取得する |
move | タスクをタスクリスト内の別の位置に移動 | ⧉[Google Tasks API(V1)] Javaでタスクリスト内のタスクの順序変更や親タスクを設定する |
patch | タスクを更新 | ⧉[Google Tasks API(V1)] Javaでタスクを作成・更新・削除する |
update | タスクを上書き更新 | ⧉[Google Tasks API(V1)] Javaでタスクを作成・更新・削除する |
おしまい。。