注意
公式に公開されている内容ではなく、個人的に調査まとめた内容となります。
やりたいこと
地方競馬DATAという、地方競馬の開催情報や結果を配信しているサービスがある。
このサービスでは「UmaConn」というソフトウェアを経由して地方競馬の開催データや、結果情報、出走馬情報を取得することができる。
地方競馬版の JV-LINK ( https://jra-van.jp/dlb/sdv/sdk.html )のような動きをしてくれるらしい。
しかし、使い方などは公開されていない。
このサービスから地方競馬のデータを取得したい。
結論から先にいうと
以下のコード、操作で読むことができる。
しかし、データのパースが必要なので、C#などで読み替えてSDKを使用して読んだほうが良さそう。
import win32com.client
NVLink1 = win32com.client.Dispatch("NVDTLabLib.NVLink")
return_code = NVLink1.NVInit("UNKNOWN")
# ここにデータを取得する処理を記述する
return_code = NVLink1.NVClose()
pywin32 ( https://pypi.org/project/pywin32/ ) を用いて、 地方競馬DATAのDLLをロードする。
Pythonは32bit版である必要があるので注意。
DLLは、UmaConnをインストールした際に 「 C:\Windows\SysWOW64\NVDTLab.dll 」
に配置されているのでそれを読み込むようにする。
あとは、JV-LINKと初期化をして、データをロードして、必要なデータを取り込んでいくことになる。
使用例
以下のように「JV-Linkインターフェース仕様書 ( https://jra-van.jp/dlb/sdv/sdk.html ) 」に書いてある「JV」を「NV」に置き換えると、大体似たことができる。
JRA Data Lab(JV-LINK)の場合
import win32com.client
JVLink1 = win32com.client.Dispatch("JVDTLab.JVLink")
return_code = JVLink1.JVInit("UNKNOWN")
dataspec = 'RACE'
fromtime = 20240126000000
option = 3
returnval = JVLink1.JVOpen(dataspec,fromtime,option, 0,0,'')
return_code = JVLink1.JVClose()
地方競馬DATA(UmaConn)の場合
# 注意:Pythonは32bit版である必要がある
import win32com.client
# 「NVDTLab」ではなく「NVDTLabLib」とする必要があることに注意
NVLink1 = win32com.client.Dispatch("NVDTLabLib.NVLink")
return_code = NVLink1.NVInit("UNKNOWN")
dataspec = 'RACE'
fromtime = 20240126000000
option = 3
returnval = NVLink1.NVOpen(dataspec,fromtime,option, 0,0,'')
Pythonでやると読み込んだデータのパースなど大変なので、結局該当DLLを同様にC#などで読んで、JV-LINKのSDKと併用して操作するといいかもしれない。
参考にした記事・リポジトリ
Pythonから.NET Frameworkで動作するJV-LINKを操作する方法は下記の記事を参考にしました。
また、下記リポジトリがC#でJV-LINK、UmaConn両方のデータを読み込むアプリケーションとして大変参考になりました。