LoginSignup
1
2

[Google Calendar API(V3)] JavaでCalendar APIを使う

Last updated at Posted at 2024-03-31

Googleが提供しているGoogle Calendar APIをJavaで使ってみました。

Google Calendar APIとは
Googleが提供しているAPIで、Googleカレンダーに関する操作ができます。

Google Calendar APIの利用料金は無料です。

No 目次
1 Google Calendar APIを使用するための準備
1 プロジェクトの作成
2 Google Calendar APIの設定
3 APIを使用するためのキー取得
2 Google Calendar APIを使ってみる
1 googleライブラリの読み込み
2 Calendarインスタンスを取得
1 サービスアカウントを利用する場合
2 OAuth 2.0 クライアントIDを利用する場合
3 プログラムの実行
3 いろいろとAPIを叩いてみる
1 Acl
2 CalendarList
3 Calendars
4 Channels
5 Colors
6 Events
7 Freebusy
8 Settings
4 APIとUIの紐付け

1. Google Calendar APIを使用するための準備

設定は下記から行います。
⧉Google クラウド プラットフォーム

やることは大きく分けて下記の3つです。
1.GCPプロジェクトの作成
2.Google Calendar 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 Calendar APIの設定

Google Calendar APIを使えるようにします。

1. メニューの 「APIとサービス」 -> 「ライブラリ」 を選択します。
2. calendar と入力して「Google Calendar API」を検索します。
3. 「有効にする」ボタンを押して「Google Calendar API」を使用可能にします。

1.3. APIを使用するためのキー取得

プログラムからAPIを実行するための準備を行います。
サービスアカウントを利用する方法と、OAuth2.0を利用する方法があります。

同じ内容を下記の記事に掲載してますので、下記の記事を参照ください。
⧉[Google Drive API v3] JavaでDrive APIを使う

2. Google Calendar APIを使ってみる

2.1. googleライブラリの読み込み

Google Calendar 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-calendar</artifactId>
        <version>v3-rev20240111-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. Calendarインスタンスを取得

2.2.1. サービスアカウントを利用する場合

コード中の「JSONファイルのパス」は、
⧉[Google Sheets API] Google Sheets API v4をJavaで操作する(1.3. Googleサービスアカウントの作成)
で取得したJSONファイルのパスを指定してください。

コード中の「スコープ」は、
実行するAPIによって異なるので適時に変更してください。

private static Calendar getCalendar() 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 Calendar.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 Calendar getCalendar() 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 Calendar.Builder(transport, jsonFactory, credential).build();
    }
}

2.3. プログラムの実行

プログラムを動かします。
サンプルではカレンダーの一覧を取得しています。

public static void main(String[] args) throws Exception{
    Calendar calendar = getCalendar();
    Calendar.CalendarList calendarList = calendar.calendarList();
    Calendar.CalendarList.List list = calendarList.list();
    
    CalendarList res = list.execute();
    System.out.println(res);
}

3. いろいろとAPIを叩いてみる

いろいろなAPIを叩いてみます。

3.1. Acl

アクセス制御ルール(ACL)を操作するAPIです。

メソッド 概要 記事
delete アクセス制御ルールを削除 ⧉[Google Calendar API(V3)] Javaでアクセス制御ルール(ACL)を作成・更新・削除する
get アクセス制御ルールを取得 ⧉[Google Calendar API(V3)] Javaでアクセス制御ルール(ACL)を取得する
insert アクセス制御ルールを作成 ⧉[Google Calendar API(V3)] Javaでアクセス制御ルール(ACL)を作成・更新・削除する
list カレンダーのアクセス制御リスト内のルールを取得 ⧉[Google Calendar API(V3)] Javaでアクセス制御ルール(ACL)を取得する
patch アクセス制御ルールを更新 ⧉[Google Calendar API(V3)] Javaでアクセス制御ルール(ACL)を作成・更新・削除する
update アクセス制御ルールを上書き更新 ⧉[Google Calendar API(V3)] Javaでアクセス制御ルール(ACL)を作成・更新・削除する
watch アクセス制御ルールの変更を監視 ⧉[Google Calendar API(V3)] Javaでアクセス制御ルール(ACL)を変更を監視する

3.2. CalendarList

カレンダーリストを操作するAPIです。

