本地OTP v1服务器GTFS数据有效期及更新查询技术问询
如何检查OTP v1服务器的GTFS数据过期状态
通过GraphQL查询OTP v1服务器
- OTP v1的GraphQL API可以直接查询GTFS数据的有效期,用来判断是否需要更新或线路是否过期:
- 查询整个GTFS feed的全局有效期,对比当前日期就能知道整体数据是否过期:
{ feedInfo { startDate endDate } } - 查询特定线路(比如55路)的有效时间范围,需要关联线路、班次和服务周期:
返回结果里会包含该线路所有班次对应的服务起止日期,你可以检查是否有班次的结束日期早于当前日期,以此判断线路是否存在过期数据。{ routes(name: "55") { trips { service { startDate endDate } } } } - 注意:不同版本的OTP v1可能略有schema差异,如果上述字段无法返回数据,可以尝试查询
feed相关的其他字段,比如feedId对应的时间范围。
- 查询整个GTFS feed的全局有效期,对比当前日期就能知道整体数据是否过期:
从本地.gtfs.zip文件查看有效期
如果GraphQL查询无法满足需求,直接从本地GTFS压缩包提取信息:
- 解压后优先找
feed_info.txt文件,里面的feed_start_date和feed_end_date字段(格式为YYYYMMDD)直接定义了整个GTFS数据的有效时间范围。 - 若没有
feed_info.txt,就需要查看calendar.txt和calendar_dates.txt:calendar.txt中每个service_id对应一条服务周期记录,包含start_date和end_date;calendar_dates.txt记录了服务的例外日期(临时调整),结合这两个文件可以统计出所有服务的实际有效时间。
- 查特定线路的有效期:先在
routes.txt找到目标线路的route_id,再到trips.txt找到该线路关联的所有service_id,最后在calendar.txt中查询这些service_id的起止日期,就能得到该线路的有效时间范围。
内容的提问来源于stack exchange,提问作者bliako
相关产品推荐
相关产品推荐

