au 株コム証券のkabuステーション®APIで株価情報を取得してみる
取引した銘柄の最新の株価を取得したい
数年前からExcelで投資した取引情報等を記録してるのですが、
たまに過去に売却した株をずっと保有していればどうなっていたか?
と思うことがあり、その都度証券会社にログインしてその日の株価を確認してExcelに転記して確認してました。
取引履歴が多くなってきたので手動でやると時間がかかってしまうので自動化することに。
当初は株探等をスクレイピングして最新の株価を取得するようにしました。
スクレイピング自体がグレーな感じなのとHPのレイアウトが変更されたりすると
プログラムの修正が発生する。
ということでauカブコム証券が提供するAPIを利用することにしました。
kabuステーション®API利用設定
kabuステーション、kabuステーションAPIを利用するためにau 株コム証券にログインして申請します。
注意点1
kabuステーションの通常プランの利用に990円(税込)/月 が必要になります。
初回申込みの翌々月第1営業日まで無料。
その後も預かり資産や取引状態によって無料で利用を続けることも可能。
kabuステーションのダウンロードとインストール
下記よりsetup.exeをダウンロードしてインストール。
download.r10.kabu.co.jp
APIシステム設定
kabuステーションを起動する。
au 株コム証券の口座番号とパスワードを入力してログインする。
右上の</>を右クリック→APIシステム設定を選択
「APIを利用する」をチェックし、「APIパスワード(本番用)」、「APIパスワード(検証用)」に任意のパスワードを入力。
入力したパスワードは認証時のパスワードとして利用します。
設定後にkabuステーションを再起動する。
</>が緑色になればAPIが利用可能。
※ kabuステーション経由でデータを取得するため起動していないとデータは取得できません。
認証後に指定した銘柄の板情報を取得するサンプル
イオンの板情報を取得するPythonのサンプルプログラム。
import urllib.request import json import pprint # kabuステーションのAPIシステム設定で入力したAPIパスワード(本番用)を指定 obj = { 'APIPassword': 'password' } json_data = json.dumps(obj).encode('utf8') # APIトークン取得用のURL # リファレンス:https://kabucom.github.io/kabusapi/reference/index.html#tag/auth url = 'http://localhost:18080/kabusapi/token' # パラメーターをHTTPリクエストメッセージボディに設定 req = urllib.request.Request(url, json_data, method='POST') req.add_header('Content-Type', 'application/json') token = "" try: with urllib.request.urlopen(req) as res: content = json.loads(res.read()) # APIトークン token = content["Token"] except urllib.error.HTTPError as e: print(e) content = json.loads(e.read()) pprint.pprint(content) except Exception as e: print(e) # 板情報取得用のURL # http://localhost:18080/kabusapi/symbol/{symbol} # symbolには銘柄コード@市場コードを指定、イオンの場合は東証なので市場コードは1、銘柄コードは8267 # リファレンス:https://kabucom.github.io/kabusapi/reference/index.html#operation/boardGet url = 'http://localhost:18080/kabusapi/board/8267@1' req = urllib.request.Request(url, method='GET') req.add_header('Content-Type', 'application/json') # APIトークンをHTTPヘッダに設定 req.add_header('X-API-KEY', token) try: with urllib.request.urlopen(req) as res: content = json.loads(res.read()) print("現値:" + str(content["CurrentPrice"])) print("前日終値:" + str(content["PreviousClose"])) print("前日比:" + str(content["ChangePreviousClose"])) print("騰落率:" + str(content["ChangePreviousClosePer"])) print("始値:" + str(content["OpeningPrice"])) print("高値:" + str(content["HighPrice"])) print("安値:" + str(content["LowPrice"])) print("出来高:" + str(content["TradingVolume"])) except urllib.error.HTTPError as e: print(e) content = json.loads(e.read()) pprint.pprint(content) except Exception as e: print(e)
2023/02/13に実行した結果
現値:2648.5 前日終値:2617.0 前日比:31.5 騰落率:1.2 始値:2625.0 高値:2654.5 安値:2616.5 出来高:2042800.0
認証→板情報取得の流れで板情報が取得できました。
今のところ板情報以外必要ありませんが、発注処理もできるので板情報と合わせて自動売買なんかもできそうですね。
個人的には条件指定して該当する銘柄一覧が取得できるような機能があれば利用したいけどリファレンスをみた限りではなさそうですね。