linz-public-transport

🚊 林茨公交实时查询助手

基于林茨公共交通官方EFA接口的实时查询工具,零依赖Python标准库实现,为奥地利林茨地区用户提供精准的站点搜索与班次到站信息。

收藏
17.3k
安装
3.5k
版本
v1.0.1
CLS 安全性认证2026-05-21
点击查看完整报告 >

使用说明

核心用法

Linz Public Transport Skill 是一款专为奥地利林茨(Linz)地区设计的公共交通查询工具,通过调用 Linz Linien 官方 EFA(Elektronische Fahrplan-Auskunft)接口,实现站点搜索与实时到站信息查询两大核心功能。

该 Skill 提供三种主要使用模式:

  • 站点搜索模式:通过 stops 子命令,根据关键词(如 "taubenmarkt")模糊匹配公交站点,返回站点ID、名称及坐标信息
  • 班次查询模式:通过 departures 子命令,基于精确的站点ID获取未来出发班次,支持自定义返回数量限制
  • 一键查询模式:通过 next 子命令,将站点搜索与班次查询合并为单次调用,适合快速获取"下一站还有多久"的场景

技术实现上,该 Skill 采用纯 Python 3 标准库编写,无需任何第三方依赖。网络层基于 urllib.request 实现 HTTP GET 请求,数据解析使用标准 json 模块,参数处理通过 argparse 完成。执行脚本路径为 {baseDir}/scripts/linz_transport.py,支持通过命令行参数 --base-url 或环境变量 LINZ_TRANSPORT_API_BASE_URL 自定义 API 端点,默认指向 http://www.linzag.at/linz2

显著优点

极致轻量与可移植性:零外部依赖的设计使其可在任何 Python 3 环境中直接运行,无需 pip 安装,极大降低了部署门槛和供应链攻击风险。

安全架构设计:代码层面完全规避了 evalexecsubprocess 等危险函数,所有用户输入均经过 argparse 类型验证和 urllib.parse.urlencode 安全编码,从根本上杜绝代码注入与命令注入风险。

完善的容错机制:针对网络超时、HTTP 错误状态码、JSON 解析异常、空结果集等边界情况均设计了优雅降级策略,包括自动重试建议、模糊匹配提示、空结果友好说明等。

输出格式标准化:返回数据包含相对时间(countdownInMinutes)与绝对时间(time)双维度信息,JSON 字段命名稳定,便于下游自动化处理或人机交互展示。

权限最小化原则:仅申请 network 必需权限和可选的 env 配置权限,无文件系统、系统级或敏感 API 访问需求,符合安全最佳实践。

潜在缺点与局限性

地域局限性:功能严格绑定林茨地区公共交通网络,对其他地区用户无价值,且依赖 Linz Linien 官方 API 的可用性与稳定性。

协议安全性:默认使用 HTTP 而非 HTTPS 协议,虽目标服务器支持重定向,但仍存在中间人攻击的理论风险,建议生产环境显式配置 HTTPS 端点。

来源可信度:开发者账号为个人 GitHub 用户(fjrevoredo),无组织级认证背书,虽代码本身通过安全审计,但长期维护承诺与供应链完整性需持续关注上游更新。

功能单一性:仅覆盖站点查询与到站信息,缺乏路线规划、票价计算、实时延误预警等进阶功能,复杂出行场景需配合其他工具使用。

交互模式限制:当前为命令行脚本形态,无原生图形界面或自然语言对话封装,对非技术用户存在一定使用门槛。

适合的目标群体

  • 林茨地区居民与通勤者:需要日常查询公交、电车实时到站信息的本地用户
  • 差旅与访客:短期访问林茨、需要快速获取公共交通信息的外国游客
  • 开发者与集成商:需要将林茨公交数据嵌入自有应用、聊天机器人或自动化工作流的技术团队
  • 低资源环境用户:对依赖体积敏感、追求极简部署的边缘计算或 IoT 场景

