【PHP】GoogleファイナンスのWebAPIで株価を取得

プログラミング

Googleファイナンスから株価を取得してみます。

まずは使ってみよう

まずは深く考えずに、[証券コード]をどこかのコードに置き換えてアクセスしてみます。

https://www.google.com/finance/getprices?q=[証券コード]&x=TYO&i=86400&p=6M&f=c

例えば「ニトリホールディングス」なら9843なので、こうなります。

https://www.google.com/finance/getprices?q=9843&x=TYO&i=86400&p=6M&f=c

中身はというと、以下のようになっています。

EXCHANGE%3DTYO
MARKET_OPEN_MINUTE=540
MARKET_CLOSE_MINUTE=900
INTERVAL=86400
COLUMNS=CLOSE
DATA_SESSIONS=[MORNING,540,690],[AFTERNOON,750,900]
DATA=
TIMEZONE_OFFSET=540
18120
18750
18075
17895
17695
以下略

1行目から8行目はヘッダーのようなもので取引所の立会時間やローソク足の長さなど、9行目以降が株価です。今回の例では1日単位の終値だけを取得しています。

取得する値はパラメータで指定することができます。

主に使用するのは以下の5点です。

  • q:証券コード
  • x:取引所(国内はTYO)
  • i:ローソク足の長さ
  • p:取得するデータの期間
  • f:取得するデータの種類
q:証券コード

証券コードを指定します。

インデックス系にもコードが存在します。確認方法は後述します。

x:取引所

取引所コードを指定します。

国内はTYOでいいっぽいです。米国市場だとNASDAQとか。Googleファイナンスを確認するのが手っ取り早いです。方法は後述します。

i:ローソク足の長さ

秒単位です。

  • 分足:60
  • 時足:3600
  • 日足:86400
p:取得するデータの期間

単位はY、M、d、mの4種類で指定します。

  • Y:年
  • M:月
  • d:日
  • m:分

半年のデータが欲しければ6M、10日分のデータが欲しければ10dとなるわけです。

f:取得するデータの種類

データの種類を指定します。

  • d:日時(UNIXタイムスタンプ)
  • o:始値
  • c:終値
  • h:高値
  • l:安値
  • v:出来高

複数のデータが欲しい場合にはカンマ区切りでつなげます。

データの見方

データ自体は終値や高値がカンマ区切りで並んでいるだけなので読み解きやすいです。しかし、日付のみ少しだけ特殊です。

以下のデータは日足で日付と終値を取得したものです。パラメータをd,cと指定しています。

https://www.google.com/finance/getprices?q=9843&x=TYO&i=86400&p=24M&f=d,c

EXCHANGE%3DTYO
MARKET_OPEN_MINUTE=540
MARKET_CLOSE_MINUTE=900
INTERVAL=86400
COLUMNS=DATE,CLOSE
DATA_SESSIONS=[MORNING,540,690],[AFTERNOON,750,900]
DATA=
TIMEZONE_OFFSET=540
a1464933600,11160
3,11220
4,11440
5,11460
6,11460
中略
724,18730
725,18985
726,19030
727,18715
728,18810

日付は1行目のみa1464933600となっているのがわかります。

これは1文字目の「a」を除いた10桁の数字がUNIXタイムスタンプを表しています。1464933600を変換すると2016/06/03 15:00:00であることがわかります。

2行目以降は数字が並びますが、これは指定したローソク足の長さ分の間隔を表しており、例えば最後の728の実際の日付を取得するには以下の式で求めることができます。

1464933600 + (72886400)

86400は、iのパラメータで指定しているローソク足の長さです。

1行目のUNIXタイムスタンプ + (日付の値 * 指定したローソク足の長さ)

というわけです。

つまり、1527832800です。

UNIXタイムスタンプから変換すると、2018/06/01 15:00:00であることがわかります。Googleファイナンスは、常に現在を基準としたデータを返すため、データの最終行は取引所の直前の終了日時を表しています。

PHPでデータを取得

実際にPHPを使ってデータを取得してみます。

$url = “https://www.google.com/finance/getprices?q=9683&x=TYO&i=86400&p=6M&f=c“;

//Googleファイナンスからデータを取得

$data = fopen($url, “r”);

//データを1行ずつ取得。

//適当に加工したり、取捨選択したり。特に最初の8行はいらないことが多そう。
$array = array();
while ($line = fgets($data)) {
    array_push($array, $line);
}

証券コードと取引所の確認方法

Googleファイナンス(https://www.google.com/finance)を確認するとわかりやすいです。

▼赤く囲った部分の「INDEXNIKKEI: NI225」が取引所および証券コードを表しています。

コロンの左が取引所、右が証券コードです。

つまり、半年間分の日経平均株価を日足で終値だけ取得したいという時には、以下のようにパラメータを指定します。

https://www.google.com/finance/getprices?q=NI225&x=INDEXNIKKEI&i=86400&p=6M&f=c&df=cpct&auto=1

例えばアップルであれば取引所はNASDAQ、証券コードはAAPLとなります。

さいごに

以上を使ってこちらのサイトを作成しました。

株×ニュース-上場企業の最新のニュースとみんなのつぶやきをお届け

こちらを参考にさせていただきました。

Real-Time Google Finance API を使って株価を取得する

ありがとうございます。

タイトルとURLをコピーしました