ブログ

サーバアプリケーション(Java)からGoogleカレンダーにアクセスする方法

サーバ上の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

などから取得してください。

以上です。

関連記事

  1. jcanvasでポリゴンを入力し、ポリゴンの頂点をドラッグ移動す…
  2. jcanvasでポリゴンの頂点をドラッグ移動するサンプル
  3. JSON Serverとngrokで、RESTサーバのモックアッ…
  4. jcanvasでポリゴンを入力するサンプル
  5. PyCharmのWindows環境へのインストール

最新ブログ記事

PAGE TOP