trafiklab/resrobot-php-sdk

使用ResRobot在项目中使用瑞典公共交通数据。

2.1.1 2023-08-18 17:39 UTC

This package is auto-updated.

Last update: 2024-09-18 19:48:42 UTC


README

Build status Latest Stable Version codecov License: MPL 2.0

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
   }
}

贡献

我们接受拉取请求,但请首先创建一个问题来讨论添加或修复。如果您希望添加新功能,也可以通过创建问题来创建功能请求。

帮助

如果您有任何问题,请通过问题跟踪器寻求帮助。