LoginSignup
0

posted at

updated at

【v44】auカブコム証券のkabuステーションPUSH APIを受信してCSVファイルへ保存する(先頭カラムにタイムスタンプを追加)

はじめに

過去記事は「auカブコム証券のkabuステーションREST APIに関する記事一覧」。

PUSH APIを受信して保存したCSVファイルは、売買高やOPのGreeksを対応してから変更されていないが、第1カラムが日付をまたがったときに、前日となる場合がある。

2022-08-09 23:59:58,27860.0,181351.0
2022-08-09 00:00:00,27855.0,181357.0
2022-08-10 00:00:03,27855.0,181510.0

そこで、後から補正を加えたが、生データをソートすることもできないので、保存するときのクライアント側のタイムスタンプを追加する。

実装

カラム数が変わってしまうが、とりあえず第1カラムに追加する。

		// 日付をまたぐ時間帯で日付が前日となる問題があるため、クライアントのタイムスタンプを先頭カラムに追加する。
		String now = DateTimeUtil.nowToString();
		
		return now + "," + date + "," + dataValue;

テスト

出力されるサンプル。
6:30以降にログインして、ツール起動時は06:00:01のデータを再度受信するため、大きくずれてしまう。

2022/10/18 07:22:04.686,2022-10-18 06:00:01,27120.0,15827.0
2022/10/18 08:45:01.517,2022-10-18 08:45:01,27210.0,16012.0
2022/10/18 08:45:01.517,2022-10-18 08:45:01,27250.0,16034.0

この新形式を読み込むツール側で、日付をまたぐときのチェック方法を検討する。

追記:コンストラクタ内でAPI呼び出し

毎朝、MainChartData_r16を終了、起動を繰り返して問題はなかったが、たまたま起動時に別プロセスでAPIを実行していた際に、SymbolName APIの呼び出しの一部で「API実行回数エラー」が発生した。
回避するため、コンストラクタ内にすべてのAPIを呼び出して、コンストラクタ内をファイルロックする。

		String X_API_KEY = null;
		try (LockedAuthorizedTokenLogic login = new LockedAuthorizedTokenLogic()) {
			X_API_KEY = login.getApiKey();
		}
		new MainChartData_r16(X_API_KEY).execute();

		MainChartData_r16 app;
		try (LockedAuthorizedTokenLogic login = new LockedAuthorizedTokenLogic()) {
			String X_API_KEY = login.getApiKey();
			app = new MainChartData_r16(X_API_KEY);
		}
		app.execute();

追記:銘柄コード取得APIのキャッシュ管理

直近で、コンストラクタでAPI呼び出しするようにタイミングを変えたため、インスタンス変数にsymbolNameApiとregisterEtcApiを持つ必要がないので、コンストラクタ内のローカル変数に移動する。

api.SymbolNameApiを、logic.SymbolNameLogicに置き換える。
AutoCloseableを実装しているので、try-with-resourcesで組み込む。
このため、事前にToolSymbolNameツールを実行しなくても、こちらのツールでも新しい銘柄コード検索した場合に、キャッシュファイルが更新される。

githubソース

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0