株価の取得

日本経済新聞のホームページに自動的にアクセスし、株価を取得するスクリプトを作ってみました。

 

#!/bin/bash
host="127.0.0.1"
work_dir="."
scode="xxxx" # 所望の銘柄コードです

# まだテーブルが作成されていない場合、
# 以下のようななテーブルを作成します。
mysql -h ${host} life_log << _SQL_
 create table if not exists stock(
  seq int primary key auto_increment,
  kind varchar(50),
  UpdateDate date,
  rate int,
  insertDate datetime,
  comment varchar(20)
 )ENGINE=InnoDB DEFAULT CHARSET=utf8;
_SQL_

# 本当はこの下に年末年始・祝日などを列挙する
# 仕組みもあるのですが、とりあえず土日を休日に
week_day=`date +'%u'`
work="ON"
case ${week_day} in
 [1-5]) work="ON";;
 *) work="OFF";;
esac
if [ $work = "OFF" ]
then
 printf "株価:%s市場は休みでした\n" `date "+%Y年%m月%d日"`
 exit
fi

# 日本経済新聞HPの特定銘柄をダウンロードします
wget -q https://www.nikkei.com/nkd/company/?scode=${scode} -O ${work_dir}/received.html

# m-headlineLarge_textというタグを目当てに銘柄名を取得します
# レコードの区切りがCR+LFなのでCRを除去します 
kind=\
`cat ${work_dir}/received.html |\
 grep m-headlineLarge_text |\
 sed -e 's/<[^>]*>//g' |\
 sed -e "s/ //g" |\
 sed -e "s/\r//g" `
# m-stockPriceElm_value nowというタグを目当てに現在価格を取得します
# 「円」の文字、および桁区切りのカンマを除去します
rate=\
`cat ${work_dir}/received.html |\
 grep m-stockPriceElm_value\ now |\
 sed -e 's/<[^>]*>//g' |\
 sed -e "s/ //g" |\
 sed -e "s/円//g" |\
 sed -e "s/\r//g" |\
 sed -e "s/,//g"`
# m-stockInfo_dateというタグを目当てに日付を取得します
date=\
`cat ${work_dir}/received.html |\
 grep  m-stockInfo_date |\
 sed -e 's/<[^>]*>//g' |\
 sed -e "s/ //g" |\
 sed -e "s/\r//g" `

# それぞれをデータベースに登録します
mysql -h ${host} life_log << _SQL_ #2> /dev/null
 insert into stock(kind,UpdateDate,rate,insertDate)
    value("${kind}","${date}","${rate}",now());
_SQL_


printf "株価:%s%sの株価は%s円でした\n" `date "+%Y年%m月%d日"` "${kind}" "${rate}"
rm ${work_dir}/received.html    

 crontab などに登録して定期的に実行すれば株価のデータベースが作成できます。