読者です 読者をやめる 読者になる 読者になる

こみゅすけから参加者一覧を取得する

JSON Java 駄コード

EclipsePlugin勉強会の参加者が増えてないかなーとわくわくしながらこみゅすけにアクセスしていたのだけれども、ふとHTMLで一覧を出力してくれないかなーと思った。よく考えてみたら、こみゅすけはAjaxを駆使して作られている。ん?そういえば一覧は不思議な動きをするぞ?
ということで、FireFoxのアドイン「Live HTTP headers」でどういうリクエストとレスポンスが飛んでるか見てみたら、受け口とJSONで通信していることがわかった。こみゅすけの管理人、よういちろうさんから公開してよいとお許しが出たので、駄コードをさらしてみる。例によってJUnit4を実行するランチャとして使ってみた。

package learning;

import static org.junit.Assert.assertNotNull;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Date;

import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;
import org.junit.Test;

public class JSONLearning {

  @Test
  public void leaningJSON() throws Exception {
    // 2007 11 EclipsePlugin勉強会
    String meetingId = "57";
    URL url = new URL("http://commusuke.eisbahn.jp/ajax/attendances/"+meetingId);
    assertNotNull(url);
    BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
    String line = reader.readLine();
    JSONTokener tokener = new JSONTokener(line);
    JSONObject value = (JSONObject) tokener.nextValue();
    JSONArray array = value.getJSONArray("attendances");
    for(int i = 0; i < array.length(); i++){
      JSONObject jsonObject = array.getJSONObject(i);
      String name = jsonObject.getString("nick_name");
      String comment = jsonObject.getString("comment");
      Date date = new Date();
      long time = jsonObject.getLong("updated_at");
      date.setTime(time * 1000L);
      String formated = String.format("[%tF]%s:%s", date,name,comment);
      System.out.println(formated);
    }
  }
}

使用したJSONのライブラリはorg.jsonを使ってみた。json-libも試したけど、とってもFatで使え切れません。