Groovyではてブカウンター風はてなスターカウンターを作成する 7)はてなスターAPIを使用してはてなスター数を取得する
昨日までに、カウンターの画像はできたので、はてなスターAPIを使用してはてなスター数を取得する。
ソース
import net.arnx.jsonic.JSON; class HatenaStar { String title; String uri; Integer star_count; } myURI = new URL("http://s.hatena.ne.jp/blog.json/http://d.hatena.ne.jp/orangeclover/") hatenastar = JSON.decode(new InputStreamReader( myURI.openStream() ,"UTF-8"), HatenaStar.class) println hatenastar.star_count
9行!!表示の都合で11行になってるけど。
実行結果(groovy)
[D:\workspace\groovy_SandBox]groovy -classpath C:\usr\lib\jsonic\jsonic-1.1.3\jsonic-1.1.3.jar HatenaCount.groovy 14
実行結果(groovysh)
[D:\workspace\groovy_SandBox]groovysh -classpath C:\usr\lib\jsonic\jsonic-1.1.3\jsonic-1.1.3.jar
groovy:000> load HatenaStarCount.groovy ===> [import net.arnx.jsonic.JSON;] ===> true ===> http://s.hatena.ne.jp/blog.json/http://d.hatena.ne.jp/orangeclover/ ===> HatenaStar@df2940 14 ===> null
その9行を書くのにどのくらいの時間を費やした・・・(まぁ3時間くらいだと思うけど。)
JSONってどう使うんだよ?から始めたので、そこからのメモ。
はじめに考えた処理のイメージ
1.JSONを取得
URI
http://s.hatena.ne.jp/blog.json/http://d.hatena.ne.jp/orangeclover/
返ってくるJSONの形式
はてなスターカウントAPIのリファレンスに書いてある。
{
"title":"\u306f\u3066\u306a\u30b9\u30bf\u30fc\u65e5\u8a18",
"star_count":"72464",
"uri":"http://d.hatena.ne.jp/hatenastar/"
}
2.JSONを解析
3.star_countの値を取得
まずJSONを使うには?
JSONを読み込むJava用のライブラリがあるだろう。
ググたら、何個かあるな。
JSONICかJson-libが有名どころなのかな。
JSONICの方が簡単そう。Json-libは依存してるライブラリが多くて嫌だな。
JSONICを使ってみる。
ダウンロード先
http://jsonic.sourceforge.jp/index.html#download
そもそもどやってJSONを取得するんだ?
はてなAPIのサンプルをJavaで作ってみた(はてなブックマーク件数取得API編)
XML-RPC を使うの?
はてなスターカウントAPIはJSON形式だから、JSON-RPC というのがあるのか?
http://oss.metaparadigm.com/jsonrpc/
なんか違うような。。。
公式のサンプル? HateneaStar.js みたいにこんなに処理が必要なのか??
ライブラリを使えば、こんなに多くの量を書く必要はないはず。
javascript以外の言語で書かれてるものはないのか?
Rubyだとこんな感じ
はてなスターの星の数を数えるRubyスクリプトを書いてみた
まずは、数を取得したいだけなんだけどな。。。
まぁ、こんな感じに、URIにアクセスしてそのままInputStreamReaderとして扱ってしまえばいいのかも。
URL myURI = new URL(uri); InputStreamReader isr = new InputStreamReader( myURI.openStream() ,"UTF-8") );
JSONを解析はどうやるんだ?
イメージ的にはこんな感じかな。
Class HatenaStar { String title; String uri; Integer star_count; } HatenaStar hatenastar = JSON.decode(new FileReader("HatenaStar.txt"), HatenaStar.class); /* もしくは */ HatenaStar hatenastar = JSON.decode(new FileInputStream("HatenaStar.txt"), HatenaStar.class);
ここまで調べるのに時間がかかった。
Groovyのスクリプト書き始めたら、あっという間。
JSONのimport忘れと「URI myURI = new URI(・・・)」と書いてエラーになったが、
3分もかかってない。
最近のキーワード
- API
- Amazonアソシエイト
- F-2
- Google AdSense
- Google Toolbar
- JVM
- Java
- Ruby
- Windows XP
- codehaus
- firefox
- iTunes
- lifehack
- はてなスター
- はてなモジュール
- はてブ
- ほんたった
- 英辞郎
- 毎日コミュニケーションズ
Groovyイン・アクションを読むならあった方が便利かな。