Betfair API-NG 的 Swift 封装器,Betfair API-NG。目前仅支持市场数据流。
它基于 Swift NIO 构建。
这未经生产环境测试。按现状使用可能不是一个好主意。尤其需要测试内存消耗。
仅支持 Swift 4。
由于 Kitura-Net 中需要上游进行更改,您只能在 Swift 包清单中引用 master
分支
.package(url: "https://github.com/foulkesjohn/BetSwift.git", .branch("master"))
您需要 PEM 格式的 Betfair 证书才能在 Linux 上运行。对于 Mac,您需要 pem 和 p12 证书。
首先,您需要获取会话令牌。
let sessionParams = SessionFetchParams(username: "username",
password: "password",
appKey: "appkey",
certPath: "path/to/cert_file.pem",
certPassword: "cert_password")
SessionToken.fetch(params: sessionParams) {
sessionToken in
if let sessionToken = sessionToken {
connect(sessionToken: sessionToken)
} else {
print("no session token")
}
}
获得令牌后,您可以连接数据流。您需要创建一个发送身份验证 Op
的处理程序。连接后,您可以发送订阅。
一旦数据流连接,您就可以发送订阅。
let marketFilter = MarketFilter(marketIds: nil,
bspMarket: nil,
bettingTypes: nil,
eventTypeIds: ["7", "1"],
turnInPlayEnabled: nil,
marketTypes: ["WIN"],
venues: nil,
countryCodes: ["GB"])
let marketDataFilter = MarketDataFilter(fields: ["EX_BEST_OFFERS",
"EX_MARKET_DEF",
"EX_LTP"],
ladderLevels: 3)
let marketSubscription = MarketSubscription(id: 1,
marketFilter: marketFilter,
marketDataFilter: marketDataFilter)
let op = Op.marketSubscription(marketSubscription)
ctx.writeAndFlush(wrapOutboundOut(op), promise: nil)
创建您自己的 ChannelInboundHandler
,并将 InboundIn
类型设置为 Op
,以从数据流接收 Op
。
public class OpHandler: ChannelInboundHandler {
public typealias InboundIn = Op
public typealias OutboundOut = Op
public func channelRead(ctx: ChannelHandlerContext, data: NIOAny) {
let op = unwrapInboundIn(data)
let outOp = ....
ctx.writeAndFlush(wrapOutboundOut(op), promise: nil)
}
}