にある認可方法の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<string,string> 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");
- ,string>
飛んできた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なんじゃー!」って思っていましたが、仕様のようです。