悠々自作

ぐうたら主婦のプログラミング日記

株の自動売買をしてみる:トークンを発行する

auカブコム証券には、株取引用のAPI「kabuステーション®API」

が用意されています。 このAPIを利用して株の自動売買に挑戦してみようと思います。

環境

設定

auカブコム証券に口座を開設し、 https://kabucom.github.io/kabusapi/ptal/howto.html にしたがってkabuステーションの設定をします。

サンプルコードでトークンを発行してみる

ここにサンプルコードがあったので、そのまま利用してトークンを発行してみます

# kabusapi_token.py
import urllib.request
import json
import pprint

obj = { 'APIPassword': 'testtest' }
json_data = json.dumps(obj).encode('utf8')

url = 'http://localhost:18081/kabusapi/token'
req = urllib.request.Request(url, json_data, method='POST')
req.add_header('Content-Type', 'application/json')

try:
    with urllib.request.urlopen(req) as res:
        print(res.status, res.reason)
        for header in res.getheaders():
            print(header)
        print()
        content = json.loads(res.read())
        pprint.pprint(content)
except urllib.error.HTTPError as e:
    print(e)
    content = json.loads(e.read())
    pprint.pprint(content)
except Exception as e:
    print(e)

検証用の環境で試したいので、検証用APIPasswordを設定し、urlもurl = 'http://localhost:18081/kabusapi/token'にします。

$ python kabusapi_token.pyで実行すると、


ステータスコードと、ヘッダー情報とともにTokenが返ってきていることがわかります。
※検証用の環境とはいえ、Tokenは一部のみ表示しています。

トークンの取得が成功しました。 このトークンを使って、売買していきますが、その前に、このコードを呼び出し易いようにしておきます。

main.pyからTokenManagerクラスを呼び出す

Pythonぽく、main.pyからソースコードを呼び出すようにします。

# main.py
from src.token_manager import TokenManager

if __name__ == '__main__':
    TokenManager.fetch_token()

Tokenを管理するクラスを用意します

# token_manager.py
import urllib.request
import json


class TokenManager:
    @staticmethod
    def fetch_token():
        obj = {'APIPassword': 'testtest'}
        json_data = json.dumps(obj).encode('utf8')

        url = 'http://localhost:18081/kabusapi/token'
        req = urllib.request.Request(url, json_data, method='POST')
        req.add_header('Content-Type', 'application/json')

        try:
            with urllib.request.urlopen(req) as res:
                content = json.loads(res.read())
                print(content['Token'])
        except urllib.error.HTTPError as e:
            content = json.loads(e.read())
            print(content)
        except Exception as e:
            print(e)

        return None

コマンドライン引数を使用して実行する

本番用と検証用の環境を簡単に切り替えたいので、 コマンドライン引数で環境を指定してスクリプトを実行できるようにしてみます

# config.py

class Config:
     ENV_TEST = {
        'APIPassword': 'testtest',
        'URL': 'http://localhost:18081/kabusapi/token'
    }
    ENV_PROD = {
        'APIPassword': '********',
        'URL': 'http://localhost:18080/kabusapi/token'
    }

設定ファイルを用意しました。

# main.py
from src.token_manager import TokenManager
import argparse

parser = argparse.ArgumentParser(description='Fetch API token')
parser.add_argument('--env', choices=['test', 'prod'], default='test', help='Specify environment (test or prod)')
args = parser.parse_args()

if __name__ == '__main__':
    TokenManager.fetch_token(args.env)

コマンドライン引数で、検証用と本番用の環境を切り替えて実行できるようにします。 開発中なので、デフォルトは検証用の環境にしました。

# テスト環境でのトークン取得
$ python main.py --env test

# 本番環境でのトークン取得
$ python main.py --env prod

次は検証用の環境で発注をしてみようと思います。