trafiklab / resrobot-php-sdk
使用ResRobot在项目中使用瑞典公共交通数据。
Requires
- php: >=7.4
- ext-json: *
- trafiklab/php-sdk-commons: ~1.2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.14
- phpmd/phpmd: ^2.6.0
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: ^3.4
README
ResRobot提供关于瑞典公共交通的实时数据。显示一个站点的所有出发和到达信息,或者轻松规划从A到B的路线。更多信息可以在Trafiklab - ResRobot路线规划器和Trafiklab - ResRobot时刻表找到。
此存储库包含一个PHP SDK,可以轻松使用ResRobot API。这样,您无需担心发出请求、缓存或解析响应。所有响应都会解析并作为PHP类返回。
安装
可以使用Composer进行安装
composer require trafiklab/resrobot-php-sdk
版本控制
此包遵循语义版本控制
给定版本号MAJOR.MINOR.PATCH,我们在以下情况下增加版本号:
- MAJOR版本号当我们在不兼容的API更改时增加,
- MINOR版本号当我们以向后兼容的方式添加功能时,
- PATCH版本号当我们进行向后兼容的bug修复时。
预发布和构建元数据标签作为MAJOR.MINOR.PATCH格式的扩展也提供了额外的标签。
需求
以下软件是使用此SDK所必需的
- PHP 7.4或更高版本
- PHP Curl扩展
- PHP JSON扩展
使用方法
为了使用Resrobot时刻表和路线规划API,您首先需要从Trafiklab获取API密钥。
重要:您只需要1个API密钥,它可以用于所有Resrobot API调用。多个API密钥设置器只是为了与我们的其他API包装器兼容,让您可以轻松地在API之间切换。
获取时刻表(站点的出发或到达)
时刻表
请求
以下代码示例说明了如何检索某个站点的时刻表。
$wrapper = new ResRobotWrapper();
// Create a new routeplanning object. The wrapper will instantiate an object of the interface type.
$wrapper = $wrapper->createTimeTableRequestObject();
$wrapper->setStopId("740000001");
$wrapper->setTimeTableType(TimeTableType::DEPARTURES);
$wrapper->setUserAgent("<YOUR_USER_AGENT>");
$wrapper->setTimeTablesApiKey("<YOUR_API_KEY>");
$response = $resRobotWrapper->getTimeTable($departuresRequest);
<YOUR_API_KEY>是从Trafiklab获取的。<YOUR_USER_AGENT>是一个字符串,用于标识您的应用程序。虽然这没有任何强制要求,但使用清晰的用户代理是一种良好的做法。例如,可以是MyDemoApp/1.0.0 (mail@example.com) 。如果您不想发送用户代理,只需省略此行即可。
有关ResRobot请求参数的详细信息,请参阅ResRobot出发/到达API页面。SDK中仅实现了最重要/最常用的请求参数,以减少杂乱,并确保在API更改的情况下,我们可以保持SDK不变。如果您认为我们遗漏了重要的字段,请创建一个问题,以便我们可以审查。
响应
为了使用您请求返回的数据,您只需在响应对象上调用getTimeTable()即可。此方法返回一个包含TimeTableEntry实例的数组,每个实例描述一次出发或到达。您可以通过查看代码和PHPDoc来获取有关哪些字段可用的最新信息。有关ResRobot响应的详细信息,请参阅ResRobot出发/到达API页面。
以下代码给出了使用SDK的快速概述。
$entry = $response->getTimetable()[0]; // Get the first result
// Type of transport, one of the constants in Trafiklab\Common\Model\Enum\TransportType
$entry->getTransportType();
// The name of the stop location
$stop = $timeTableEntry->getStopName()
// The number of the line
$lineNumber = $timeTableEntry->getLineNumber();
// The direction of the vehicle
$direction = $timeTableEntry->getDirection();
// The scheduled departure time at the stop
$scheduledStopTime = $timeTableEntry->getScheduledStopTime();
路线规划
请求
以下代码示例说明了如何从A到B规划路线
$queryTime = new DateTime();
$queryTime->setTime(18, 0);
$wrapper = new ResRobotWrapper();
// Create a new routeplanning object. The wrapper will instantiate an object of the interface type.
$wrapper = $wrapper->createRoutePlanningRequestObject();
$wrapper->setOriginId("740000001");
$wrapper->setDestinationId("740000002");
$wrapper->setDateTime($queryTime);
$wrapper->setUserAgent(("<YOUR_USER_AGENT>");
$wrapper->setRoutePlanningApiKey("<YOUR_API_KEY>");
$response = $resRobotWrapper->getRoutePlanning($routePlanningRequest);
响应
为了使用您请求返回的数据,您只需在响应对象上调用getTrips()即可。此方法返回一个包含Trip实例的数组,每个实例描述一次出发或到达。您可以通过查看代码和PHPDoc来获取有关哪些字段可用的最新信息。有关ResRobot响应的详细信息,请参阅ResRobot出发/到达API页面。
以下代码给出了使用SDK的快速概述。
$trip = $response->getTrips()[0]; // Get the first result
// Tell the user about every leg in their journey.
foreach ($trip->getLegs() as $leg) {
// There are two types of legs (at this moment): Vehicle journeys, where a vehicle is used, or walking parts
// where a user walks between two stations. Not all fields are available for walking parts, so we need to handle them differently.
if ($leg->getType() == RoutePlanningLegType::VEHICLE_JOURNEY) {
$leg->getVehicle()->getType();
$leg->getVehicle()->getNumber();
$leg->getDirection();
$leg->getDeparture()->getStopName();
$leg->getDeparture()->getScheduledDepartureTime()->format("H:i");
$leg->getDeparture()->getScheduledDepartureTime()->getTimestamp();
$leg->getArrival()->getScheduledArrivalTime()->getTimestamp();
$leg->getArrival()->getStopName();
// More fields are available
} else if ($leg->getType() == RoutePlanningLegType::WALKING) {
// Limited fields when walking!
$leg->getDeparture()->getStopName(); // origin
$leg->getArrival()->getStopName(); // destination
}
}
贡献
我们接受拉取请求,但请首先创建一个问题来讨论添加或修复。如果您希望添加新功能,也可以通过创建问题来创建功能请求。
帮助
如果您有任何问题,请通过问题跟踪器寻求帮助。
- 需要帮助设置API密钥?请首先阅读我们的入门指南。
- 您想检查当前系统的状态吗?服务中断会在Trafiklab首页发布。