trafiklab / sl-php-sdk
使用SL在您的项目中使用瑞典公共交通数据
Requires
- php: >=7.1
- ext-json: *
- trafiklab/php-sdk-commons: ~1.2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.14
- phpmd/phpmd: ^2.6.0
- phpunit/phpunit: ^5.5
- squizlabs/php_codesniffer: ^3.4
README
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请求,但请在讨论添加或修复之前先创建一个问题。如果您想看到新功能被添加,也可以通过创建问题来创建功能请求。
帮助
如果您遇到问题,请通过问题跟踪器寻求帮助。
- 需要帮助使用API密钥?请先阅读www.trafiklab.se/api-nycklar。
- 您想检查当前系统状态吗?服务中断信息发布在Trafiklab首页上。