はじめに
過去記事は「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ソース