ボートレースデータを取得する その2

コンピューター

ボートレース公式サイトからデータを取得する

ボートレース公式では、各種データの公開が行われています。

https://boatrace.jp/

今回は、エクセルVBAを使い、指定した年月に該当する番組表、競走成績を取得します。検証等に時間がかかるので、分割して記事にしてあります。

2021年6月20日の時点では、ボートレース公式サイトのSSL化は行われていません。各種データも実質非標準となりつつあるlha形式を使用しています。コードを作成するにあたり、運営の方針変更等で構成の変更がある事も想定しておく事が必要です。

その2 ダウンロードデータを解凍する

lzhファイル解凍について

VBAから、lzhファイル解凍を行う場合、UNLHA32.DLLを使う事が正攻法だったと思います。しかしながら、開発者のLZH書庫の利用中止の呼びかけや開発中止が表明されており、今回は、解凍ソフトArchiveDecoderを使用し、WindowsScriptHostにより、外部コマンド実行による解凍を行う方法を採用しました。

UNLHA32.DLLのダウンロード
UNLHA32.DLLのダウンロードページ
ソフト脆弱性情報
ソフト脆弱性情報

Archive Decoder

解凍ソフトを選定するにあたり条件としたのは、

  • Windows10対応
  • 外部DLLを必要としない
  • インストール不要
  • ZIPファイルも解凍可能(今後を見据えて)

です。

今回は、マクロ有効ブックと同じフォルダに格納し、事前に設定を行っています。

Archive Decoderの詳細情報 : Vector ソフトを探す!
DLL 不要の解凍専用アーカイバ USB メモリなどで持ち運んでの用途に最適

解凍VBA

'ファイルの解凍
Private Function extractArchive(strCmdPath As String, strFile As String) As Long
Dim objWsh As Object
Dim objExec As Object
Dim strCmd As String
    
    Set objWsh = CreateObject("WScript.Shell")
    strCmd = strCmdPath & "Arcdec,exe " & strFile
    Set objExec = objWsh.Exec("%ComSpec% /c " & strCmd)
    Do While objExec.Status = 0
        Sleep 500
        If GetInputState() Then DoEvents
    Loop
    
    extractArchive = objExec.ExitCode
    
    Set objExec = Nothing
    Set objWsh = Nothing
End Function

%ComSpec%は、システムに登録されているコマンドインタープリタープログラムが指定されています。私の環境ではcmd.exeが設定されており、「cmd.exe /c arcdec.exe ファイル名」となります。

WSHのexecコマンドで実行し、statusを確認(プロセス起動中が0)、終了後ExitCodeで、arcdec.exeの終了コードを取得します。

最後に

今回は、公式サイトからダウンロードされたlzhファイルを解凍する方法について記事にしました。今後は、解凍されたテキストファイルの帳票イメージファイルをデータ化する方法を記事にして行きます。

 

コメント

タイトルとURLをコピーしました