SDKあるじゃん
競馬予測を機械学習やDLで扱いたいと思ってデータを集め始めたときに、比較的に信頼できるデータが得られるのはJRAだと思います。
そんな時に、JRA-VAN Datalab.では、JV-Linkという、JRAのサーバーからデータを取得するSDKがあります!...が、かなり酷い仕様です。
あまり開発ソフトも作られていないのか、オープンソースのコードを全く見かけないので、サンプルコードをC#で書いてGithubにアップしました。
visualStudio2015を利用しています。.Netの環境が必要です。
地雷ポイント
上手くいったときはバッファーのサイズ返して、次のファイル読み込む切り替え時には-1を返して、読み込み終了時には0を返して、-1未満だとエラーの返り値
こういうのがザラにあります。
今回はJVReadResultというクラスを作り結果をラップして、switchで分岐できるようにしました。
可読性重視にしたら、do whileで、switch finishedでフラグ立てとかのほうが良いかな...?
// JVReadのreturnCodeでJVReadResultを初期化。状態が終了でない限り読み込みを続ける。
while((result = new JVReadResult(m_jvlink1.JVRead(out buffer, out bufferSize, out fileName))).state != JVReadResult.State.finished)
{
switch (result.state)
{
case JVReadResult.State.normal:
m_strOut.AppendText(buffer);
break;
case JVReadResult.State.error:
m_strOut.AppendText("JVReadエラー:" + result.returnCode + Environment.NewLine);
break;
default:
break;
}
}
不具合が共有されない
仕様書に書いていない仕様がけっこうあります。
なので、問題が起こった時にとりあえずググってJRA-VAN Datalab.の掲示板を見つけて、その時初めて仕様を知る。
みたいな感じです。
今後
開発ソフト体験教室というのがあるので、これを一通り試したらJRA-Data to SQLをOSSで開発したいなーと思っております。
問題は、暗黙の仕様やエラーをいかに集約してプログラム中でルールとして表現できるか。という点で、まぁこれはリリース後にエラーログ収集やissue管理などでなんとかなるかもしれません。
CIもきっちり回していきたいです。