青岛「城运e生活」公交实时接口:逆向文档+纯标准库 Python 客户端(MIT-0)
- Python 100%
| samples | ||
| .gitignore | ||
| _check_api.py | ||
| API.md | ||
| cyelife_bus.py | ||
| LICENSE | ||
| README.md | ||
cyelife-api
青岛「城运e生活」公交实时接口整理。数据源为其 H5:
https://publicbus-uniapp-out.cyelife.com(uniapp 编译产物)。
结论速览
- 接口基址
https://api.cyelife.com/api,读接口无需登录态即可访问(Authorization传空字符串即可)。 POST+Content-Type: application/json,响应统一{"code":200,"message":"操作成功","data":...}。- 仅覆盖青岛市;坐标为 GCJ-02(高德火星坐标)。
- 共 16 个接口:12 个只读(已 curl 实测;
stationCode仅实测到错误语义,成功响应未捕获),4 个收藏/关注类写接口。 - 2026-08-31 复测:新增站牌二维码解析接口与 2 个响应字段,收藏类接口未登录行为有变。详见 API.md 末尾「变更记录」。
目录
| 文件 | 内容 |
|---|---|
| API.md | 16 个接口的完整文档:参数、响应字段、实测踩坑点 |
| cyelife_bus.py | 纯标准库 Python 客户端(无依赖),封装全部读接口 |
| samples/ | 6 份实测原始响应样例 |
快速开始
python3 cyelife_bus.py # 端到端演示(25 路,搜索→详情→定位→实时到站)
python3 cyelife_bus.py search 25 # 搜索
python3 cyelife_bus.py live <routeId> <stationId> # 查某线某站实时到站
核心链路(4 步查实时到站)
① search(keyword) → routeList[].routeId
② route_detail(routeId, runDirection) → stationList[].stationId
③ nearest_station(routeId, lng, lat) → 站位次(取 stationList[n-1])
④ bus_schedule(routeId, stationId) → busScheduleList[](实时到站车辆)
三个必看的坑
runDirection请求参数是0/1,不是1/2(1=上行 0=下行,传 2 报「线路异常」);但响应里busSchedule/pathPlan回显的是1/2另一套编码。busSchedule/detail的isReturnBusHistoryGps必填,省略会 HTTP 500;批量查时任一 ID 无效会让整个请求 500。search的stationList项站点 ID 字段叫routeStationId(不是stationId);收藏态字段服务端拼成了fallowed,但提交关注时又叫followed。
声明
仅用于学习与个人公交查询。所有请求均以空 Authorization 发起;写接口(收藏/关注)未做真实提交。请合理控制请求频率。
已知样例 ID(青岛)
| 项 | 值 |
|---|---|
| 25 路 routeId | 651606141628974743 |
| 市政府山东路(25路第1站) | 651606141628974744 |
| 参考坐标(市政府, GCJ-02) | 120.382665, 36.066938 |