株価のRSS(その2)
先日、XML::RSSの確認を行いました。次は株価のデータを取得する必要があります。
株価データは色々なところでWebから参照できますが、今回はYahoo!ファイナンスから株価データを取得することにします。
Yahoo!ファイナンスでは株価のデータをHTMLで取得できます。HTMLを解析して株価データを取り出す必要があります。こういう処理をHTML Hackと言われているみたいです。
単にタグをパースすることでも取得できますが、今回はTemplate::Extractモジュールを利用します。Template::ExtractはTemplateとHTML文書を比較して該当する部分を取得するモジュールです。
使い方は、こんな感じです。
use Template::Extract;
my $obj = Template::Extract->new;
my $ext = $obj->extract($template, $document);
今回は$documentにはYahoo!ファイナンスから取得したHTMLデータを、$templateには以下のようなテンプレートを使用します。
<td nowrap align=left><a href="[% ... %]">[% trade_code %]</a></td>
<td nowrap align=center>[% market_place %]</td>
<td nowrap align=left><small>[% company_name %]</small></td>
<td nowrap align=center>[% trade_time %]</td>
<td nowrap><b>[% last_trade %]</b></td>
<td nowrap>[% change %]</td>
<td nowrap>[% change_percent %]</td>
<td nowrap>[% volume %]</td>
<td nowrap align=center><small><a href="[% chart_url %]">
extractした結果は$extに入ります。$extから取り出すには以下のようにします。
my $trade_code = $ext->{'trade_code'};
こんな感じにですかね。
http://www.xlabo.net/test/test_htmlhack.cgi?9991
上記のcgiでは、HTTPアクセスにLWPやHTTP::Request::Commonといったモジュールを利用してます。また、URLにコードを付けることでその株価を表示するようにしてます。"&"で区切ると複数指定できるようにしてます。
こんな感じ。
http://www.xlabo.net/test/test_htmlhack.cgi?9991&9992
ファイルの内容はこちらから。
さて、これで準備は出来ました。あとは取得したデータをXML::RSSモジュールで出力してやればいいことになります。
