opensocial-java-clientを利用してmixiアプリのRESTfulAPIを利用するでござる

mixiアプリでユーザのプロフィールやマイミク情報を取得するためにRESTful APIというものがあります
APIにアクセスするためにはConsumer KeyとSecretを用いた署名(OAuth Signature)をつける必要があり、かなり面倒くさいプログラムを書く必要が出てきてしまいます。
そんなあなたのためにopensocial-java-clientというものが用意されています!!!
ほかにもpython php Ruby版があるようです。

さて、とりあえずwikiを見ながら使ってみようと思ったら既に仕様が変わっているらしい?ので自分で書いてみることにしました。

OpenSocialProvider provider = new OpenSocialProvider(requestTokenUrl, authorizeUrl, accessTokenUrl, restEndpoint, rpcEndpoint, providerName, signBodyHash, isOpenSocial);
OpenSocialClient client = new OpenSocialClient(provider);

ってrequestTokenUrlとかauthorizeUrlなんてしらねーよ!!となっていろいろいじっても500エラーしか返ってこなかった・・・
ソースを見ていたらprovidersに各opensocial対応のサイト用にクラスが用意されているみたいです。。(GoogleProvider.java FriendConnectProvider.java MySpaceProvider.java etc..)

ということでMixiProvider.javaを作ってjarファイルをエクスポートすることにしました(オープンソース最高!)

以下ソースコード

public class MixiProvider extends OpenSocialProvider {
	public MixiProvider(){
		super();
		restEndpoint = "http://api.mixi-platform.com/os/0.8"; //mixi OpenSocial RESTful APIのエンドポイント
		providerName = "mixi";
		signBodyHash = false;
		isOpenSocial = true;
	}
}

ってこれで動くのかよ・・・と思ったら普通に動いた!!!

ということで自分のプロフィールを取得してみましょう

String consumerKey = "hoge";    //各アプリの設定ページに記載されてます
String consumerSecret = "fuba"; //各アプリの設定ページに記載されてます
String viewerId = "bar";        //クエリのopensocial_owner_idを取得

OpenSocialClient client = new OpenSocialClient(new MixiProvider());

client.setProperty(OpenSocialClient.Property.CONSUMER_SECRET, consumerSecret);
client.setProperty(OpenSocialClient.Property.CONSUMER_KEY, consumerKey);
client.setProperty(OpenSocialClient.Property.VIEWER_ID, viewerId);
client.setProperty(OpenSocialClient.Property.DEBUG, "true");

OpenSocialPerson person = client.fetchPerson(viewerId);

System.out.println(person.getField("displayName"));
System.out.println(person.getField("id"));
System.out.println(person.getField("thumbnailUrl"));

出力結果

デザインルール
mixi.jp:26138331
http://profile.img.mixi.jp/photo/member/83/31/26138331_4292835152s.jpg

おまけでフレンド情報の取得

Collection<OpenSocialPerson> friends = client.fetchFriends();
System.out.println("friends: "+friends.size());
for(OpenSocialPerson friend : friends){
	System.out.println(friend.getField("displayName"));
}

出力結果

friends: 2
デザインルール1
mixi公式


その他細かい点はopensocial-java-clientのgoogle codeページで公開されているものや
opensocial-java-client-20091229.zip内にあるsamplesを参考にしてみてください!!