こみゅすけから参加者一覧を取得する
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で使え切れません。