サーバ上のTomcatで稼働しているJavaアプリケーションから、Googleカレンダーにイベントを登録する方法について簡単に説明します。
Java等のプログラムからGoogleカレンダーにアクセスするにはOAuth2.0認証が必要ですが、サーバサイドアプリから認証する方法として、
・エンドユーザにWEBブラウザ経由で認証させ、Googleサーバから返ってくるアクセストークンを用いてGoogleカレンダーにアクセスする
https://developers.google.com/identity/protocols/oauth2/web-server
・アプリケーションがサービスアカウントを用いて、エンドユーザが関与することなくGoogleカレンダーにアクセスする
https://developers.google.com/identity/protocols/oauth2/service-account
の2パターンがあります。ここでは、後者のサービスアカウントを用いるケースを紹介します。
まず、サービスアカウントを作成します。アプリケーション管理者のGoogleアカウントでGoogle Cloud Platformにアクセスします。
https://console.cloud.google.com/
プロジェクトの設定に移動します。(プロジェクトがない場合は新規プロジェクトを作成してください)
左のメニューから「サービスアカウント」を選択し、「+サービスアカウントを作成」します。
サービスアカウント名を入力して「作成」すると、自動でサービスアカウント用のメールアドレスが発行されますので、「完了」を選択します。
作成したサービスアカウントで「操作」→「鍵を作成」を選択します。
秘密鍵を作成します。「JSON」を選択して「作成」します。
秘密鍵のJSONファイルがダウンロードされるので、安全な場所に保存します。
次にGoogleカレンダー側の設定を行います。
アプリケーションからアクセスしたいカレンダーの設定画面を開き、「特定のユーザーとの共有」から「ユーザーの追加」を行います。
メールアドレスに、さきほど作成したサービスアカウント用のメールアドレスを入力します。
必要な権限を設定します。ここではカレンダーにイベントを追加したいので、「変更および共有の管理権限」を設定しています。
準備ができたので、認証してGoogleカレンダーにイベントを追加する処理を実装します。(抜粋しています)
private static final String APPLICATION_NAME = "Google Calendar API Java Test";
private static final String SERVICE_CREDENTIALS_FILE_PATH = (秘密鍵JSONファイルの格納場所) + "XXXXXXXX-XXXXXXXXXXXX.json";
private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream(SERVICE_CREDENTIALS_FILE_PATH))
.createScoped(Collections.singleton(CalendarScopes.CALENDAR_EVENTS));
return credential;
}
public static String addEvent() throws GeneralSecurityException, IOException {
// Build a new authorized API client service.
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
Calendar service = new Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
.setApplicationName(APPLICATION_NAME)
.build();
EventDateTime startEventDateTime = new EventDateTime().setDateTime(new DateTime("---"); // イベント開始日時
EventDateTime endEventDateTime = new EventDateTime().setDateTime(new DateTime("---"); // イベント終了日時
String summary = "テスト";
String description = "テスト";
Event event = new Event()
.setSummary(summary)
.setDescription(description)
.setColorId("2") // green
.setStart(startEventDateTime)
.setEnd(endEventDateTime);
event = service.events().insert(gcal_id, event).execute();
return event.getId();
}
プログラムを実行すると、Googleカレンダーにイベントが登録されます。
※Google API Client Library for Java が必要になるので、
https://developers.google.com/calendar/downloads
などから取得してください。
以上です。