JSPで行こう!

認可された情報の取得

手順の確認

  1. 認可を依頼する URL を呼び出す。
  2. リダイレクト先に結果(認可コード)が返される。
  3. 「認可コードを」を使って、「アクセストークン」を取得する
  4. 「アクセストークン」から認可された情報を取得する
  5. 必要ならユーザー登録をする

次に、Google から「認可」された情報を取得します。

認可された情報の取得

ここでの例は、もともとメールアドレスの情報を取得するだけの「認可」を求めていますので、
メールアドレス以上の情報を取得することはできないはずです。

今度も、httpclient を使う必要があります。
前回のアクセストークンの取得と違い、今回は POST ではなく GET で呼び出す必要があります。
取得する情報の種類によっては、POST だったり GET だったりします。
言い忘れていましたが、API の種類もいくつかあり、ここで使っているのは、REST API です。
個々の API の使い方の詳細は、Google API Reference を見るのが手っ取り早いです。
(後でリンク切れしているかもしれませんが) google+ API を見て書きました。
Google は良く仕様を変えますので、少し旧いブログはあまり当てにしないほうが良いです。

「アクセストークン」ですが、http のヘッダー情報に設定します。

以下は、画面からアクセストークンを入力して情報を確認する例です。
アクセストークンをセッション変数に格納しておいた場合はそれをデフォルトで設定します。
処理の流れが解りやすいように2つのメソッドを書いています。

private static String getPeopleJson(
  String url
, String access_token
) {
  String body = null;

  HttpGet get = new HttpGet(url);
  get.addHeader("Authorization", "Bearer " + access_token);

  try {
    CloseableHttpClient httpclient = HttpClients.createDefault();
    CloseableHttpResponse response = httpclient.execute( get );
    HttpEntity entity = null;
    entity = response.getEntity();
    if (entity != null) {
      body = EntityUtils.toString(entity);
      get.abort();
    }
  } catch (ClientProtocolException e) {
  } catch (IOException e) {
  }
  return body;
}

応答は、JSON 形式の文字列です。

<%!
private static String getEmailFromJson( String json ) {
  String email = null;
  try {
    ObjectMapper mapper = new ObjectMapper();
    JsonNode rootNode = mapper.readTree(json);
    JsonNode array_node = rootNode.get("emails");
    for( JsonNode node : array_node ) {
      node = node.get("value");
      email = node.asText();
      break;
    }
  } catch (JsonProcessingException e) {
  } catch (IOException e) {
  }
  return email;
}

下が確認用の JSP の本体部分のコードです。
同じソースファイル内に上の2つのメソッドも含めてください。

<%@ page contentType="text/html; charset=UTF-8" %>

<%
  request.setCharacterEncoding("UTF-8");

  String me = "people_test.jsp";
  String title = "ユーザー情報の取得";
  String req_url = "https://www.googleapis.com/plus/v1/people/";
  String body = "";
  String url = "";

  String access_token = (String)request.getParameter("access_token");
  String email = (String)request.getParameter("email");
  String cmd = (String)request.getParameter("cmd");

  if( access_token == null ) {
    // セッション変数からの取得
    access_token = (String)session.getAttribute("access_token");
  }

  if( cmd != null && cmd.equals("exec") ) {

    String people_id = "me";
    url = req_url + people_id ;

    body = getPpeopleJson( url, access_token );
    email = getEmailFromJson( body );
  }

%>
<!doctype html>
<html>

<body>
  <h1><%=title%></h1>
  <form method="post" action="<%=me%>">
  <table border="1">
  <tr><td>アクセストークン:</td>
  <td><input type="text" name="access_token" size="60" value="<%=access_token%>"/></td>
  </tr>
  <tr>
  <td>EMail:</td>
  <td><input type="text" name="email" value="<%=email%>"/></td>
  </tr>
  </table>
  <p><button type=~submit" name="cmd" value="exec">取得</button></p>
  </form>
  <p> </p>
  <pre><%=url%></pre>
  <pre><%=body%></pre>
  <a href="/test/">メニューへ</a>
</body>
</html>


前節で、アクセストークンをセッション変数に格納しておいたので、それを参照して実行しています。
(手で入力してもかまいません)
「アクセストークン」の期限は通常60分位あるので、すぐ無効になることはありません。

この API は本来は、userId を指定しますが、そもそもそれが判らないので、特別に"me"というキーワードが
用意されています。
"me"で取得されるのは、アプリケーションを作った"私"ではなく、「認可」を行ったユーザーになります。

ここでは、JSON文字列も表示していますので、ご自身でやってみられると、実際にどのような情報が取得できるかが判ります。

« 前頁 次頁 »