Lesson-2:JV-Dataをダウンロードする

Lesson-2:JV-Dataをダウンロードする

当コーナーでは、Microsoft Visual Basic 2022 Professional Edition(以下VB 2022と省略)で「JRA-VAN Data Lab.」サービス対応の競馬ソフトを作成していく過程をステップアップ形式で解説していきます。

今回から、実際にJV-Dataをダウンロードして内容を表示する仕組みを実装していきます。今回は、細かいことは気にせず、とにかくJV-Dataをダウンロードしてみます。

JRA-VAN Data Lab.では競馬ソフトを、過去の全てのデータを保持する「蓄積系ソフト」該当週のレース予想に十分なデータのみを保持する「非蓄積系ソフト」 の2つに大きく分類しています。この分類はJRA-VAN Data Lab.対応の競馬ソフトを作成するに上で非常に重要な点ですので、事前にJRA-VAN SDKに同梱されている「JRA-VAN Data Lab.仕様書」の「3.3 JV-Data取得方法の概念」の項で確認しておいてください。ちなみに今回から数回にわたる実装では、「非蓄積系ソフト」のイメージで作成していきます。

【 今回の目標 】

JV-Dataをダウンロードしてみる。
JV-Linkに実装されている以下のメソッドの使い方を理解する。

JVInitメソッドでJV-Linkの初期化を実行
JVOpenメソッドJV-Dataの取得を要求
JVCloseメソッドJV-Dataの読み込み処理を終了

【 やってみよう 】

① Lesson-1までを実装したフォーム(frmMain)を含むプロジェクトを開く。
(前回のレッスンの続きから開始するのであれば、この作業は必要ありません。)

② コモンコントロールからフォームに「データ取得」ボタンを追加します。
プロパティウィンドウで「(Name)」を「btnGetJVData」に、「Text」を「データ取得」にそれぞれ変更します。



③ JV-Linkを用いて競馬データ(JV-Data)を取得するためには、JVInitメソッドによるJV-Linkの初期化が必要です。それでは、JVInitメソッドをフォーム起動時に実行するようにコーディングしてみましょう。まずは、メニューから「表示」→「コード」を選択します。
image

④ コードエディタウィンドウが表示されるので、ウィンドウ上部の左のリストボックスから「(frmMainイベント)」を、右のリストボックスから「Load」を選択します。すると、コードエディタウィンドウにfrmMenuフォームがロードされたときに自動的に呼び出されるメソッド「frmMenu_Load」が追加されます。


⑤ このメソッドの中に、次のソースコードを追加します。
[ソースコード004-01]

Private Sub frmMenu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load

    Dim sid As String
    Dim lReturnCode As Long

    '引数設定
    sid = "Test"

    'JVLink初期化
    lReturnCode = Class1.AxJVLink.JVInit( sid )

    'エラー判定
    If lReturnCode <> 0 Then
        MsgBox("JVInitエラー コード:" & lReturnCode & ":", MessageBoxIcon.Error)
        Me.Cursor = System.Windows.Forms.Cursors.Default
        Exit Sub
    End If

End Sub

JVInitメソッドを呼び出す際には、sidという文字列を指定します。これは、呼び出し元の競馬ソフトを特定するためのもので、今回は "Test"を指定しています。

[ ワンポイントメモ ]
VB 2022においてコントロールへのオブジェクト名の付け方は、

  • 名前として使える文字は、アルファベット、数字、アンダースコア(_)
  • 名前の先頭文字はアルファベット、アンダースコア(_)

という規則さえ守っていれば、どんな名前をつけようが自由です。
しかし、むやみに名前を付けてしまうと、(大きなプログラムでは特に)どんなコントロールなのかわけがわからなくなってしまいます。これに対して、コーディング全体を通して何らかの一貫性をもたせることによって、コーディングの保守性を向上させることを図ります。VB 2022では通常、名前の先頭にコントロールの種類がわかるように3文字の識別文字(プリフィックス)を付けることによって、この一貫性を維持します。今までに出てきた「frmMain」の「frm(フォーム)」や「mnuConfJV」の「mnu(メニュー)」や「btnGetJVData」の「btn(ボタン)」などがこの識別文字に該当します。

⑥ さて、いよいよ「データ取得」ボタンクリック時のコーディングです。「データ取得」ボタンをダブルクリックすると、コードエディタウィンドウにこのボタンがクリックされた時に実行されるメソッド「btnGetJVData_Click」が追加されます。

⑦ このメソッドの中に、次のソースコードを追加します。
[ソースコード004-02]

