commons-httpclient | フリーエンジニアを辞めました

commons-httpclient

Yahoo!に Yahoo!ファイナンスという株価情報の提供ページがあります。20分遅れではありますが、東証、大証、JASDAQなど国内の上場株式と公募型投資信託の最新の価額を無料で見ることが出来ます。Yahoo!ファイナンスの凄いところは、最新の株価だけでなく指定した期間の過去の株価情報も見られることです。


Yahoo!ファイナンスから株価情報を取り出すプログラムを作ってみました。そんなものを何に使うかというと、家計簿ソフトを作りたいと考えているからです。


今現在はMicrosoft Moneyを使って家計簿をつけています。私はポイント欲しさにクレジットカードを好んで使うのですが、幾ら使ったかをしっかり管理するのに家計簿ソフトを使っています。MS Moneyの便利なところは、日々の収支管理だけでなく、株式や投資信託の売買も記録しておくと、インターネット経由で最新の価額情報を取り込んで時価評価額を計算してくれることです。


練習がてらこのソフトと同じようなアプリケーションを作ってみようと思った次第です。その取っ掛かりとして価額情報取得から手をつけました。MS Moneyの場合はMSNマネーから情報を取得しているようですが、一般のアプリケーションにAPIが公開されていないので、MSNマネーから株価情報を取得することは出来ません。そこで思いついたのがYahoo!ファイナンスのHTMLを解析して価額を取り出すことです。


HTTPで接続するので、java標準APIのHttpURLConnectionクラスを使っても実現できるかも知れませんが、オープンソースのcommons-httpclientを使って少しでも手間を省くようにしました。


common-httpclientは機能が豊富で、そのホンの極一部しか使っていないですが、せっかく覚えたノウハウが揮発しないように残して起きます。


入手先:http://jakarta.apache.org/httpcomponents/httpclient-3.x/

他に必要なライブラリ

まずはWEBサーバにアクセスしてHTML文を取得する方法です。

String url = null;
/* url を設定する */
// WEBサーバに接続する
HttpMethod method = new GetMethod(url);
HttpClient client = new HttpClient();
client.executeMethod(method);
 // html情報のInputStreamからStringに組み立てなおす
InputStream is = method.getResponseBodyAsStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr);
StringBuffer html = new StringBuffer();
String line = reader.readLine();
while(line != null) {
    html.append(line);
    line = reader.readLine();
}

次にHTML文の解析です。価額情報が</small></td><td><small><b>の直後に位置しているルールを利用して、価額情報を取り出します。


String price = html.split("/small></td><td><small>")[1];
price = price.split("<")[0];
株価情報は著作権で守られている情報ですから、Yahoo!ファイナンスで集めた株価を売ったりしないようにしましょう。お月様