本页定义了 GTFS 票务规范的一部分,该规范在本文档创建期间处于提案阶段。此页面还包含 Google 的其他几项限制。
要求
stop_times.txt
中的 departure_time
字段是必需的。
其他字段类型
本部分概述了其他字段类型以及 Google 提供的扩展字段。某些字段要求值采用 URI 格式。
- URI:包含架构的完全限定统一资源标识符 (URI)。URI 中的所有特殊字符都必须使用正确的转义。如需了解如何创建完全限定 URI 值,请参阅 RFC 3986 统一资源标识符 (URI):通用语法。
文件扩展名或附加内容
状态为扩展的文本文件是指已存在且需要扩展的文件。您必须添加我们在下表中定义的新字段。
状态为添加的文本文件是 Google 公交票务扩展程序引入的新文件。您需要根据下表后面的字段定义创建这些文件。请务必在 Feed 中添加这些文件。
文件名 | 州 | 定义 |
---|---|---|
agency.txt |
扩展程序 | 添加了 agency.ticketing_deep_link_id 。 |
routes.txt |
扩展程序 | 添加了 routes.ticketing_deep_link_id 。 |
trips.txt |
扩展程序 | 添加 trips.ticketing_trip_id 和 trips.ticketing_type 。 |
stop_times.txt |
扩展程序 | 添加了 stop_times.ticketing_type 。 |
ticketing_identifiers.txt |
加法 | 新建文件。如需了解详情,请参阅字段定义。 |
ticketing_deep_links.txt |
加法 | 新建文件。如需了解详情,请参阅字段定义。 |
字段定义
agency.txt
(文件扩展)
字段名称 | 状态 | 详细信息 |
---|---|---|
ticketing_deep_link_id |
可选 |
(来自 |
routes.txt
(文件扩展)
字段名称 | 状态 | 详细信息 |
---|---|---|
ticketing_deep_link_id |
可选 | (来自 ticketing_deep_links.txt 的 ID)定义要用于此路线的深层链接。如果存在,则会覆盖 agency.txt 中的字段。 |
trips.txt
(文件扩展)
字段名称 | 状态 | 详细信息 |
---|---|---|
ticketing_trip_id |
可选 |
(ID)要在深层链接中传递的标识符。不必是唯一的。 如果 |
ticketing_type |
可选 |
(枚举)定义是否可以通过深层链接为此行程购买票券:
|
stop_times.txt
(文件扩展)
字段名称 | 状态 | 详细信息 |
---|---|---|
ticketing_type |
可选 |
(枚举)定义是否可在此经停时间通过深层链接购买票券。如果您定义了
|
ticketing_identifiers.txt
(添加了文件)
票务最常见的情况是,每个经停点都有用于处理结算的标识符。 不同的代理机构可能会为任何给定经停点使用相同的标识符。如果多个代理机构负责同一经停点,请为每个代理机构重复此映射。
字段名称 | 状态 | 详细信息 |
---|---|---|
ticketing_stop_id |
必需 | (ID)为此代理机构的此经停点定义默认票务 ID。 |
stop_id |
必需 | (来自 stops.txt 的 ID)为其定义了默认 ticketing_stop_id 的停止点。 |
agency_id |
必需 | (来自 agency.txt 的 ID)为其定义了默认 ticketing_stop_id 的经停点的代理机构。 |
ticketing_deep_links.txt
(添加了文件)
字段名称 | 状态 | 详细信息 |
---|---|---|
ticketing_deep_link_id |
必需 | (ID)为深层链接定义 ID。 |
web_url |
可选 |
(网址)要访问以建立深层链接的网址。 此字段无法通过 |
android_intent_uri |
可选 |
(URI)要通过 如果为空,则表示您无法深层链接到原生 Android 应用。 如需详细了解 Android 上的深层链接,请参阅创建指向应用内容的深层链接。 此字段无法通过 |
ios_universal_link_url |
可选 |
(网址)要在 iOS 上调用的通用链接网址。 如果为空,则深层链接不会在 iOS 上显示。 如需了解详情,请参阅 iOS 上的通用链接。 此字段无法通过 |
API 调用中的字段占位符
Google 会使用以下参数调用 ticketing_deep_links.txt
中定义的网址:
字段名称 | 详细信息 |
---|---|
service_date |
(日期,可重复)行程的服务日期。 使用此字段可填写行程从第一个经停点出发的日期。 此字段的格式为 JSON 数组。 |
ticketing_trip_id |
(来自 此字段的格式为 JSON 数组。 |
from_ticketing_stop_time_id |
(可重复)相应路段起始点的 对于特定的停止时间,该值如下所示:
此字段的格式为 JSON 数组。 |
|
(可重复)相应路段结束处的 如需了解该值的派生方式,请参阅 此字段的格式为 JSON 数组。 |
boarding_time |
(ISO 8601,可重复)相应航段的起始时间 使用此字段可记录乘客上车的实际日期和时间。 此字段的时间值符合 ISO 8601 格式,采用以下字符串格式:
以下所有时间都是相同的,只是位于不同的时区:
此字段的格式为 JSON 数组。 |
arrival_time |
(ISO 8601,可重复)到达时间,即相应航段结束时的到达时间 arrival_time。 此字段的时间值应采用 ISO 8601 格式,字符串格式如下:
以下所有时间都是相同的,只是位于不同的时区:
此字段的格式为 JSON 数组。 |
示例
在此示例中,乘客的行程包含以下行段:
- 在服务日期
20190716
时,行程票券 IDti1
的起始时间票券 ID 为11
,结束时间票券 ID 为12
。乘客于世界协调时间下午 2:00 上车,并于世界协调时间下午 2:50 到达。 - 在服务日期
20190716
中,行程票券 IDti2
的起始时间票券 ID 为21
,结束时间票券 ID 为22
。乘客于世界协调时间下午 3:00 上车,并于世界协调时间下午 3:50 到达。
在此示例中,web_url
为 https://examplepetstore.com
。
有了这些信息,您可以为此行程 Feed 的参数使用以下值:
字段名称 | 详细信息 |
---|---|
service_date |
["20190716" ,"20190716"] |
ticketing_trip_id |
["ti1" 、"ti2"] |
from_ticketing_stop_time_id |
["11" 、"21"] |
to_ticketing_stop_time_id |
["12" 、"22"] |
boarding_time |
["2019-07-16T14:00:00+00:00" 、"2019-07-16T15:00:00+00:00"] |
arrival_time |
["2019-07-16T14:50:00+00:00" ,"2019-07-16T15:50:00+00:00"] |
以下是编码后的最终 URI:
https://examplepetstore.com?service_date=%5B%2220190716%22,%2220190716%22%5D
&ticketing_trip_id=%5B%22ti1%22,%22ti2%22%5D&from_ticketing_stop_time_id=%5B%2211%22,%2221%22%5D
&to_ticketing_stop_time_id=%5B%2212%22,%2222%22%5D&boarding_time=%5B%222019-07-16T14:00:00%2B00:00
%22,%222019-07-16T15:00:00%2B00:00%22%5D&arrival_time=%5B%222019-07-16T14:50:00%2B00:00 %22,%222019-07-16T15:50:00%2B00:00%22%5D
不同 ticketing_stop_id
值的示例
为了使用 ticketing_identifiers.txt
字段进行票务处理,相应经停点可以具有不同的 ID。粗体值是文件后面所述的网络调用中找到的值。
stop.txt |
---|
|
routes.txt |
---|
|
trips.txt |
---|
ti1,everyday,ri1,"TGV INOUI 6603",FR_SNCF_6603 ti2,everyday,ri1,"TGV INOUI 6681",FR_SNCF_6681 ti3,everyday,ri1,"TGV INOUI 6607",FR_SNCF_6607 |
stop_times.txt |
---|
ti1,1,si1,06:59:00,06:59:00 ti1,2,si2,08:56:00,08:56:00 ti2,1,si1,07:53:00,07:53:00 ti2,2,si2,10:00:00,10:00:00 ti3,1,si1,08:59:00,08:59:00 ti3,2,si2,10:56:00,10:56:00 |
ticketing_identifiers.txt |
---|
si1,agency1,4924 si2,agency1,4676 |
ticketing_deep_links.txt |
---|
tdl1、https://examplepetstore.com/api/gtfs/web、https://examplepetstore.com/api/gtfs/android、https://examplepetstore.com/api/gtfs/ios |
如果请求是在 2019-07-19 发出,并且 GTFS 时间采用 UTC+1 时区,则 Web 调用如下所示:
https://examplepetstore.com/api/gtfs/web?service_date=%5B%2220190719%22%5D&ticketing_trip_id=
%5B%22FR_SNCF_6603%22%5D&from_ticketing_stop_time_id=%5B%224924%22%5D&to_ticketing_stop_time_id=
%5B%224676%22%5D&boarding_time=%5B%222019-07-19T05:59:00%2B00:00%22%5&arrival_time=%5B%222019-07-19T07:56:00%2B00:00%22%5D
推荐做法
请遵循以下建议来实现 Google 公交票务扩展程序:
指南 | |
---|---|
请尽可能在代理机构或路线之间共享深层链接。 |
在静态 Feed 中,每当多个代理机构或路线具有相同的深层链接网址时,它们都必须共享 |
为 ticketing_type 设置一致的值。 |
特定经停点的 |
为父级经停点和子级经停点映射 ticketing_stop_id 。 |
为需要出票的所有父级和子级经停点执行映射。在 ticketing_identifiers.txt 文件中,ticketing_stop_id 值不会在父级经停点及其子项之间传播。 |
为 Feed 中使用相同经停点的每个代理机构映射 ticketing_stop_id 。 |
在静态 Feed 中,如果启用了票务功能的多个代理机构共用同一经停点,则必须为每个代理机构提供映射。 如需了解详情,请参阅 |
如需使用指向 Android 应用的深层链接,请使用 Android 应用链接。 |
如果合作伙伴希望通过深层链接打开 Android 应用,请将深层链接设置为 Android App Link。 |
如需使用指向 iOS 应用的深层链接,请使用 iOS 通用链接。 | 如果合作伙伴希望通过深层链接打开 iOS 应用,请将深层链接设置为 iOS 通用链接。 |