Private Sub btnGetJVData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetJVData.Click

    Dim lReturnCode As Long

    Try
        Dim strDataSpec As String        '' 引数 JVOpen:ファイル識別子
        Dim strFromTime As String        '' 引数 JVOpen:データ提供日付
        Dim lOption As Long              '' 引数 JVOpen:オプション
        Dim lReadCount As Long           '' JVLink 戻り値
        Dim lDownloadCount As Long       '' JVOpen:総ダウンロードファイル数
        Dim strLastFileTimestamp As String '' JVOpen: 最新ファイルのタイムスタンプ゚

        '引数設定
        strDataSpec = "RACE"
        strFromTime = "20050301000000"
        lOption = "2"

        'JVLinkダウンロード処理
        lReturnCode = Class1.AxJVLink.JVOpen(strDataSpec, strFromTime, lOption, _
                        lReadCount, lDownloadCount, strLastFileTimestamp)

        'エラー判定
        If lReturnCode <> 0 Then
            MsgBox("JVOpenエラー:" & lReturnCode)
        Else
            MsgBox("戻り値 : " & lReturnCode & vbCrLf & _
               "読み込みファイル数 : " & lReadCount & vbCrLf & _
               "ダウンロードファイル数 : " & lDownloadCount & vbCrLf & _
               "タイムスタンプ : " & strLastFileTimestamp)
        End If

    Catch
        Debug.WriteLine(Err.Description)
        Exit Sub

    End Try

    'JVLink終了処理
    lReturnCode = Class1.AxJVLink.JVClose()
    If lReturnCode <> 0 Then
        MsgBox("JVCloseエラー:" & lReturnCode)
    End If

End Sub

最終形ではデータの読み込みまで行なうのですが、今回はデータのダウンロードまででとどめておきます。データ種別、データ読み出しポイント(年月日時分秒)とオプションを指定して、JVOpenメソッドを呼び出すと、該当ファイル数およびダウンロードする必要のあるファイル数、該当ファイルのうち最新ファイルのタイムスタンプが返ります。この際、ファイルをダウンロードする必要がある場合は、ダウンロードが開始されます。
今週開催されるレースに関する情報(JV-Data)を取得することを想定すると、指定するファイル種別は「RACE」(=レース情報)、オプションは「2」(=今週データ)となります(詳細は「JV-Data仕様書」および「JV-Linkインターフェイス仕様書」を参照)。

【 確認しよう 】

それでは、実際に動かしてみましょう。
① メニューから「デバッグ」→「デバッグ開始」を選択し、プログラムを実行します。エラーが発生した場合は、タスク一覧にエラーメッセージが表示されるので、正しく修正してエラーが無くなるまでビルドします。

② フォーム上のメニューから「設定」→「JV-Linkの設定」を選択します。

③ 「JV-Link設定」ダイアログが表示されるのでJRA-VANより取得した「利用キー」を設定します。すでに他のData Lab.対応ソフトを使用している場合は、修正不可の属性で「利用キー」が表示されます。
今回はダウンロードしたファイルを直接チェックするので、データの保存設定で「データを保存する」にチェックを入れて、保存するフォルダのパスも設定しておきます。「データ保存場所」には、テスト用にC:\ProgramData\JRA-VAN\Data Labを設定しておきます。

④ 上記③で確認したデータ保存先フォルダの下にある「cache」フォルダ内にファイルが存在する場合は削除してください。なお、「cache」フォルダ自体が存在しない場合は、JV-Dataを最初に取得したときにフォルダが作成されます。

⑤ フォームの「データ取得」ボタンをクリックすると、メッセージボックスがポップアップします。メッセージボックスには、JVOpenメソッドの返り値を表示するようにコーディングしてありますので、リターンコードや読み込みファイル数、ダウンロードファイル数、最新読み込みファイルのタイムスタンプが表示されるはずです。各返り値の詳細についてはJV-Linkインターフェース仕様書に記載されていますので、そちらを参照してください。


図の例では、読み込むべきファイルが24ファイルあり、そのうち実際にダウンロードするファイルが24ファイルあることを表しています。
④で確認した空の「cache」フォルダにファイルがダウンロードされていることも確認しておきましょう。メッセージボックスの「ダウンロードファイル数」に表示されている数値分のファイルが「cache」フォルダにダウンロードされます。

*1)ダウンロードされたファイル名の命名規則などは、特に意識する必要はありません。
*2)ダウンロードされたファイルの内容は暗号化されているため、テキストエディタなどで開いても、解読することはできません。データの内容は、次回以降に解説する「JVRead」メソッドを使って取得します。

⑥ メッセージボックスを「OK」で閉じた後、確認のためもう一度「データ取得」ボタンをクリックしてみましょう。


⑤と同様にメッセージボックスがポップアップしますが、今度は「ダウンロードファイル数」が0になっているはずです。読み込むべきファイルが既にダウンロード済みなので、ダウンロードする必要があるファイル数は0ということになります。
では「cache」フォルダのファイルをどれか1つ削除して「データ取得」ボタンをクリックするとどうなるでしょうか?
もうお解りですよね。ダウンロードファイル数は1となり、削除したファイルがダウンロードされます。

[ ワンポイントメモ ]
JV-Linkは必要なファイルがローカルに存在するかどうかをチェックし、存在しなければダウンロードを実行します。このため、JRA-VAN Data Lab.サービスに対応した競馬ソフトを複数使っている場合でも、ファイルのダウンロードは1回で済みます。