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用のライブラリがあるだろう。
ググたら、何個かあるな。


JSONICJson-libが有名どころなのかな。
JSONICの方が簡単そう。Json-libは依存してるライブラリが多くて嫌だな。
JSONICを使ってみる。

ダウンロード先
http://jsonic.sourceforge.jp/index.html#download



そもそもどやってJSONを取得するんだ?

はてなAPIのサンプルをJavaで作ってみた(はてなブックマーク件数取得API編)
XML-RPC を使うの?


はてなスターカウントAPIJSON形式だから、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を解析はどうやるんだ?

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分もかかってない。

最近のキーワード







Groovyイン・アクション
Dierk Konig Andrew Glover Paul King Guillaume Laforge Jon Skeet
毎日コミュニケーションズ
売り上げランキング: 294340




Groovyイン・アクションを読むならあった方が便利かな。

ブックストッパー
ブックストッパー
posted with amazlet at 10.09.18

トモエ算盤
売り上げランキング: 614


Rubyレシピブックは「ほんたった」で立ててる

EDISON ほんたった黒(ハードケース入り)
株式会社エジソン
売り上げランキング: 2164