Google Finance APIの配信が停止して、株価の終値は証券会社のメールサービスを利用するという形で対応しました。為替レートの取得についてはopenexchangerates.orgというAPIを使うことにします。
無料アカウントを登録しよう
無料アカウントはメールアドレス認証で登録できます。ほかには名前を聞かれたかな。
無料アカウントには多少の制約があります。他にもあるかもですが、大きいのはこれぐらい。
- データ取得はひと月1000回まで
- 対USDのレートしか取れない
とはいえ、ひと月は672から744時間です。FXをやるのでなければ十分な回数だし、対円レートだって計算すればいいだけです。
シェルスクリプトで扱いやすいJSONデータが返ってくる
アカウント登録が完了するとAPIにアクセスするためのApp IDが送られてきます。
直近のレートを知りたければこんな感じ。
$ curl -s "https://openexchangerates.org/api/latest.json?app_id=********************************"
{
"disclaimer": "Usage subject to terms: https://openexchangerates.org/terms",
"license": "https://openexchangerates.org/license",
"timestamp": 1528250400,
"base": "USD",
"rates": {
"AED": *.****81,
"AFN": **.****32,
"ALL": ***.95,
〜以下略〜
タイムスタンプはunix時間です。1通貨一行でとても扱いやすい。日本円の対ドルレートが欲しければ。。。
cat latest.json | grep -e "JPY" | sed 's/[^.0-9]//g'
これで取り出せる。
タイムスタンプを見ればわかるとおり毎時0分0秒にデータが更新されているので、cronで毎時3分ぐらいに取得すればいいでしょう。
phpで計算しちゃう
取得したデータはWebサイトに表示したい内容なので、サイト自体をphpで作っておけばimportでファイルを取り込めます。
シェルスクリプトでもunix時間の変換や為替計算はできますが、どうせphpに組み込まれてしまうのであればphpで演算してしまえばいいでしょう。
#! /bin/sh
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
SOURCE=`mktemp`
KEY='********************************'
EP='https://openexchangerates.org/api/'
RES=`curl "${EP}latest.json?app_id=${KEY}" -o $SOURCE -w "%{http_code}"`
if test ${RES} -eq 200; then
TIMESTAMP=`cat $SOURCE | grep -e 'timestamp' | sed 's/[^0-9]//g'`
JPY=`cat $SOURCE | grep -e 'JPY' | sed 's/[^.0-9]//g'`
TWD=`cat $SOURCE | grep -e 'TWD' | sed 's/[^.0-9]//g'`
RUB=`cat $SOURCE | grep -e 'RUB' | sed 's/[^.0-9]//g'`
DISTINATION='/usr/local/www/travel/tour/rate-rub.php'
echo "<?php" > $DISTINATION
echo "printf('<p>参考為替レート:%3.4f JPY/RUB ',${JPY}/${RUB});" >> $DISTINATION
echo "echo '('.date('Y-m-d H:i:s',\"${TIMESTAMP}\").'取得)</p>';" >> $DISTINATION
echo "?>" >> $DISTINATION
DISTINATION='/usr/local/www/travel/tour/rate-ntd.php'
echo "<?php" > $DISTINATION
echo "printf('<p>参考為替レート:%3.4f JPY/NTD ',${JPY}/${TWD});" >> $DISTINATION
echo "echo '('.date('Y-m-d H:i:s',\"${TIMESTAMP}\").'取得)</p>';" >> $DISTINATION
echo "?>" >> $DISTINATION
fi
rm $SOURCE
こんな感じで取り込んだデータを表示しているサイトがこちら。