ATND APIをGroovyで叩いてみる
イベント開催支援ツールであるところのATND(アテンド)にはAPIがありまして、これはごくごくシンプルなあれで御座います。使おうと思ったら、誰でも使う事ができます。例えば以下のアドレスにアクセスすると、「google」を含むイベント10件をXMLで取得できます。
http://api.atnd.org/events/?keyword=google
XMLが見えたならば、既にATND APIをブラウザで叩いたと言う事になります。しかしこれをJavaから叩こうと思うと、HTTP通信のあれとかそれとかしないといけないです。便利なライブラリもありますけど、探したり使ったりするのは面倒です。面倒だからGroovyで。
new URL('http://api.atnd.org/events/?keyword=google').text
これだけ。これで結果がStringで返ってきてしまうのがGroovyです。
実践
APIリファレンスをみてみると、色々パラメータが設定できるみたいです。検索条件はもちろん、レスポンス形式も選べます。とりあえずこんな感じで検索しましょうか。
これを取得するためのアドレスはこうなります。
http://api.atnd.org/events?ym=201107&keyword=java&format=json&count=100
JSONをどうやって読み込むか。ちょっと悩みかけたんですが、GroovyはJSONをネイティブサポートしてたりします。なのでそれで。で、取得した結果を日付順にソートして日付とタイトルを出力することにします。さらっと書きます。
import groovy.json.* def jsonText = new URL('http://api.atnd.org/events/?ym=201107&keyword=java&format=json&count=100').text def res = new JsonSlurper().parseText(jsonText) res.events.sort {it.started_at}.each { println "${it.started_at[0..9]} ${it.title}" }
……動かしてみました?動かないんですよねー。なんか「java.lang.StackOverflowError」とか言われたりしました。量が多いからダメなのかと思って、削っても改善しなくて。何でかなーと色々みてると、どうも概要に「\\」とかがあるとエラーになる模様。何か設定とかあるのかもしれませんが、概要は今回要らないのでテキストの段階で消しちゃいます。変換も早くなるよきっと。
できあがり
乱暴ですね。
import groovy.json.* def jsonText = new URL('http://api.atnd.org/events/?ym=201107&keyword=java&format=json&count=100').text def res = new JsonSlurper().parseText(jsonText.replaceAll('"description":".+?",','')) res.events.sort {it.started_at}.each { println "${it.started_at[0..9]} ${it.title}" }
実行結果。結構ありますねー。
2011-07-01 Javaコミュニティ@九州 セミナー
2011-07-02 音楽で食うためのアライアンスランチ
2011-07-02 若手IT勉強会#28( Secrets of the JavaScript Ninja 読書会 )
2011-07-03 Titanium mobileで作るスマートフォンアプリ講座(iii)
2011-07-04 WEBサービス開発者のはじめてのTitanium勉強会
2011-07-07 Java SE 7 リリース記念特別イベント懇親会 LT 募集
2011-07-07 Java SE 7 リリース記念特別イベント2次会
2011-07-09 サテライト #TDDBC 佐賀
2011-07-09 TDD Boot Camp in Tokyo #tddbc
2011-07-09 札幌 Java Conference 2011
2011-07-09 Qt名古屋勉強会 7/9
2011-07-09 省エネITを考える(第3回)
2011-07-09 札幌 Java Conference 2011 懇親会
2011-07-10 「日本Androidの会」茨城支部キックオフ
2011-07-15 Titanium Mobileを使ってアプリを作ろう
2011-07-16 関ジャバカンファレンス2011
2011-07-22 Advanced Tech Night No.2 「ジャバラーが知っておくべき最近の開発言語のこと」
2011-07-23 kanazawa.js v1.5 - Hello Titanium Mobile! -
2011-07-24 Titanium mobileで作るスマートフォンアプリ講座(iv)
2011-07-26 NFCハッカソン2011
2011-07-31 Sapporo.js-2011.07.31
1行でも書けるよ!
new groovy.json.JsonSlurper().parseText(new URL('http://api.atnd.org/events/?ym=201107&keyword=java&format=json&count=100').text.replaceAll('"description":".+?",','')).events.sort{it.started_at}.each{println "${it.started_at[0..9]} ${it.title}"}
実用性皆無だけど。