oebb-scotty について
oebb-scotty は、ÖBB HAFAS mgate API を使ったオーストリアの公共交通の検索方法をまとめています。経路計画や運行確認向けで、場所検索、経路、駅の発着情報、運行通知を扱います。
主な機能
- 01駅、停留所、住所、施設を検索
- 02場所間の経路を計画
- 03駅の発着情報を取得
- 04運行通知や乱れを確認
- 05交通機関の種類で経路を絞り込み
活用シーン
- 01経路計画の前に名前で停留所を検索
- 022地点間の接続を比較
- 03駅の発車情報を確認
- 04現在の運行乱れを調べる
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mitsuhiko/ agent-stuff --skill oebb-scottyインストール後、Claude Code で/oebb-scottyを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
arrivals.shdepartures.shdisruptions.shsearch-station.shtrip.sh詳細
ÖBB Scotty API
HAFAS mgate API を通じて、オーストリアの公共交通機関の経路検索、駅の発車情報、運行アラートを取得します。
クイックリファレンス
| メソッド | 用途 |
|---|---|
LocMatch | 名前で駅/停留所を検索 |
TripSearch | 2 つの場所間の経路を検索 |
StationBoard | 駅の発車/到着情報を取得 |
HimSearch | 運行アラートや運休・遅延情報を取得 |
ベース URL: https://fahrplan.oebb.at/bin/mgate.exe
認証
すべてのリクエストで、JSON 本文に次のヘッダーが必要です。
{
"id": "1",
"ver": "1.67",
"lang": "deu",
"auth": {"type": "AID", "aid": "OWDL4fE4ixNiPBBm"},
"client": {"id": "OEBB", "type": "WEB", "name": "webapp", "l": "vs_webapp"},
"formatted": false,
"svcReqL": [...]
}
1. 場所の検索(LocMatch)
名前で駅、停留所、住所、POI を検索します。
リクエスト
curl -s -X POST "https://fahrplan.oebb.at/bin/mgate.exe" \
-H "Content-Type: application/json" \
-d '{
"id":"1","ver":"1.67","lang":"deu",
"auth":{"type":"AID","aid":"OWDL4fE4ixNiPBBm"},
"client":{"id":"OEBB","type":"WEB","name":"webapp","l":"vs_webapp"},
"formatted":false,
"svcReqL":[{
"req":{"input":{"field":"S","loc":{"name":"Wien Hbf","type":"ALL"},"maxLoc":10}},
"meth":"LocMatch"
}]
}'
レスポンスの構造
{
"svcResL": [{
"res": {
"match": {
"locL": [{
"lid": "A=1@O=Wien Hbf (U)@X=16377950@Y=48184986@U=181@L=1290401@",
"type": "S",
"name": "Wien Hbf (U)",
"extId": "1290401",
"crd": { "x": 16377950, "y": 48184986 },
"pCls": 6015
}]
}
}
}]
}
場所の種類
| 種類 | 説明 |
|---|---|
S | 駅/停留所 |
A | 住所 |
P | POI(興味のある地点) |
主なフィールド
| フィールド | 説明 |
|---|---|
lid | 場所 ID 文字列(TripSearch で使用) |
extId | 外部駅 ID |
name | 駅名 |
crd.x/y | 座標(x=経度、y=緯度、10^6 倍した値) |
pCls | 交通機関クラスのビットマスク |
2. 経路検索(TripSearch)
2 つの場所間の経路を検索します。
リクエスト
curl -s -X POST "https://fahrplan.oebb.at/bin/mgate.exe" \
-H "Content-Type: application/json" \
-d '{
"id":"1","ver":"1.67","lang":"deu",
"auth":{"type":"AID","aid":"OWDL4fE4ixNiPBBm"},
"client":{"id":"OEBB","type":"WEB","name":"webapp","l":"vs_webapp"},
"formatted":false,
"svcReqL":[{
"req":{
"depLocL":[{"lid":"A=1@O=Wien Hbf@L=8103000@","type":"S"}],
"arrLocL":[{"lid":"A=1@O=Salzburg Hbf@L=8100002@","type":"S"}],
"jnyFltrL":[{"type":"PROD","mode":"INC","value":"1023"}],
"getPolyline":false,
"getPasslist":true,
"outDate":"20260109",
"outTime":"080000",
"outFrwd":true,
"numF":5
},
"meth":"TripSearch"
}]
}'
パラメーター
| パラメーター | 説明 |
|---|---|
depLocL | 出発地(複数可)。LocMatch の lid を使用 |
arrLocL | 到着地(複数可) |
outDate | 出発日(YYYYMMDD) |
outTime | 出発時刻(HHMMSS) |
outFrwd | true = 先の時刻を検索、false = 前の時刻を検索 |
numF | 返す乗り継ぎ候補の数 |
jnyFltrL | 交通機関フィルター(下記参照) |
getPasslist | 途中停車駅を含める |
交通機関フィルターの値
| ビット | 値 | 交通機関 |
|---|---|---|
| 0 | 1 | ICE/RJX(高速列車) |
| 1 | 2 | IC/EC(インターシティ) |
| 2 | 4 | NJ(夜行列車) |
| 3 | 8 | D/EN(急行列車) |
| 4 | 16 | REX/R(地域急行) |
| 5 | 32 | S-Bahn |
| 6 | 64 | バス |
| 7 | 128 | フェリー |
| 8 | 256 | U-Bahn |
| 9 | 512 | トラム |
すべての交通機関を含めるには 1023 を使用するか、必要なビットの値を合計してください。
レスポンスの構造
{
"svcResL": [{
"res": {
"outConL": [{
"date": "20260109",
"dur": "025200",
"chg": 0,
"dep": {
"dTimeS": "075700",
"dPltfS": {"txt": "8A-B"}
},
"arr": {
"aTimeS": "104900",
"aPltfS": {"txt": "7"}
},
"secL": [{
"type": "JNY",
"jny": {
"prodX": 0,
"dirTxt": "Salzburg Hbf",
"stopL": [...]
}
}]
}],
"common": {
"locL": [...],
"prodL": [...]
}
}
}]
}
主な乗り継ぎフィールド
| フィールド | 説明 |
|---|---|
dur | 所要時間(HHMMSS) |
chg | 乗り換え回数 |
dTimeS | 予定出発時刻 |
dTimeR | リアルタイムの出発時刻(取得可能な場合) |
aTimeS | 予定到着時刻 |
aTimeR | リアルタイムの到着時刻(取得可能な場合) |
dPltfS.txt | 出発ホーム |
aPltfS.txt | 到着ホーム |
secL | 経路の区間(行程) |
secL[].jny.prodX | 列車名に対応する common.prodL[] のインデックス |
prodX(プロダクトインデックス)の理解
重要: 経路の区間にある prodX フィールドは、列車名そのものではなく、common.prodL[] 配列のインデックスです。実際の列車名(例:「S7」、「RJX 662」)を取得するには、common.prodL[prodX].name を参照する必要があります。
jq で経路の概要を抽出する
TripSearch の生のレスポンスは非常に冗長です。次の jq フィルターを使うと、列車名を解決した簡潔な概要を抽出できます。
curl -s -X POST "https://fahrplan.oebb.at/bin/mgate.exe" \
-H "Content-Type: application/json" \
-d '{ ... }' | jq '
.svcResL[0].res as $r |
$r.common.prodL as $prods |
[$r.outConL[] | {
dep: .dep.dTimeS,
arr: .arr.aTimeS,
depPlatform: .dep.dPltfS.txt,
arrPlatform: .arr.aPltfS.txt,
dur: .dur,
chg: .chg,
legs: [.secL[] | select(.type == "JNY") | {
train: $prods[.jny.prodX].name,
dir: .jny.dirTxt,
dep: .dep.dTimeS,
arr: .arr.aTimeS,
depPlatform: .dep.dPltfS.txt,
arrPlatform: .arr.aPltfS.txt
}]
}]'
出力例:
[
{
"dep": "213900",
"arr": "221100",
"depPlatform": "1",
"arrPlatform": "3A-B",
"dur": "003200",
"chg": 0,
"legs": [{"train": "S 7", "dir": "Flughafen Wien Bahnhof", "dep": "213900", "arr": "221100", ...}]
}
]
3. 駅の発着案内(StationBoard)
駅の発車情報または到着情報を取得します。
リクエスト
curl -s -X POST "https://fahrplan.oebb.at/bin/mgate.exe" \
-H "Content-Type: application/json" \
-d '{
"id":"1","ver":"1.67","lang":"deu",
"auth":{"type":"AID","aid":"OWDL4fE4ixNiPBBm"},
"client":{"id":"OEBB","type":"WEB","name":"webapp","l":"vs_webapp"},
"formatted":false,
"svcReqL":[{
"req":{
"stbLoc":{"lid":"A=1@O=Wien Hbf@L=8103000@","type":"S"},
"date":"20260109",
"time":"080000",
"type":"DEP",
"maxJny":20
},
"meth":"StationBoard"
}]
}'
パラメーター
| パラメーター | 説明 |
|---|---|
stbLoc | 駅の場所 |
date | 日付(YYYYMMDD) |
time | 時刻(HHMMSS) |
type | DEP(発車)または ARR(到着) |
maxJny | 経路の最大件数 |
レスポンスの構造
{
"svcResL": [{
"res": {
"jnyL": [{
"prodX": 0,
"dirTxt": "Salzburg Hbf",
"stbStop": {
"dTimeS": "080000",
"dPltfS": {"txt": "8A-B"}
}
}],
"common": {
"prodL": [{
"name": "RJX 662",
"cls": 1,
"prodCtx": {"catOutL": "Railjet Xpress"}
}]
}
}
}]
}
4. 運行アラート(HimSearch)
現在の運休・遅延情報と運行情報を取得します。
リクエスト
curl -s -X POST "https://fahrplan.oebb.at/bin/mgate.exe" \
-H "Content-Type: application/json" \
-d '{
"id":"1","ver":"1.67","lang":"deu",
"auth":{"type":"AID","aid":"OWDL4fE4ixNiPBBm"},
"client":{"id":"OEBB","type":"WEB","name":"webapp","l":"vs_webapp"},
"formatted":false,
"svcReqL":[{
"req":{
"himFltrL":[{"type":"PROD","mode":"INC","value":"255"}],
"maxNum":20
},
"meth":"HimSearch"
}]
}'
レスポンスの構造
{
"svcResL": [{
"res": {
"msgL": [{
"hid": "HIM_FREETEXT_843858",
"head": "Verringertes Sitzplatzangebot",
"text": "Wegen einer technischen Störung...",
"prio": 0,
"sDate": "20260108",
"eDate": "20260108"
}]
}
}]
}
主な駅の ID
| 駅 | extId |
|---|---|
| ウィーン中央駅 | 8103000 |
| ウィーン・マイドリング駅 | 8100514 |
| ウィーン西駅 | 8101003 |
| ザルツブルク中央駅 | 8100002 |
| リンツ中央駅 | 8100013 |
| グラーツ中央駅 | 8100173 |
| インスブルック中央駅 | 8100108 |
| クラーゲンフルト中央駅 | 8100085 |
| ザンクト・ペルテン中央駅 | 8100008 |
| ウィーナー・ノイシュタット中央駅 | 8100516 |
時刻の形式
- 日付:
YYYYMMDD(例:20260109) - 時刻:
HHMMSS(例:080000= 08:00:00) - 所要時間:
HHMMSS(例:025200= 2時間52分)
エラー処理
レスポンスの err フィールドを確認してください。
{
"err": "OK", // Success
"err": "PARSE", // Invalid request format
"err": "NO_MATCH", // No results found
"errTxt": "..." // Error details
}
製品クラス(cls 値)
| cls | 製品 |
|---|---|
| 1 | ICE/RJX |
| 2 | IC/EC |
| 4 | 夜行列車 |
| 8 | NJ/EN |
| 16 | REX/地域列車 |
| 32 | S-Bahn |
| 64 | バス |
| 128 | フェリー |
| 256 | U-Bahn |
| 512 | トラム |
| 1024 | オンデマンド |
| 2048 | その他 |
コメント
Markdown 対応