駅すぱあと VBA SDKを使って、経路の更新情報を受け取る

**本記事はヴァル研究所の支援として作成された記事です**

[駅すぱあとはAPIを公開](https://api-info.ekispert.com/)しており、駅情報や経路探索などをAPI経由で行えます。メソッドはすべてGETメソッドで、情報取得系のみです。レスポンスはJSONまたはXMLで返ってきます。

この駅すぱあと APIを利用しやすくするSDKを開発しはじめました。SDKはVBAで作っており、Excelなどから利用できます（Windowsのみ、macOSでは利用できません）。

今回は、スタンダードプランで提供されている経路情報の更新判定APIに対応しました。このAPIは、「駅すぱあと」のデータとして、名称が変更された、削除されたなどの更新状態を判定します。駅名が変わった際などは、その新旧駅名を取得できます。

具体的な利用シーンとしては、通勤費管理（定期代支給）です。通勤手当の支給の際には、従業員の通勤経路の情報を保持していますが、通勤経路の駅や路線の名前が変更になったり、駅や路線が廃止になったりした場合に、見つけることができる機能となります。


では、使い方を紹介します。

## 必要な情報

SDKを利用する際にはAPIキーが必要です。[無料トライアルがあるので、こちらから取得](https://api-info.ekispert.com/form/trial/)してください。

## 注意点

- SDKはWindowsでのみ動作します
- SDKは非公式です。公式サポートへの問い合わせはご遠慮ください

## ファイルのインポート

[こちらのリポジトリ](https://github.com/EkispertAPIMania/VBA-SDK)にある `*.cls` と `*.bas` ファイルをすべてインポートします。これらは以下のライブラリを含んでいます。

- [VBA-tools/VBA-Dictionary](https://github.com/VBA-tools/VBA-Dictionary)
- [VBA-tools/VBA-Web: VBA-Web](https://github.com/VBA-tools/VBA-Web)
- [VBA-tools/VBA-JSON](https://github.com/VBA-tools/VBA-JSON)

## 初期化

先ほど取得したAPIキーを使ってSDKを初期化します。

```vb
Dim client As Ekispert
Set client = New Ekispert
client.ApiKey = "YOUR_API_KEY"
```
## 経路情報の更新判定の設定

経路情報の更新判定を行う際には、まず駅や路線、会社を指定して検索します。検索は `ToolboxCourseUpdateQuery` にて行います。以下の条件は、[経路情報の更新判定 \- 駅すぱあと API Documents 駅データ・経路検索のWebAPI](https://docs.ekispert.com/v1/api/toolbox/course/Update.html)にある条件を再現するものです。

```vb
Dim Query As ToolboxCourseUpdateQuery
Set Query = Client.ToolboxCourseUpdateQuery()

Query.DateProp = DateSerial(2020, 4, 1)
Query.StationNameList(0) = "高円寺"
Query.StationNameList(1) = "羽田空港第２ビル(東京モノレール・ＡＮＡ利用)"
Query.StationNameList(2) = "川平"
Query.StationNameList(3) = "古瀬"
Query.StationNameList(4) = "江差"
		
Query.RailNameList(0) = "ＪＲ中央線快速"
Query.RailNameList(1) = "近鉄奈良線快急"
Query.RailNameList(2) = "小田急小田原線急行(代々木上原－新百合ケ丘)"
Query.RailNameList(3) = "旅客船(丸亀港～手島港)"

Query.CorporationNameList(0) = "ＪＲ"
Query.CorporationNameList(1) = "東京急行電鉄"
Query.CorporationNameList(2) = "富山ライトレール"
Query.CorporationNameList(3) = "十和田観光電鉄"
Query.CorporationNameList(4) = "備讃フェリー"
```

## 検索の実行

検索条件を設定したら、検索処理を実行します。結果は `ResultSet` クラスになります。探索がうまくいったかどうかは `ResultSet.Success` の値で判定してください。

```vb
Dim Result As ResultSet
Result = Query.Find()

Debug.Print Result.Success ' True または False
```

### エラーだった場合

もし探索がエラーだった場合は `ResultSet.Error` の中にエラー情報があります（駅すぱあと APIからのエラーの場合）。

```vb
If Not Result.Success Then
    MsgBox Result.Error.Message
    Exit Sub
End If
```

### 成功した場合

処理が成功した場合、 `ResultSet.Updates` に更新情報の配列が入っています。そして、更新情報には路線（Line）、経路（Point）、会社（Corporation）の情報が入っています。

```vb
Dim i As Integer
Dim Update As Update
For i = 0 To UBound(Result.Updates)
		Update = Result.Updates(i)
		' 路線の更新情報
		If (Not Not Update.Lines) <> 0 Then
				Debug.Print Update.Lines(0).Status.Code
				Debug.Print Update.Lines(0).Name
		End If

		' 駅の更新情報
		If (Not Not Update.Points) <> 0 Then
				Debug.Print Update.Points(0).Status.Code
				Debug.Print Update.Points(0).Station.Name
		End If

		' 会社の更新情報
		If (Not Not Update.Corporations) <> 0 Then
				Debug.Print Update.Corporations(0).Status.Code
				Debug.Print Update.Corporations(0).Name
		End If
Next i
```

## ソースコード

SDKのコードは以下のリポジトリにて公開しています。ライセンスはMIT Licenseです。

[EkispertAPIMania/VBA-SDK: Excel VBAなどで動作する駅すぱあと VBA SDKです（Windowsのみ）](https://github.com/EkispertAPIMania/VBA-SDK/tree/main)

## まとめ

経路情報の更新判定APIを使うことで、最新の路線・地点情報などに更新できます。変更前後の値も分かるので、データベースを更新したり、差分も取りやすくなります。

定期的に実行することで、情報を最新の状態に保持できます。ぜひ、システム開発に役立ててください。

何か不具合があれば、Issueにて連絡いただければ対応します（macOSでは動かないので注意してください）。

[EkispertAPIMania/VBA-SDK: Excel VBAなどで動作する駅すぱあと VBA SDKです（Windowsのみ）](https://github.com/EkispertAPIMania/VBA-SDK)