TrainInformationService

Build Status Version License Platform

英国火车信息服务,使用国家铁路开放API

此 API 旨在为 国家铁路实时出发信息板 Web 服务 提供一个更友好的界面。

安装

TrainInformationService 可以使用 Swift Package ManagerCocoaPods 进行安装。

Swift Package Manager

Swift Package Manager 需要 Swift 4.0 或更高版本。 首先,创建一个 Package.swift 文件。 它应该看起来像这样:

dependencies: [
  .package(url: "https://github.com/dchakarov/TrainInformationService.git", from: "0.1.0"),
]

然后,swift build 应该会拉取并编译 TrainInformationService,供您开始使用。

CocoaPods

要安装它,只需将以下行添加到您的 Podfile:

pod 'TrainInformationService'

入门

初始化

要使用此框架,您需要一个国家铁路问询处 LDBWS (OpenLDBWS) 的令牌。 您可以在此处免费注册并获取您的令牌 - http://realtime.nationalrail.co.uk/OpenLDBWSRegistration/。 有关国家铁路提供的可用 API 的更多信息,您可以在此处阅读 - http://www.nationalrail.co.uk/100296.aspx

获取令牌后,您可以像这样实例化该服务:

import TrainInformationService

let trainInformationService = TrainInformationService(
  apiUrl: "https://lite.realtime.nationalrail.co.uk/OpenLDBWS/ldb11.asmx",
  token: "your-token-goes-here")

目前,该服务支持 OpenLDWS 的两种方法。 两者都是异步的,因为它们是从国家铁路实时出发信息板 Web 服务实时获取数据的。 有关方法的完整列表和文档,您可以访问此处 - https://lite.realtime.nationalrail.co.uk/OpenLDBWS/

获取给定车站的车站信息板 (GetStationBoard)

您可以在此处找到车站列表及其 CSR 代码 - http://www.nationalrail.co.uk/stations_destinations/48541.aspx

let stationCSRCode = "PAD" // Paddington
let paddingtonBoard = await trainService.stationBoard(for: stationCSRCode, items: 10)

生成的 StationBoard 将是一个对象,包含 generatedAt 日期、完整的始发地和目的地名称,以及最多 10 个 DepartingService 对象的数组。

按目的地过滤

您可以使用其 CSR 代码,仅获取到特定目的地的结果

let originCSRCode = "KGX" // Kings Cross
let destinationCSRCode = "FPK" // Finsbury Park
let filteredBoard = await trainService.stationBoard(for: originCSRCode, to: destinationCSRCode, items: 10)

获取给定车站的实时出发信息板 (GetDepartureBoard)

let stationCSRCode = "PAD" // Paddington
trainInformationService.departureBoard(for: stationCSRCode, items: 5) { result in
	switch result {
	case .success(let board):
		print(board)
	case .error(_):
		break
	}
}

生成的 board 将是一个最多 5 个 DepartingService 对象的数组。

获取服务的下一站 (GetServiceDetails)

如果您有一个服务 ID(例如,来自上述调用的 DepartingService 对象),您可以按如下方式获取其时刻表上剩余的站点列表

trainInformationService.serviceDetails(service.serviceId) { callingPoints in
  print(callingPoints)
}

这里 callingPointsCallingPoint 对象的数组。

贡献

欢迎贡献! 只需提交一个 PR。

作者

Dimitar Chakarov, dimitar@dchakarov.com

许可证

这是发布到公共领域的免费且不受限制的软件。 有关更多信息,请参见 LICENSE 文件。