為替相場の自動取得

米ドル建一時払い終身保険に加入しました。加入時の利率に応じた定期支払金を毎年米ドルで受け取ることとなります。

通常、銀行などで円をドルに両替してもらうにはTTSというレートを使用されます。しかし保険の場合、加入時はTTM+50銭というレートを使用してくれるので、若干有利です。

一方、毎年受け取った米ドルを日本円に両替する場合はTTBというレートが使われますので、日々のTTBの動きは把握しておきたいところです。

ということで、為替相場を自動的に取得しデータベースに登録するシェルスクリプトを作成してみました。TTM+50銭とTTM-50銭の値は 日本生命 のホームページから取得します。一方、TTSとTTBは 三菱UFJ銀行 のものを使用しました。

 

#!/bin/bash

mysql -h 192.168.0.16 life_log << _SQL_
 create table if not exists dollar(
  seq int primary key auto_increment,
  kind varchar(10),
  UpdateDate date,
  rate float,
  insertDate datetime,
  comment varchar(20)
 );
_SQL_
work=`test_day | head -1`
if [ $work = "OFF" ]
then
 echo `date` "市場は休みです"
 exit
fi

# ニッセイ指定通貨建積立利率変動型一時払終身保険(米ドル建・豪ドル建) 為替レートのダウンロード
wget https://va-dmn2.nissay.co.jp/vkhengaku/servlet/JP.co.nissay.KE8.KE8S007Z -O nissay.html
# MUFG外国為替相場一覧表のダウンロード
wget https://www.bk.mufg.jp/gdocs/kinri/list_j/kinri/kawase.html -O mufg.html

# 円入金特約用為替レート(TTM+50銭)
date=\
`w3m nissay.html |\
 sed -e "s/\*//g" |\
 sed -n '14p' |\
 awk '{print $1}' |\
 nkf -Z |\
 sed -e "s/年/\-/g" |\
 sed -e "s/月/\-/g" |\
 sed -e "s/日//g" `
rate=\
`w3m nissay.html |\
 sed -e "s/\*//g" |\
 sed -n '13p' |\
 awk '{print $2}' |\
 nkf -Z`
echo TTM+50 ${date} ${rate}
mysql -h 192.168.0.16 life_log << _SQL_
 insert into dollar(kind,UpdateDate,rate,insertDate)
    value("TTM+50","${date}","${rate}",now());
_SQL_

# 円支払特約用為替レート(TTM-50銭)
date=\
`w3m nissay.html |\
 sed -e "s/\*//g" |\
 sed -n '89p' |\
 awk '{print $1}' |\
 nkf -Z |\
 sed -e "s/年/\-/g" |\
 sed -e "s/月/\-/g" |\
 sed -e "s/日//g" `
rate=\
`w3m nissay.html |\
 sed -e "s/\*//g" |\
 sed -n '88p' |\
 awk '{print $2}' |\
 nkf -Z`
echo TTM-50 ${date} ${rate}
mysql -h 192.168.0.16 life_log << _SQL_
 insert into dollar(kind,UpdateDate,rate,insertDate)
    value("TTM-50","${date}","${rate}",now());
_SQL_

# 電信売り相場(TTS)
date=\
`w3m mufg.html |\
 sed -n '25p' |\
 nkf -Z |\
 awk -F":" '{print $2}'`
rate=\
`w3m mufg.html |\
 grep USD |\
 awk '{print $4}'`
echo TTS ${date} ${rate}
mysql -h 192.168.0.16 life_log << _SQL_
 insert into dollar(kind,UpdateDate,rate,insertDate)
    value("TTS","${date}","${rate}",now());
_SQL_

# 電信買い相場(TTB)
date=\
`w3m mufg.html |\
 sed -n '25p' |\
 nkf -Z |\
 awk -F":" '{print $2}'`
rate=\
`w3m mufg.html |\
 grep USD |\
 awk '{print $7}'`
echo TTB ${date} ${rate}
mysql -h 192.168.0.16 life_log << _SQL_
 insert into dollar(kind,UpdateDate,rate,insertDate)
    value("TTB","${date}","${rate}",now());
_SQL_

rm nissay.html mufg.html

 ニッセイのホームページからは、13行目と14行目あるいは88行目と89行目を取り出して加工するという方法で値を取り出しています。一方銀行のホームページも、日付は25行目のものを半角に変換(nkf -Z)して使用していますが、レートはUSDという文字列を含む行をgrep で検索して、第4フィールドと第7フィールドをawkで取得するという方法をとっています。

このシェルスクリプトを crontab に登録し、平日正午頃に実行することで日々の相場の値がmysqlに登録されるようになりました。

f:id:S_E_Hyphen:20190727150956j:plain