hatenaGraph

Favorites APIからお気に入りユーザの一覧を取得してグラフとして可視化するプログラムを作ってみた.
Main.javaがエントリーポイントで引数にuserIdを与えるとそのユーザをノードとして表示する.クリックするとつながってるユーザをひっぱってきてグラフに追加する.*1
ソース : http://www.stat.t.u-tokyo.ac.jp/~tsubosaka/src/hGraphSrc.zip

必要だったのはuserIdを指定するとJSONをパースして,お気に入りのリストを返す関数だけだったんだけどついでだから可視化してみました*2
実行環境はjavascriptのevalをしている関係でjdk 6.0以上が必要.あと可視化の方はJUNGと依存しているライブラリを全部取ってきてコンパイルする必要があります.

追記:データはJSON形式で来るのでJavaから使うときには配列なりリストにする必要があるのだけど今回はjava SE 6でJavaScriptが標準でサポートされているのでそれを使いました.

package json;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class JSONTransfer {
  public static String[] jsonToUserList(String json) throws ScriptException{
    String script =  "ujson = "+ json +";" +
                     "users = ujson['favorites'];" +
                     "var a = java.lang.reflect.Array.newInstance(java.lang.String , users.length); " +
                     "for(i = 0 ; i < users.length ; i++){" +
                       "user = users[i];" +
                     "  a[i] = user.name;" +
                     "}" +
                     "a;";
    // create a script engine manager
    ScriptEngineManager factory = new ScriptEngineManager();
    // create a JavaScript engine
    ScriptEngine engine = factory.getEngineByName("JavaScript");
    // evaluate JavaScript code from String
    try{
      return (String[])engine.eval(script);    	
    }catch (ScriptException e) {}
  }
}

*1:jsonファイルをtmpというフォルダを作ってローカルにキャッシュします.あと前のアクセスから10秒経過してない場合は10秒経過するまで待ちます.

*2:ついでのほうがはるかに製作時間がかかってるけど