はじめに
過去記事は「auカブコム証券のkabuステーションREST APIに関する記事一覧」。
51番目の記事で、PUSH APIを受信した現値をRESTサーバーへ送信したが、RESTサーバーが起動していないときなど、ローカルファイルには保存され、RESTサーバー側には保存されない場合が発生する。
このような場合に、リアルタイム監視ツールや、Tickデータのコピーツールを起動したときに、RESTサーバーへ送信する。
ゴール
51番目のときは、無条件に追記していたが、後から別ツールを複数回起動すると、同じチャートデータが重複して追記されてしまう。
そこで、URIをr2に変更し、RESTサーバー側のローカルファイルをメモリ上に読み込んで、重複チェックしてから、追記する。
なお、重複チェックのための主キーが存在しないため、CSVの1行まるごとがユニークであるかチェックする。
ベースとなるソース
v40のr12をベースに、v42のr14を作成する。
- MainWatchChartData_r12 -> MainWatchChartData_r14
- MainCopyChartData_r12 -> MainCopyChartData_r14
- CopyChartData_r12 -> CopyChartData_r14
実装
RESTサーバー側の修正は、「【kabusapisrv】自前のRESTサーバーを作成する」で対応する。
既存のexecute()にRESTサーバー送信を追加する。
List<String> lines = pollingCsvChartData();
RestClientUtil.postChartData(name, lines);
copyObj.copyCsvChartData(lines);
copyObj.writeChartList();
List<String> lines = readCsvChartData();
RestClientUtil.postChartData(name, lines);
copyCsvChartData(lines);
writeChartList();
テスト
RESTサーバー側のコンソールで、2回実行すると、2回目がwriteCntが0で、件数が増えていないことを確認する。
2022/10/13 09:12:24.708 ChartDataService.update(167100019_F202210): writeCnt=12174, totalCnt=12174
2022/10/13 09:12:37.055 ChartDataService.update(167100019_F202210): writeCnt=0, totalCnt=12174
追記:ソースをarchiveブランチへ移動
PUSH APIを受信した際にRESTサーバーへ送信する運用で、特に問題はないため、あえて別のタイミングで重複するデータを再送信する必要がなかった。オフライン状態で同期する目的もありえるが、ファイルコピーすればよいので、今のところ価値はない。
最新版に移行し、もう使われることはないので、アーカイブする。
githubソース