0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Google Tasks API(V1)] JavaでTasks APIを使う

Last updated at Posted at 2024-04-08

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 の料金

No 目次
1 Google Tasks APIを使用するための準備
1 プロジェクトの作成
2 Google Tasks APIの設定
3 APIを使用するためのキー取得
2 Google Tasks APIを使ってみる
1 googleライブラリの読み込み
2 Tasksインスタンスを取得
1 サービスアカウントを利用する場合
2 OAuth 2.0 クライアントIDを利用する場合
3 プログラムの実行
3 いろいろとAPIを叩いてみる
1 tasklists
2 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でタスクを作成・更新・削除する


おしまい。。
0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?