見出し画像

【競馬】Visual Basic で JRA-VAN DataLab. のデータを取得する

Visual Basic で JV-Link を操作することにより、JRA-VAN DataLab. が提供する競馬データを取得することができます。

今回は Visual Basic を使って簡単な競馬ソフトを作りたいと思います。

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 を起動し、[新しいプロジェクトの作成] をクリックします。

プロジェクト テンプレートから Visual Basic 用の [Windows フォーム アプリケーション (.NET Framework)] を選択し、[次へ] ボタンをクリックします。
※ [Windows フォーム アプリ] の方ではないので注意して下さい。

プロジェクト名、場所、ソリューション名を設定し、[作成] ボタンをクリックします。
プロジェクト名、ソリューション名はデフォルトの [WindowsApp1] としています。

新規のプロジェクトが作成されました。

画面左端の [ツールボックス] タブをクリックします。

ツールボックス パネルが開いたら、ピンマークをクリックしツールボックス パネルを固定します。

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 Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim sid As String = "UNKNOWN"
        Dim returnCode As Long

        'JVLink初期化
        returnCode = Me.AxJVLink1.JVInit(sid)
        'JVInitエラー処理
        If returnCode <> 0 Then
            MessageBox.Show("JVInitエラー:" & returnCode)
            Exit Sub
        End If
    End Sub

デザインビューのフォーム上の Button1 をダブルクリックします。

Button1_Click プロシージャが追加されます。

Button1_Click プロシージャの中身を下記コードで上書きします。

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim returnCode As Long
        Const buffSize As Long = 40000
        Const nameSize As Long = 256
        Dim buff As String
        Dim fileName As String
        Dim raceName As String
        Dim raceNames As String = ""

        '速報系データの0B12を呼び出し
        '日付は直近の土日を指定して下さい
        returnCode = Me.AxJVLink1.JVRTOpen("0B12", "20230430")

        'JVRTOpenエラー処理
        If returnCode <> 0 Then
            MessageBox.Show("JVOpenエラー:" & returnCode)
            Exit Sub
        End If

        returnCode = 1
        While returnCode <> 0
            'バッファ作成
            buff = New String(vbNullChar, buffSize)
            fileName = New String(vbNullChar, nameSize)

            returnCode = Me.AxJVLink1.JVRead(buff, buffSize, fileName)

            'JVReadエラー処理
            If returnCode < -1 Then
                MessageBox.Show("JVReadエラー:" & returnCode)
                Exit While
            End If

            If Mid(buff, 1, 2) = "RA" Then
                'レース名を抽出し末尾のスペースを除去
                raceName = Mid(buff, 33, 30).TrimEnd()
                'レース名が空文字でなければレース名一覧に結合
                If raceName <> "" Then
                    raceNames = raceNames & raceName & vbCrLf
                End If
            End If
        End While

        'レース名一覧を表示
        MessageBox.Show(raceNames)

        'JVLink 終了処理
        returnCode = Me.AxJVLink1.JVClose()
    End Sub

12 行目の

        returnCode = Me.AxJVLink1.JVRTOpen("0B12", "20230430")

の日付部分は直近の土日(中央競馬のレースが開催された日)を yyyymmdd 形式で指定して下さい。
※ このコードで取得している速報系データはレース後 1 週間程で配信されなくなるので、古い開催日を指定してもデータは取得できません。

7. 動作確認

[開始] ボタンをクリックします。

Form1 が表示されたら、Button1 をクリックします。

メッセージボックスにレース名が表示されれば OK です。

レース開催が無い日や、古い開催日をコード内で指定している場合は下図のようなエラーが発生します。

いいなと思ったら応援しよう!