trafiklab/sl-php-sdk

使用SL在您的项目中使用瑞典公共交通数据

1.1.2 2020-01-09 08:23 UTC

This package is auto-updated.

Last update: 2024-09-09 18:59:04 UTC


README

Build status Latest Stable Version codecov License: MPL 2.0

Storstockholms Lokaltrafik (SL) 提供了斯德哥尔摩公共交通的实时数据。使用它,您可以显示站点的所有出发和到达时间,或者轻松规划从A到B的路线。更多信息可以在Trafiklab网站上找到。

此存储库包含一个PHP SDK,可以轻松使用SL出发和路线规划API。这样您就不必担心请求、缓存或解析响应。所有响应都解析并作为PHP类返回。

正在进行中尚无1.0.0版本发布。如果您想提前查看,可以通过手动将此存储库添加到项目的composer文件中。但是,请注意,可能仍然会发生破坏性更改。预计首个版本将在接下来的几个月内发布。

安装

可以使用Composer进行安装

composer require trafiklab/sl-php-sdk

版本控制

此软件包遵循语义版本控制

给定版本号 MAJOR.MINOR.PATCH,我们增加以下版本:

  • MAJOR版本当我们进行不兼容的API更改时,
  • MINOR版本当我们以向后兼容的方式添加功能时,
  • PATCH版本当我们进行向后兼容的错误修复时。

预发布和构建元数据的附加标签可作为MAJOR.MINOR.PATCH格式的扩展。

要求

以下软件是使用此SDK所必需的

  • PHP 7.1或更高版本
  • PHP Curl扩展
  • PHP JSON扩展

使用方法

为了使用SL时刻表和路线规划API,您需要首先从Trafiklab 获取API密钥。

获取时刻表(站点的出发或到达时间)

时刻表

请求

以下代码示例说明了如何检索特定站点的时刻表。

  $departuresRequest = new SlTimeTableRequest();
  $departuresRequest->setStopId("1000");

  $slWrapper = new SlWrapper();
  $slWrapper->setUserAgent("<YOUR_USER_AGENT>");
  $slWrapper->setTimeTablesApiKey("<YOUR_API_KEY>");
  $response = $slWrapper->getTimeTable($departuresRequest);

<YOUR_API_KEY>Trafiklab 获得。 <YOUR_USER_AGENT> 是一个字符串,用于标识您的应用程序。虽然这没有任何强制要求,但使用清晰的用户代理是一种好的做法。例如可以是 MyDemoApp/1.0.0 (mail@example.com) 。如果您不想发送用户代理,可以省略此行。

有关SL请求参数的详细信息可以在Trafiklab网站找到。SDK仅实现了最常用的重要请求参数,以减少杂乱并确保在API更改的情况下SDK保持不变。如果您认为我们遗漏了重要字段,请创建问题,以便我们可以审查。

响应

为了使用您请求返回的数据,您可以在响应对象上简单地调用getTimeTable()。此方法返回一个TimeTableEntry实例数组,每个实例都描述一个出发或到达。您可以通过查看代码和PHPDoc来获取有关可用字段的最新信息。有关ResRobot响应的详细信息可以在Trafiklab网站找到。

以下代码展示了如何使用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 SlWrapper();

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

贡献

我们接受pull请求,但请在讨论添加或修复之前先创建一个问题。如果您想看到新功能被添加,也可以通过创建问题来创建功能请求。

帮助

如果您遇到问题,请通过问题跟踪器寻求帮助。