1. Google Calendar API v3 その2 認証編

    前回はGoogleでの事前準備をしましたが、次はJavaのコーディングをしていきたいと思います。



    まずGoogleのライブラリをダウンロードします。ひとつひとつ入れるのは面倒なのでMavenで。

    参考リンク


    僕の場合は以下の3つを入れました。
    <project>
     <dependencies>
       <dependency>
    <groupId>com.google.oauth-client</groupId>
    <artifactId>google-oauth-client</artifactId>
    <version>1.17.0-rc</version>
    </dependency>
    <dependency>
    <groupId>com.google.apis</groupId>
    <artifactId>google-api-services-calendar</artifactId>
    <version>v3-rev77-1.17.0-rc</version>
    </dependency>
    <dependency>
    <groupId>com.google.http-client</groupId>
    <artifactId>google-http-client-jackson2</artifactId>
    <version>1.17.0-rc</version>
    </dependency>
     </dependencies>
    </project>

     

    続いて認証コードですが、流れとしては 認証URL → ユーザー認証(Google) →コールバック受け取ってカレンダー取得 になります。

    認証URLの取得コード
    public class GoogleCalendar {

    private static HttpTransport HTTP_TRANSPORT;
    private static final JsonFactory JSON_FACTORY = JacksonFactory
    .getDefaultInstance();

    // リダイレクトURL
    private static final String REDIRECT_URL = "http://localhost:8080/google/callback";

    public GoogleCalendar() {
    }

    /**
    * google flow 認証のためのオブジェクト取得
    */
    public GoogleAuthorizationCodeFlow getFlow() throws IOException,
    GeneralSecurityException {

    HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

    // スコープの設定
    Set<String> scopes = new HashSet<String>();
    scopes.add(CalendarScopes.CALENDAR);
    scopes.add(CalendarScopes.CALENDAR_READONLY);

    GoogleClientSecrets clientSecrets = getClientSecrets();

    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
    HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, scopes)
    .setAccessType("offline").setApprovalPrompt("force").build();

    return flow;
    }

    /**
    * JSONファイル取得
    */
    public GoogleClientSecrets getClientSecrets() throws IOException {
    Reader SECRET_FILE = new InputStreamReader(
    GoogleCalendar.class.getResourceAsStream("/client_secrets.json"));
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(
    JSON_FACTORY, SECRET_FILE);

    return clientSecrets;
    }

    /**
    * 認証URL取得
    */
    public String getGoogleOAuthURL() throws IOException,
    GeneralSecurityException {
    GoogleAuthorizationCodeFlow flow = getFlow();
    return flow.newAuthorizationUrl().setRedirectUri(REDIRECT_URL).build();
    }

    }

     

    client_secrets.jsonは前回Googleの設定でダウンロードしておいたJSONファイルです。client_secrets.jsonとREDIRECT_URLは環境にあわせて変更してください。

    getGoogleOAuthURL()を呼び出すことで認証URLが取得できるのでリダイレクトやHTMLリンクからGoogleに飛ばして、ユーザーに認証してもらいます。

    認証後、REDIRECT_URLに帰ってきますのでその処理を書きます。成功した場合Getパラメーターとしてcodeを、失敗した場合はerrorパラメータを受け取ります。

    長くなりそうなのでその3に続きます。

    Posted by Shunsuke Hayashi on 2014年04月30日
    Categories Google API Java