【競馬】Visual C# で JRA-VAN DataLab. のデータを取得する
Visual C# で JV-Link を操作することにより、JRA-VAN DataLab. が提供する競馬データを取得することができます。
今回は Visual C# を使って簡単な競馬ソフトを作りたいと思います。
1. 動作環境
OS : Windows
どこまで古いバージョンで動作するかは分からないですが、Windows 10 以降であれば問題ないはずです。
私の使っている環境は
Windows 11 Home (64bit 版)
です。
2. JV-Link のインストール
こちらのページの [動作確認 (JV-Link)] のタブからインストーラーをダウンロードしてインストールおよび初期設定を行って下さい。
※ 使用するには JRA-VAN DataLab. の会員登録が必要です。
3. Visual Studio 2019 のインストール
Visual Studio Installer を使って Visual Studio Community 2019 をインストールします。
ワークロードには [デスクトップとモバイル] > [.NET デスクトップ開発] を選択します。
※ Visual Studio 2019 を使用して下さい。Visual Studio 2020 は IDE 自体が 64bit 化されたためか、この記事の手順ではうまくいきません。
4. 新規プロジェクトの作成
Visual Studio 2019 を起動し、[新しいプロジェクトの作成] をクリックします。
プロジェクト テンプレートから C# 用の [Windows フォーム アプリケーション (.NET Framework)] を選択し、[次へ] ボタンをクリックします。
※ [Windows フォーム アプリ] の方ではないので注意して下さい。
プロジェクト名、場所、ソリューション名を設定し、[作成] ボタンをクリックします。
プロジェクト名、ソリューション名はデフォルトの [WindowsFormsApp1] としています。
新規のプロジェクトが作成されました。
画面左端の [ツールボックス] タブをクリックします。
ツールボックス パネルが開いたら、ピンマークをクリックしツールボックス パネルを固定します。
5. JVLink Class の表示(初回のみ)
ツールボックス内の [全般] を右クリックし、[アイテムの選択] をクリックします。
ツールボックス アイテムの選択画面が開きます。
[COM コンポーネント] タブを開き、[JVLink Class] にチェックを入れ、[OK] ボタンをクリックします。
ツールボックス内に [JVLink Class] が表示されれば OK です。
※ JVLink Class の表示は一度行えば設定が保存されます。
6. プロジェクトの作成
ツールボックス内の [コモン コントロール] > [Button] をフォーム上に配置します。
IDE 画面右下のプロパティの Name はデフォルトの [button1] としています。
ツールボックス内の [全般] > [JVLink Class] をフォーム上に配置します。
※ JVLink Class は実行時に表示されないので、レイアウトを気にする必要はありません。
Name はデフォルトの [axJVLink1] としています。
デザインビューのフォームを選択し、プロパティをイベント タブに切り替え、[Load] の右側の空欄をダブルクリックします。
Form1_Load メソッドが追加された状態でコードエディタが開きます。
Form1_Load メソッドの中身を下記コードで上書きします。
private void Form1_Load(object sender, EventArgs e)
{
string sid = "UNKNOWN";
int returnCode;
// JVLink初期化
returnCode = axJVLink1.JVInit(sid);
// JVInitエラー処理
if (returnCode != 0)
{
MessageBox.Show("JVInitエラー:" + returnCode);
return;
}
}
デザインビューのフォーム上の button1 をダブルクリックします。
button1_Click メソッドが追加されます。
button1_Click メソッドの中身を下記コードで上書きします。
private void button1_Click(object sender, EventArgs e)
{
int returnCode;
int buffSize = 40000;
string buff;
string fileName;
string raceName;
string raceNames = "";
// 速報系データの0B12を呼び出し
// 日付は直近の土日を指定して下さい
returnCode = axJVLink1.JVRTOpen("0B12", "20230430");
// JVRTOpenエラー処理
if (returnCode != 0)
{
MessageBox.Show("JVRTOpen エラー:" + returnCode);
return;
}
returnCode = 1;
while (returnCode != 0)
{
returnCode = axJVLink1.JVRead(out buff, out buffSize, out fileName);
// JVReadエラー処理
if (returnCode < -1)
{
MessageBox.Show("JVRead エラー:" + returnCode);
break;
}
else if (returnCode == -1)
{
continue;
}
else if (returnCode == 0)
{
break;
}
if (buff.Substring(0, 2) == "RA")
{
// レース名を抽出し末尾のスペースを除去
raceName = buff.Substring(32, 30).TrimEnd();
// レース名が空文字でなければレース名一覧に結合
if (raceName != "")
{
raceNames += raceName + Environment.NewLine;
}
}
}
// レース名一覧を表示
MessageBox.Show(raceNames);
// JVLink 終了処理
returnCode = axJVLink1.JVClose();
}
12 行目の
returnCode = axJVLink1.JVRTOpen("0B12", "20230430");
の日付部分は直近の土日(中央競馬のレースが開催された日)を yyyymmdd 形式で指定して下さい。
※ このコードで取得している速報系データはレース後 1 週間程で配信されなくなるので、古い開催日を指定してもデータは取得できません。
7. 動作確認
[開始] ボタンをクリックします。
Form1 が表示されたら、button1 をクリックします。
メッセージボックスにレース名が表示されれば OK です。
レース開催が無い日や、古い開催日をコード内で指定している場合は下図のようなエラーが発生します。
この記事が気に入ったらサポートをしてみませんか?