使用风险

网络依赖风险:核心功能完全依赖外部 API 可用性,若 Linz Linien 服务端故障或网络中断,Skill 将无法正常返回结果。建议实现本地缓存或降级提示机制。

API 变更风险:EFA 接口为第三方维护,若官方调整端点路径、响应格式或认证策略,可能导致 Skill 失效。需关注上游版本更新。

输入歧义风险:站点名称模糊匹配可能返回多个结果,若用户未明确指定 --stop-id 且未使用 --pick-first,可能陷入交互循环或获取非预期站点信息。

超时配置风险:默认 15 秒超时在弱网环境下可能不足,极端情况下可能导致长时间挂起,建议根据实际网络环境调整 timeout 参数。

安全解读

核心功能

linz-public-transport 是一个专为奥地利林茨市(Linz)设计的公共交通查询工具,通过调用 Linz Linien 官方的 EFA(Elektronische Fahrplan-Auskunft)API 实现两大核心功能:

  • 站点搜索(XML_STOPFINDER_REQUEST):根据关键词(如 "Taubenmarkt")查找公交站点,返回站点 ID、名称及坐标信息
  • 实时到站查询(XML_DM_REQUEST):通过站点 ID 获取未来 5-10 班车的预计到站时间,支持相对时间(分钟)与绝对时间双显示

工具提供三种调用模式:stops(纯搜索)、departures(纯到站查询,需已知站点 ID)、next(搜索+到站一键完成,支持 --pick-first 自动选择首个匹配站点)。

显著优势

  • 零依赖安全架构:纯 Python 标准库实现(仅使用 urllibargparsejson 等),彻底规避供应链攻击风险
  • 透明可信:代码开源可查,功能单一明确,无隐藏网络行为或数据收集
  • 灵活配置:支持 --base-url 参数、LINZ_TRANSPORT_API_BASE_URL 环境变量及默认端点三级 fallback
  • 用户友好输出:自动按倒计时排序,同时提供相对与绝对时间,JSON 字段名稳定可预测
  • 跨平台兼容:Python 3 全平台支持,Bash/PowerShell 示例完备

局限与风险

  • HTTP 明文传输:Linz 官方 API 仅提供 HTTP 端点(非 HTTPS),站点搜索关键词与站点 ID 均以明文传输。虽数据为公开信息,但存在中间人攻击理论可能(RISK-001)。
  • 来源可信度 T3:由个人开发者(fjrevoredo)维护,非官方机构或知名开源基金会,建议定期审查代码更新(RISK-002)。
  • API 依赖性强:完全依赖 Linz AG 的 EFA 服务可用性,无离线缓存机制,API 故障时功能中断。
  • 地理局限:仅覆盖林茨市及其周边地区(Linz Linien 运营范围),无多城市扩展能力。

适用人群

  • 林茨市民与游客:日常通勤、出行规划、实时到站查询
  • 开发者与集成商:需要将林茨公交数据嵌入自有应用或自动化工作流
  • 隐私敏感用户:偏好零第三方依赖、纯本地运行的工具

常规风险提示

| 风险项 | 说明 | 缓解措施 |
|--------|------|----------|
| 网络传输安全 | HTTP 明文通信 | 监控 Linz AG HTTPS 支持,必要时通过环境变量自定义加密端点 |
| 供应链安全 | 个人开发者维护 | 代码开源可审计,建议 pin 版本并审查更新 |
| API 服务中断 | 依赖外部服务 | 实现客户端重试与降级提示 |
| 输入歧义 | 站点名称可能多义 | 使用 `--pick-first` 前确认结果,或显式指定 `--stop-id` |

整体而言,这是一个代码质量优秀、功能聚焦、安全风险可控的实用工具,特别适合需要可靠林茨公交信息的用户。

linz-public-transport 内容

references文件夹
scripts文件夹
手动下载zip · 6.4 kB
endpoints.mdtext/markdown
请选择文件