見積もりが大変なのでなんとかしたい件

寒くなってきて、薪ストーブの見積もりがちらほら。

そういえば、自動見積り計算機を作ってみよう、なんてほざいたはいいけど、すっかり忘れていたことを今しがた思い出しましたが、早速壁にぶち当たりました。

為替レートってどうやって取得しようかしら、ということです。

ちょっと検索したら、Google の JSON API がヒットしたんですが、404 だったんです。

代わりに見つけたのがこれ。

yql を使う方法が回答されていました。

必要なのは、CADJPY なので、以下のように書き換えました。

http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.xchange where pair in ("CADJPY")&env=store://datatables.org/alltableswithkeys

答えは、XML で戻してくれて、

<?xml version="1.0" encoding="UTF-8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="1" yahoo:created="2015-11-10T16:31:22Z" yahoo:lang="en-us"><results><rate id="CADJPY"><Name>CAD/JPY</Name><Rate>92.9053</Rate><Date>11/10/2015</Date><Time>4:31pm</Time><Ask>92.9156</Ask><Bid>92.8950</Bid></rate></results></query><!-- total: 938 -->
<!-- pprd1-node250-lh1.manhattan.sg3.yahoo.com -->

ってな具合なわけです。

というわけで、早速実装しましょう。

<?php
if ($xml = simplexml_load_file('http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20(%22CADJPY%22)&env=store://datatables.org/alltableswithkeys')) {
    print (string)($xml->xpath('//rate[@id="CADJPY"]/Rate')[0]);
}
?>

都度都度 yql に問い合わせが発生するので、結果をキャッシュするようにするなどは必要でしょうし、エラー処理も一切省いてますが、為替レートに基づいた見積もりを作れるようになるわけで、多少は正確になりそうです。

ていうか、xpath 式とか、久しぶりすぎてすっかり忘れてましたが、最近の若い人だったら、生まれてませんとか言われそうですね。

まあ、今日は眠いんで、ここまで。

ContactXML でハマる

住所録ソフトとして筆まめを使っていると以前書きましたが、とてもよくできたソフトではあるものの、やはり不満な点もあり、データを MySQL に引っ越そうとしています。

そのためには、データを汎用的な形式で書き出す必要があるのですが、タブ区切りを選ぶと、年賀状などの出受の記録が失われてしまいます。(すべてのデータが書き出せない)
試しに ContactXML 形式を選択すると、それらしいデータが出力されているので、早速 PHP で読み込むためのスクリプトを作成することとしました。 Continue reading