mixiアプリにおけるRestful API for PCのJavaサンプルコード

mixi Developer Center (ミクシィ デベロッパーセンター) » 2-legged OAuthによるAPIアクセス
mixi developer Centerにはphp, python, perlのサンプルコードが記載されているが、Javaのサンプルコードがない。
そこでJavaでRestful API for PCによって、アカウント情報を取得する方法を調べた。

OAuthライブラリ

2-legged OAuthによる通信には、ApacheJMeter_oauth-v2.jarを使用。
oauth - Project Hosting on Google Codeの右のほうにある。

依存ライブラリ

oauth-httpclient4

Source path: svn/ code/ maven/ net/ oauth/ core/ oauth-httpclient4/ 20090913/ oauth-httpclient4-20090913.jar
上記はコンパイル時にエラーだが、下記のライブラリにも依存してる。

commons-logging-1.1.1.jar
httpclient-4.0.1.jar
httpcore-4.0.1.jar

サンプルコード

2-legged OAuth and the Gmail atom feed - Stack Overflowのコードを参考にさせていただきました。

import java.net.URL;

import net.oauth.OAuth;
import net.oauth.OAuthAccessor;
import net.oauth.OAuthConsumer;
import net.oauth.OAuthMessage;
import net.oauth.ParameterStyle;
import net.oauth.client.OAuthClient;
import net.oauth.client.httpclient4.HttpClient4;

public class TwoLeggedOAuthSample {
	private static String CONSUMER_KEY = "YOUR_CONSUMER_KEY"; 
	private static String CONSUMER_SECRET = "YOUR_CONSUMER_SECRET"; 

	public static void main(String[] args) throws Exception {
		OAuthConsumer consumer = new OAuthConsumer(null, CONSUMER_KEY, CONSUMER_SECRET, null);

		String user = "00000000"; 
		String baseFeed = "http://api.mixi-platform.com/os/0.8/people/@me/@self";
		URL url = new URL(baseFeed + "?xoauth_requestor_id=" + user);

		OAuthAccessor accessor = new OAuthAccessor(consumer);
		accessor.consumer.setProperty(OAuth.OAUTH_SIGNATURE_METHOD, OAuth.HMAC_SHA1);

		OAuthMessage requestMessage = accessor.newRequestMessage(OAuthMessage.GET, url.toString(), null);
		System.out.println(" request: " + requestMessage);

		OAuthClient client = new OAuthClient(new HttpClient4());
		OAuthMessage responseMessage = client.invoke(requestMessage, ParameterStyle.AUTHORIZATION_HEADER);

		System.out.println(" response: " + responseMessage.readBodyAsString());
	}
}

CONSUMER_KEYとCONSUMER_SECRETはそれぞれmixiアプリ設定画面から取得した値、userは自分のpersonIdに書き換える。
mixiアプリにアクセスしたあと、上記コードを実行すると、JSON形式で自分の各種情報が取得される。
依存ライブラリが多いので、Google App Engineで使う場合は、spin-upに影響しそう。