oebb-scotty
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseÖBB Scotty API
ÖBB Scotty API
Query Austria's public transport for trip planning, station departures, and service alerts via the HAFAS mgate API.
通过HAFAS mgate API查询奥地利公共交通的行程规划、车站班次和服务通知。
Quick Reference
快速参考
| Method | Purpose |
|---|---|
| Search for stations/stops by name |
| Plan a journey between two locations |
| Get departures/arrivals at a station |
| Get service alerts and disruptions |
Base URL:
https://fahrplan.oebb.at/bin/mgate.exe| 方法 | 用途 |
|---|---|
| 按名称搜索车站/站点 |
| 规划两地之间的行程 |
| 获取车站的出发/到达班次 |
| 获取服务通知与中断信息 |
基础URL:
https://fahrplan.oebb.at/bin/mgate.exeAuthentication
身份验证
All requests require these headers in the JSON body:
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": [...]
}所有请求的JSON体中都需要包含以下头部信息:
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. Location Search (LocMatch
)
LocMatch1. 地点搜索(LocMatch
)
LocMatchSearch for stations, stops, addresses, or POIs by name.
按名称搜索车站、站点、地址或兴趣点(POI)。
Request
请求示例
bash
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"
}]
}'bash
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"
}]
}'Response Structure
响应结构
json
{
"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
}]
}
}
}]
}json
{
"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
}]
}
}
}]
}Location Types
地点类型
| Type | Description |
|---|---|
| Station/Stop |
| Address |
| POI (Point of Interest) |
| 类型 | 说明 |
|---|---|
| 车站/站点 |
| 地址 |
| 兴趣点(POI) |
Key Fields
关键字段
| Field | Description |
|---|---|
| Location ID string (use in TripSearch) |
| External station ID |
| Station name |
| Coordinates (x=lon, y=lat, scaled by 10^6) |
| Product class bitmask |
| 字段 | 说明 |
|---|---|
| 地点ID字符串(用于TripSearch接口) |
| 外部车站ID |
| 车站名称 |
| 坐标(x=经度,y=纬度,放大10^6倍) |
| 产品类别位掩码 |
2. Trip Search (TripSearch
)
TripSearch2. 行程搜索(TripSearch
)
TripSearchPlan a journey between two locations.
规划两地之间的行程。
Request
请求示例
bash
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"
}]
}'bash
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"
}]
}'Parameters
参数说明
| Param | Description |
|---|---|
| Departure location(s) - use |
| Arrival location(s) |
| Departure date (YYYYMMDD) |
| Departure time (HHMMSS) |
| |
| Number of connections to return |
| Product filter (see below) |
| Include intermediate stops |
| 参数 | 说明 |
|---|---|
| 出发地点 - 使用LocMatch接口返回的 |
| 到达地点 |
| 出发日期(YYYYMMDD格式) |
| 出发时间(HHMMSS格式) |
| |
| 返回的联运线路数量 |
| 产品过滤器(见下文) |
| 是否包含中途站点 |
Product Filter Values
产品过滤器值
| Bit | Value | Product |
|---|---|---|
| 0 | 1 | ICE/RJX (High-speed) |
| 1 | 2 | IC/EC (InterCity) |
| 2 | 4 | NJ (Night trains) |
| 3 | 8 | D/EN (Express) |
| 4 | 16 | REX/R (Regional Express) |
| 5 | 32 | S-Bahn |
| 6 | 64 | Bus |
| 7 | 128 | Ferry |
| 8 | 256 | U-Bahn |
| 9 | 512 | Tram |
Use for all products, or sum specific bits.
1023| 位 | 数值 | 产品类型 |
|---|---|---|
| 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 | 地铁 |
| 9 | 512 | 电车 |
使用表示所有产品,或累加特定位的数值筛选指定产品。
1023Response Structure
响应结构
json
{
"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": [...]
}
}
}]
}json
{
"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": [...]
}
}
}]
}Key Connection Fields
联运线路关键字段
| Field | Description |
|---|---|
| Duration (HHMMSS) |
| Number of changes |
| Scheduled departure |
| Real-time departure (if available) |
| Scheduled arrival |
| Real-time arrival (if available) |
| Departure platform |
| Arrival platform |
| Journey sections (legs) |
| Index into |
| 字段 | 说明 |
|---|---|
| 行程时长(HHMMSS格式) |
| 换乘次数 |
| 计划出发时间 |
| 实时出发时间(若可用) |
| 计划到达时间 |
| 实时到达时间(若可用) |
| 出发站台 |
| 到达站台 |
| 行程分段(各段路程) |
| 对应 |
Understanding prodX (Product Index)
理解prodX(产品索引)
Important: The field in journey sections is an index into the array, NOT the train name itself. To get the actual train name (e.g., "S7", "RJX 662"), you must look up .
prodXcommon.prodL[]common.prodL[prodX].name重要提示: 行程分段中的字段是数组的索引,而非列车名称本身。要获取实际列车名称(如"S7"、"RJX 662"),需查询。
prodXcommon.prodL[]common.prodL[prodX].nameExtracting Trip Summaries with jq
使用jq提取行程摘要
The raw TripSearch response is very verbose. Use this jq filter to extract a concise summary with resolved train names:
bash
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
}]
}]'Example output:
json
[
{
"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", ...}]
}
]TripSearch接口的原始响应非常冗长。可使用以下jq过滤器提取简洁的行程摘要并解析列车名称:
bash
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
}]
}]'示例输出:
json
[
{
"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. Station Board (StationBoard
)
StationBoard3. 车站班次看板(StationBoard
)
StationBoardGet departures or arrivals at a station.
获取车站的出发或到达班次。
Request
请求示例
bash
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"
}]
}'bash
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"
}]
}'Parameters
参数说明
| Param | Description |
|---|---|
| Station location |
| Date (YYYYMMDD) |
| Time (HHMMSS) |
| |
| Maximum number of journeys |
| 参数 | 说明 |
|---|---|
| 车站地点 |
| 日期(YYYYMMDD格式) |
| 时间(HHMMSS格式) |
| |
| 返回的最大行程数量 |
Response Structure
响应结构
json
{
"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"}
}]
}
}
}]
}json
{
"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. Service Alerts (HimSearch
)
HimSearch4. 服务通知(HimSearch
)
HimSearchGet current disruptions and service information.
获取当前的服务中断和通知信息。
Request
请求示例
bash
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"
}]
}'bash
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"
}]
}'Response Structure
响应结构
json
{
"svcResL": [{
"res": {
"msgL": [{
"hid": "HIM_FREETEXT_843858",
"head": "Verringertes Sitzplatzangebot",
"text": "Wegen einer technischen Störung...",
"prio": 0,
"sDate": "20260108",
"eDate": "20260108"
}]
}
}]
}json
{
"svcResL": [{
"res": {
"msgL": [{
"hid": "HIM_FREETEXT_843858",
"head": "Verringertes Sitzplatzangebot",
"text": "Wegen einer technischen Störung...",
"prio": 0,
"sDate": "20260108",
"eDate": "20260108"
}]
}
}]
}Common Station IDs
常用车站ID
| Station | extId |
|---|---|
| Wien Hbf | 8103000 |
| Wien Meidling | 8100514 |
| Wien Westbahnhof | 8101003 |
| Salzburg Hbf | 8100002 |
| Linz Hbf | 8100013 |
| Graz Hbf | 8100173 |
| Innsbruck Hbf | 8100108 |
| Klagenfurt Hbf | 8100085 |
| St. Pölten Hbf | 8100008 |
| Wr. Neustadt Hbf | 8100516 |
| 车站 | extId |
|---|---|
| 维也纳火车总站 | 8103000 |
| 维也纳梅德灵站 | 8100514 |
| 维也纳西站 | 8101003 |
| 萨尔茨堡火车总站 | 8100002 |
| 林茨火车总站 | 8100013 |
| 格拉茨火车总站 | 8100173 |
| 因斯布鲁克火车总站 | 8100108 |
| 克拉根福火车总站 | 8100085 |
| 圣珀尔滕火车总站 | 8100008 |
| 新维也纳火车总站 | 8100516 |
Time Format
时间格式
- Dates: (e.g.,
YYYYMMDD)20260109 - Times: (e.g.,
HHMMSS= 08:00:00)080000 - Duration: (e.g.,
HHMMSS= 2h 52m)025200
- 日期:(例如:
YYYYMMDD)20260109 - 时间:(例如:
HHMMSS= 08:00:00)080000 - 时长:(例如:
HHMMSS= 2小时52分钟)025200
Error Handling
错误处理
Check field in response:
errjson
{
"err": "OK", // Success
"err": "PARSE", // Invalid request format
"err": "NO_MATCH", // No results found
"errTxt": "..." // Error details
}检查响应中的字段:
errjson
{
"err": "OK", // 成功
"err": "PARSE", // 请求格式无效
"err": "NO_MATCH", // 未找到结果
"errTxt": "..." // 错误详情
}Product Classes (cls values)
产品类别(cls值)
| cls | Product |
|---|---|
| 1 | ICE/RJX |
| 2 | IC/EC |
| 4 | Night trains |
| 8 | NJ/EN |
| 16 | REX/Regional |
| 32 | S-Bahn |
| 64 | Bus |
| 128 | Ferry |
| 256 | U-Bahn |
| 512 | Tram |
| 1024 | On-demand |
| 2048 | Other |
| cls值 | 产品类型 |
|---|---|
| 1 | ICE/RJX |
| 2 | IC/EC |
| 4 | 夜间列车 |
| 8 | NJ/EN |
| 16 | REX/区域列车 |
| 32 | S-Bahn |
| 64 | 巴士 |
| 128 | 渡轮 |
| 256 | 地铁 |
| 512 | 电车 |
| 1024 | 按需服务 |
| 2048 | 其他 |