2010年10月3日日曜日

mixi Graph APIの認証

http://developer.mixi.co.jp/connect/mixi_graph_api/api_auth

にある認可方法のJava実装の説明です。


まず、使用するには開発者登録を行い
https://sap.mixi.jp/
で新規サービス追加を行っておく必要があります。

まずURLを作って以下にリダイレクトします。

String endPoint = "https://mixi.jp/connect_authorize.pl";

String url = endPoint + "?response_type=code";

String key = "キー";
String scope = "r_profile";
String display = "pc";

url += "&client_id=" + key;
url += "&scope=" + scope;
url += "&display=" + display;

return redirect(url);

※redirect関数はslim3の関数です。
 このURLにリダイレクトすればOKです。

するとmixiの認証画面に飛びます。
許可がおりるとサービスを作成した際のURLに遷移します。
キーにはサービス作成後に生成される「Consumer Key」を指定しておきます。
r_profileの指定は使用するサービスによって変更します。

認可手順のところに記述してありますね。




//コードを取得
String token = requestScope("code");
String endPoint = "https://secure.mixi-platform.com/2/token";
String args = "";

String key = "サービスのKEYを指定";
String scret = "サービスのSECRETを指定";
String uri = "http://mixi.latest.secondarykey.appspot.com/callback";

args += "grant_type=authorization_code";
args += "&client_id=" + key;
args += "&client_secret=" + scret;
args += "&code=" + token;
args += "&redirect_uri=" + uri;

String json = post(endPoint,args);
Map jsonMap = createJsonMap(json);

String email = "メールアドレス";
String url = "http://api.mixi-platform.com/2/search/people?q=" + email;
//String url = "http://api.mixi-platform.com/2/people/@me/@self";

get(url,jsonMap.get("access_token"));

return forward("oauth.jsp");


飛んできたURLの引数で「code」がきますので
それを元にURLを作成します。
「redirect_uri」は、、、、何設定するのかな?多分合ってない気がする。。。
それをPOSTで投げます。
post()はオリジナルでHttpURLConnectionを利用して投げています。

その戻り値はjsonで戻ってきます。

{"refresh_token":"a4a634845360522a85cc030e043cb869d2536aa",
"expires_in":900,
"access_token":"8b17d199e43c879c1a015019cf55d9ecd0e2503",
"scope":"r_profile"}

こういう感じのjsonです。

この「access_token」を利用して、利用したいサービスにサクセスします。
ここではPeople lookup APIにアクセスして、
マイミクの情報を取得しています。

get()ではHttpURLConnectionに対して

connection.setRequestProperty("Authorization", "OAuth " + oauth);


と認証情報にアクセストークンを指定する必要があります。

このブログを記述している時点では
メールアドレスによる検索は認可されたユーザの
マイミクでないと検索できないようで、404を返してきていました。
テスト時に自分のメールアドレスを検索してて
「なんで404なんじゃー!」って思っていましたが、仕様のようです。

0 件のコメント: