上海公交查询
使用 Node.js CLI 查询上海公交数据。所有命令向标准输出写入一个 JSON 对象,错误写入标准错误。
工作流程
- 查询全量线路时使用
list-routes,通过--offset和--limit分页。 - 已知线路名称时使用
search-routes。将候选线路的起点、终点和方向展示给用户确认,不得自动选择同名线路或第一个方向。 - 将用户确认的完整线路对象传给
list-stops。同名站点应结合站序、前一站和后一站确认。 - 将确认后的完整
route和stop传给get-arrivals,读取车辆、剩余分钟、剩余站数、预计到站时刻和数据更新时间。
CLI
node scripts/cli.mjs list-routes --offset 0 --limit 100
node scripts/cli.mjs search-routes --query "49路"
node scripts/cli.mjs list-stops --input route.json
node scripts/cli.mjs get-arrivals --input arrival-input.json
list-stops 的输入是 search-routes 返回的单个完整线路对象:
{
"lineName": "49路",
"direction": "1",
"origin": "汉口路江西中路",
"destination": "上海体育馆",
"providerIds": {}
}
get-arrivals 输入:
{
"route": {
"lineName": "49路",
"direction": "1",
"origin": "汉口路江西中路",
"destination": "上海体育馆",
"providerIds": {}
},
"stop": {
"stopName": "徐家汇",
"order": 15,
"previousStop": null,
"nextStop": null,
"providerIds": {}
}
}
输入可通过 --input file.json 或标准输入提供。退出码 0 表示查询完成,退出码 1 表示输入无效或所有数据源均失败。
数据源
- 配置
SHMAAS_BASE_URL、SHMAAS_MERCHANT_ID和SHMAAS_SALT后优先使用随申行。 - 未配置随申行或请求失败时,自动尝试公开 Provider。
- 公开接口不属于官方稳定服务,不应承诺可用性。
- Provider 切换时按线路起终点、站名和相邻站重新定位,避免沿用另一数据源的站序。