Google は 2012 年 4 月 20 日から AuthSub を廃止しました。そのため、OAuth 2.0 と Google Calendar API v3 に移行する時が来ました。まず、次のリンクから jar ファイルをダウンロードします。
https://google-api-client-libraries.appspot.com/download/library/calendar/v3/java
http://google-oauth-java-client.googlecode.com/files/google-oauth-java-client-1.13.1-beta.zip
プロジェクトから古いカレンダーと Authsub jar ファイルを削除し、このリンクから jar ファイルを追加します。
次に、Google API コンソールに移動して、クライアント ID、クライアント シークレットを取得し、リダイレクト URI を作成します。同じ API コンソールから、Google カレンダー API を有効にします。
ユーザーを認証し、ユーザーが持っているカレンダーを表示するサンプル コードを提供します。出力で取得した更新トークンを保存し、オフラインでカレンダーにアクセスできるように保存する必要があります。
この次の関数は、OAuth 承認用です。
public void authenticate(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String client_id = "xxxx";
String redirect_uri = "xxxxxx";
String scope = "https://www.googleapis.com/auth/calendar";
String client_secret = "xxxxxx";
List <String> scopes;
HttpTransport transport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
scopes = new LinkedList<String>();
scopes.add(scope);
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(transport, jsonFactory, client_id, client_secret, scopes).build();
GoogleAuthorizationCodeRequestUrl url = flow.newAuthorizationUrl();
url.setRedirectUri(redirect_uri);
url.setApprovalPrompt("force");
url.setAccessType("offline");
String authorize_url = url.build();
response.sendRedirect(authorize_url);
}
client_id
変数、client_secret
およびに値を追加する必要がありredirect_uri
ます。これらの値はすべて Google API コンソールにあります。
認証機能は、アクセス トークンとリフレッシュ トークンを提供する認証 URL に転送します。ただし、アクセス トークンは一定時間後に失効します。したがって、アクセス トークンが必要な場合は、更新トークンを保存し、それを使用してカレンダー API にアクセスするたびにトークンを生成する必要があります。
この次の関数は、アクセス トークンと更新トークンを生成し、ユーザーの Google カレンダーにカレンダーのリストを出力します。
public void importCalendarList(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
HttpSession session = request.getSession();
String staffKey = (String) session.getAttribute("staffKey");
ContactJdo staffDetails = staff.getStaffDetail(staffKey);
String code = request.getParameter("code");
String calendarId="";
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(transport, jsonFactory, client_id, client_secret, scopes).build();
GoogleTokenResponse res = flow.newTokenRequest(code).setRedirectUri(redirect_uri).execute();
String refreshToken = res.getRefreshToken();
String accessToken = res.getAccessToken();
List <CalendarListEntry>list1= getCalendars(accessToken);
for(CalendarListEntry temp:list1) {
System.out.println(temp.getId());
}}
上記の関数を見ると、アクセス トークンとリフレッシュ トークンの両方が生成されます。アクセス トークンを再度生成する場合は、次の関数を使用します。
public static String getAccessToken(String refreshToken, String client_id, String client_secret) throws IOException {
HttpTransport transport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
GoogleRefreshTokenRequest req = new GoogleRefreshTokenRequest(transport, jsonFactory, refreshToken, client_id, client_secret);
GoogleTokenResponse res = req.execute();
String accessToken = res.getAccessToken();
return accessToken;
}
更新トークンをどこかに保存すると、カレンダーのドキュメントに記載されているすべての操作を実行できます。ここで見つけてください
https://google-api-client-libraries.appspot.com/documentation/calendar/v3/java/latest/index.html