mcpField
O
oebb-scotty

oebb-scotty

github.com/mitsuhiko生産性3.2k105 回インストール4 週間前に更新
リポジトリ

oebb-scotty について

oebb-scotty は、ÖBB HAFAS mgate API を使ったオーストリアの公共交通の検索方法をまとめています。経路計画や運行確認向けで、場所検索、経路、駅の発着情報、運行通知を扱います。

主な機能

  1. 01駅、停留所、住所、施設を検索
  2. 02場所間の経路を計画
  3. 03駅の発着情報を取得
  4. 04運行通知や乱れを確認
  5. 05交通機関の種類で経路を絞り込み

活用シーン

  1. 01経路計画の前に名前で停留所を検索
  2. 022地点間の接続を比較
  3. 03駅の発車情報を確認
  4. 04現在の運行乱れを調べる

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mitsuhiko/agent-stuff --skill oebb-scotty

インストール後、Claude Code で/oebb-scottyを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

arrivals.sh
departures.sh
disruptions.sh
search-station.sh
trip.sh

詳細

ÖBB Scotty API

HAFAS mgate API を通じて、オーストリアの公共交通機関の経路検索、駅の発車情報、運行アラートを取得します。

クイックリファレンス

メソッド用途
LocMatch名前で駅/停留所を検索
TripSearch2 つの場所間の経路を検索
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住所
PPOI(興味のある地点)
主なフィールド
フィールド説明
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)
outFrwdtrue = 先の時刻を検索、false = 前の時刻を検索
numF返す乗り継ぎ候補の数
jnyFltrL交通機関フィルター(下記参照)
getPasslist途中停車駅を含める
交通機関フィルターの値
ビット値交通機関
01ICE/RJX(高速列車)
12IC/EC(インターシティ)
24NJ(夜行列車)
38D/EN(急行列車)
416REX/R(地域急行)
532S-Bahn
664バス
7128フェリー
8256U-Bahn
9512トラム

すべての交通機関を含めるには 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)
typeDEP(発車)または 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製品
1ICE/RJX
2IC/EC
4夜行列車
8NJ/EN
16REX/地域列車
32S-Bahn
64バス
128フェリー
256U-Bahn
512トラム
1024オンデマンド
2048その他

コメント