![見出し画像](https://assets.st-note.com/production/uploads/images/104463992/rectangle_large_type_2_e9723ac86c73ec92d0a4b12544807d66.png?width=1200)
【競馬】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 化されたためか、この記事の手順ではうまくいきません。
![](https://assets.st-note.com/img/1682935573613-h9vXdmHCle.png?width=1200)
![](https://assets.st-note.com/img/1682935585854-c8s71cpF1I.png?width=1200)
4. 新規プロジェクトの作成
Visual Studio 2019 を起動し、[新しいプロジェクトの作成] をクリックします。
![](https://assets.st-note.com/img/1682935608074-3ktjZfFAf1.png?width=1200)
プロジェクト テンプレートから C# 用の [Windows フォーム アプリケーション (.NET Framework)] を選択し、[次へ] ボタンをクリックします。
※ [Windows フォーム アプリ] の方ではないので注意して下さい。
![](https://assets.st-note.com/img/1682935950459-Ejo1M4y2vd.png?width=1200)
プロジェクト名、場所、ソリューション名を設定し、[作成] ボタンをクリックします。
プロジェクト名、ソリューション名はデフォルトの [WindowsFormsApp1] としています。
![](https://assets.st-note.com/img/1682936043896-VxiddgONVt.png?width=1200)
新規のプロジェクトが作成されました。
![](https://assets.st-note.com/img/1682938342634-snfITzmMio.png?width=1200)
画面左端の [ツールボックス] タブをクリックします。
![](https://assets.st-note.com/img/1682938352894-JKkaXTuCCO.png)
ツールボックス パネルが開いたら、ピンマークをクリックしツールボックス パネルを固定します。
![](https://assets.st-note.com/img/1682938366647-VCD6SYeyF7.png)
5. JVLink Class の表示(初回のみ)
ツールボックス内の [全般] を右クリックし、[アイテムの選択] をクリックします。
![](https://assets.st-note.com/img/1682938388246-T2iAS7iKZC.png)
ツールボックス アイテムの選択画面が開きます。
![](https://assets.st-note.com/img/1682938416279-r1UvjZc7Xq.png?width=1200)
[COM コンポーネント] タブを開き、[JVLink Class] にチェックを入れ、[OK] ボタンをクリックします。
![](https://assets.st-note.com/img/1682938429623-08RtHDQi5V.png?width=1200)
ツールボックス内に [JVLink Class] が表示されれば OK です。
![](https://assets.st-note.com/img/1682938445588-jHGx5uEvTj.png)
※ JVLink Class の表示は一度行えば設定が保存されます。
6. プロジェクトの作成
ツールボックス内の [コモン コントロール] > [Button] をフォーム上に配置します。
![](https://assets.st-note.com/img/1682938473444-6uCqJa22Ob.png)
IDE 画面右下のプロパティの Name はデフォルトの [button1] としています。
![](https://assets.st-note.com/img/1682938486606-bmd7jD7b0Y.png)
ツールボックス内の [全般] > [JVLink Class] をフォーム上に配置します。
※ JVLink Class は実行時に表示されないので、レイアウトを気にする必要はありません。
![](https://assets.st-note.com/img/1682945561334-gGfmfuGuQl.png)
Name はデフォルトの [axJVLink1] としています。
![](https://assets.st-note.com/img/1682945581400-qyEOmKh2BP.png)
デザインビューのフォームを選択し、プロパティをイベント タブに切り替え、[Load] の右側の空欄をダブルクリックします。
![](https://assets.st-note.com/img/1682945600954-rCX2xqQkDQ.png?width=1200)
Form1_Load メソッドが追加された状態でコードエディタが開きます。
![](https://assets.st-note.com/img/1682945622953-VBDHpn4Mjd.png?width=1200)
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 をダブルクリックします。
![](https://assets.st-note.com/img/1682945837286-7a0WAigRSl.png)
button1_Click メソッドが追加されます。
![](https://assets.st-note.com/img/1682951163977-KTnNZbFrCj.png?width=1200)
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. 動作確認
[開始] ボタンをクリックします。
![](https://assets.st-note.com/img/1682946064759-WEmZ5byeIe.png?width=1200)
Form1 が表示されたら、button1 をクリックします。
![](https://assets.st-note.com/img/1682946091795-cvqqzs7pYP.png?width=1200)
メッセージボックスにレース名が表示されれば OK です。
![](https://assets.st-note.com/img/1682951210990-SZWaeI2nqi.png?width=1200)
レース開催が無い日や、古い開催日をコード内で指定している場合は下図のようなエラーが発生します。
![](https://assets.st-note.com/img/1682951226752-BhQATCkh50.png?width=1200)
この記事が気に入ったらサポートをしてみませんか?