Google Finance APIを使った株価取得スクリプト

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

さて、ダウの犬の自動計算用データの読み込みができるようになったら、今度はデータの自動更新がしたいよね。

Google Finance APIを使う

ちょっと調べてみたところ、かつてGoogleが株価データを提供していたっぽい。それがどうも今も生きてるみたい。

この辺に情報があります。

Real-Time Google Finance API を使って株価を取得する|バツイチとインケンのエンジニアブログ

キーになるのはこのアドレス。

http://www.google.com/finance/getprices?p=取得期間&i=取得間隔(秒)&x=取引所コード&q=証券コード

このアドレスにアクセスすると、数行のヘッダののちに以下フォーマットのデータが返ってきます。

日付(aで始まるunix秒),終値,高値,安値,始値,出来高

日付は注意が必要で、取得期間が1日のときのみ上記フォーマットになりますが、それ以外はaで始まるunix秒に加えてオフセット日数が加わります。

例えば10日分のログを取ると以下のようになります。

EXCHANGE%3DTYO
MARKET_OPEN_MINUTE=540
MARKET_CLOSE_MINUTE=900
INTERVAL=86400
COLUMNS=DATE,CLOSE,HIGH,LOW,OPEN,VOLUME
DATA_SESSIONS=[MORNING,540,690],[AFTERNOON,750,900]
DATA=
TIMEZONE_OFFSET=540
a1500876000,x079,x122,x045,x062,x938000
1,x107,x178,x089,x092,x543500
2,x186,x203,x171,x184,x953100
3,x250,x276,x170,x174,x995900
4,x228,x260,x205,x212,x938900
7,x234,x274,x216,x218,x543700
8,x300,x308,x220,x239,x856600
9,x300,x347,x296,x330,x601100
10,x225,x313,x202,x311,x286000

これは2017年8月4日の日中に取ったものですが、a1500876000の行は7月24日のデータです。これを起点に前日の8月3日までの休場日を除いた10日分のデータが取得できています。(データは一部潰してあります)

シェルスクリプトで株価を取得

こういうのは普通Pythonあたりでやるのかもしれないけれど、Python知らないし別にシェルスクリプトでもできるし。。。

3行目にあるパスワードの暗号化の詳細はMySQLのパスワードを隠蔽するを見てね。

#! /bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
PASSWORD=`openssl rsautl -decrypt -inkey ~/.ssh/id_rsa -in password.rsa`
DIR="/usr/local/www/junk/wp-content/themes/xeory_base-child/"
TARGET="${DIR}stock.list"
CMD="use d_tpx;"
for n in `seq 1 10`;
do
  CODE=`head -1 $TARGET | cut -d ',' -f $n`
  RESULT=`curl -s "https://www.google.com/finance/getprices?p=1d&i=86400&x=TYO&q=${CODE}" |\
    grep -e '^a[0-9,.]*$' | cut -d ',' -f 1,2`
  PRICE=`echo $RESULT | cut -d ',' -f 2`
  DATE=`echo $RESULT | cut -d ',' -f 1 | tr -d 'a'`
  CMD="${CMD}insert into price_${n} (log_date,price) values "
  CMD="${CMD}(str_to_date('`date -jf '%s' ${DATE} '+%Y%m%d'`','%Y%m%d'),${PRICE});"
done
echo $CMD | /usr/local/bin/mysql -uroot -p$PASSWORD

取得期間を一日(1d)、取得間隔を日足(86400)、取引所コードを東京証券取引所(TYO)に固定して、あとは取得する株式のコードを証券コードに入れるだけ。

stock.listは1行目がカンマ区切りの証券コードの羅列になっているテキストなので、ここからheadとcutで抽出してそれぞれの株価を取得します。

取得データも必要部分をgrepで抽出したあとはカンマ区切りのデータなので日付と終値をそれぞれ抽出しますが、日付はUNIX時間なのでDATEコマンドを使って普通の日付フォーマットに戻します。

シェルスクリプトで抽出したデータはsql文に整形してMySQLに保存します。

このように取得部だけを切り離してデータをキャッシュしておくことで、ダウの犬の自動計算用PHPスクリプトに何回アクセスしてもGoogleには負荷を掛けないようにできます。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

スポンサーリンク




コメントを残す

*