メソッド 概要 記事
delete カレンダーリストからカレンダーを削除 ⧉[Google Calendar API(V3)] Javaでカレンダーを挿入・更新・削除する
get カレンダーリストからカレンダーを取得 ⧉[Google Calendar API(V3)] Javaでカレンダーを取得する
insert カレンダーをカレンダーリストに挿入 ⧉[Google Calendar API(V3)] Javaでカレンダーを挿入・更新・削除する
list カレンダーリストにあるカレンダーを取得 ⧉[Google Calendar API(V3)] Javaでカレンダーを取得する
patch カレンダーリストにあるカレンダーを更新 ⧉[Google Calendar API(V3)] Javaでカレンダーを挿入・更新・削除する
update カレンダーリストにあるのカレンダーを上書き更新 ⧉[Google Calendar API(V3)] Javaでカレンダーを挿入・更新・削除する
watch カレンダーリストの変更を監視 ⧉[Google Calendar API(V3)] Javaでカレンダーの変更を監視する

3.3. Calendars

カレンダーを操作するAPIです。

メソッド 概要 記事
clear プライマリカレンダーをクリア ⧉[Google Calendar API(V3)] Javaでメインカレンダーのイベントを全て削除する
delete 二次(プライマリカレンダー以外)カレンダーを削除 ⧉[Google Calendar API(V3)] Javaでカレンダーを作成・更新・削除する
get カレンダーのメタデータを取得 ⧉[Google Calendar API(V3)] Javaでカレンダーのメタデータを取得する
insert 二次(プライマリカレンダー以外)カレンダーを作成 ⧉[Google Calendar API(V3)] Javaでカレンダーを作成・更新・削除する
patch カレンダーのメタデータを更新 ⧉[Google Calendar API(V3)] Javaでカレンダーを作成・更新・削除する
update カレンダーのメタデータを上書き更新 ⧉[Google Calendar API(V3)] Javaでカレンダーを作成・更新・削除する

3.4. Channels

リソースの監視を停止するAPIです。

メソッド 概要 記事
stop リソースの監視を停止 ⧉[Google Calendar API(V3)] Javaで変更通知を停止する

3.5. Colors

カレンダーの色とイベントの色を取得するAPIです。

メソッド 概要 記事
get カレンダーとイベントの色を取得 ⧉[Google Calendar API(V3)] Javaでカレンダーとイベントの色を取得する

3.6. Events

カレンダーのイベントを操作するAPIです。

メソッド 概要 記事
delete イベントを削除 ⧉[Google Calendar API(V3)] Javaでカレンダーのイベントを作成・更新・削除する
get イベントを取得 ⧉[Google Calendar API(V3)] Javaでカレンダーのイベントを取得する
import イベントを別のカレンダにコピー ⧉[Google Calendar API(V3)] Javaでカレンダーのイベントを別のカレンダーにコピーする
insert イベントを作成 ⧉[Google Calendar API(V3)] Javaでカレンダーのイベントを作成・更新・削除する
instances 定期的なイベントを取得 ⧉[Google Calendar API(V3)] Javaでカレンダーの繰り返しイベントを取得する
list カレンダーのイベントリストを取得 ⧉[Google Calendar API(V3)] Javaでカレンダーのイベントを取得する
move イベントを別のカレンダーに移動 ⧉[Google Calendar API(V3)] Javaでカレンダーのイベントを別のカレンダーに移動する
patch イベントを更新 ⧉[Google Calendar API(V3)] Javaでカレンダーのイベントを作成・更新・削除する
quickAdd テキスト文字列(Quick Add)に基にイベントを作成 ⧉[Google Calendar API(V3)] Javaでカレンダーにテキスト形式(Quick Add)でイベントを追加する
update イベントを上書き更新 ⧉[Google Calendar API(V3)] Javaでカレンダーのイベントを作成・更新・削除する
watch イベント変更を監視 ⧉[Google Calendar API(V3)] Javaでカレンダーのイベント変更を監視する

3.7. Freebusy

カレンダーの空き時間を取得するAPIです。

メソッド 概要 記事
query カレンダーの空き時間情報を取得 ⧉[Google Calendar API(V3)] Javaでカレンダーの空き時間情報を取得する

3.8. Settings

カレンダーのユーザー設定を取得するAPIです。

メソッド 概要 記事
get ユーザー設定を取得 ⧉[Google Calendar API(V3)] Javaでカレンダーのユーザー設定情報を取得する
list 認証されたユーザーのすべてのユーザー設定を取得 ⧉[Google Calendar API(V3)] Javaでカレンダーのユーザー設定情報を取得する
watch ユーザー設定の変更を監視 ⧉[Google Calendar API(V3)] Javaでカレンダーのユーザー設定情報の変更を監視する

4. APIとUIの紐付け

APIでカレンダーのイベントを作成しようとすると、
どのパラメータを使用すればいいのか迷うことが多いかと思います。

APIのパラメータとGoogleカレンダーのUIを紐づけた記事は
⧉[Google Calendar API(V3)] GoogleカレンダーとEventクラス
こちらを参照ください。



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