fugle-realtime-swift

license

Fugle Realtime API 客户端的 Swift 实现。

安装

fugle-realtime-swift 添加为 Package.swift 文件的依赖项

dependencies: [
    .package(url: "https://github.com/KeanuPang/fugle-realtime-swift.git", .upToNextMajor(from: "0.1.1"))
]

Package.swift 中为您要使用的目标添加依赖项

dependencies: [
 .product(name: "FugleRealtime", package: "fugle-realtime-swift")
]

快速演示

通过 HTTP 请求,查询代码为 2884 的股票的盘中元数据

import FugleRealtime

do {
    if let result = try await client.getIntraday(MetaData.self, symbol: "2884") {
        print("\(result.toJSONString(prettyPrint: true) ?? "")")

        if let metaData = result.meta {
            print("name: \(metaData.nameZhTw ?? "")")
            print("priceReference: \(metaData.priceReference?.stringValue ?? "")")
            
            /// will print:
            /// name: 玉山金
            /// priceReference: 29.6
        }
    }

    client.shutdownWS()
} catch {}

通过 Websocket 实时订阅代码为 2884 的股票的盘中报价数据

import FugleRealtime

var promise: EventLoopPromise<Void>?

// Prepare your callback function for quote data
let quoteDataCallback: ((Result<QuoteData, ClientError>) -> Void) = {
    switch $0 {
    case .success(let result):
        print("\(result.quote?.priceAvg?.price?.stringValue ?? ""), \(result.quote?.priceAvg?.at ?? "")")
    case .failure(let failures):
        promise?.fail(failures)
    }
}

// connect and subscribe intraday websocket endpoint
do {
    promise = try await client.streamIntraday(QuoteData.self, symbol: "2884", callback: quoteDataCallback)
    try promise?.futureResult.wait()
} catch {
    client.shutdownWS()
}

用法

将您的 API Token 传递给 FugleClient

let token = "demo"
let client = FugleClient = FugleClient.initWithApiToken(demo)

或者,您可以将包含以下环境变量声明的 .env 文件放入工作目录中

FUGLE_API_TOKEN=demo

现在您可以直接使用 FugleClient,而无需传递 Token 参数

let client = FugleClient.shared

通过 HTTP 端点调用盘中资源,只需将 Mapped 数据类传递给 getIntraday() 函数

let response: MetaData? = try await client.getIntraday(MetaData.self, symbol: "2884")

如果您想通过 HTTP 端点获取带有分页的成交明细数据,您可以调用 getIntradayDealts() 函数

let response: DealtsData? = try await client.getIntradayDealts(symbol: "2884", pagingLimit: 10)

盘中资源

类型 映射的数据类 (Mapped Data Class)
Meta(元数据) MataData
Quote(报价) QuoteData
Chart(图表) ChartData
Dealts(成交明细) DealtsData
Volumes(成交量) VolumesData

对于历史股票数据,只需调用 getMarketData() 函数

let response: CandleData? = try await client.getMarketData(symbol: "2884", from: "2022-04-25", to: "2022-04-29")

历史行情资源

类型 映射的数据类 (Mapped Data Class)
Candles(K 线) CandleData

Bug 报告

如果您在使用此 SDK 时遇到任何问题,请在 GitHub issue 上提交 Bug 报告。