SwiftYFinance

codecov GitHub Workflow Status

要求

我使用了 Swift 5.0,不保证向后兼容性。需要 IOS 13+

安装

SwiftYFinance 可通过 Swift Package Manager 获取。

将依赖项添加到您的 Package 文件中

dependencies: [
    .package(url: "https://github.com/AlexRoar/SwiftYFinance", .upToNextMajor(from: "1.4.0")),
]

或者将依赖项添加到您的 XCode 项目中:File > Swift Packages > Add Package Dependency

https://github.com/AlexRoar/SwiftYFinance

基本用法

搜索

/*
* Main class of SwiftYFinance. Asynchronous method's callback always will
* have format: (Some Data?, Error?). If error is non-nil, then data is going to be nil.
* Review Error description to find out what's wrong.
* Synchronous API is also provided. The only difference is that it blocks the thread and
* returns data rather than passing it to the callback.
*/
import SwiftYFinance

// Searches quote in Yahoo finances and returns found results
SwiftYFinance.fetchSearchDataBy(searchTerm:"AAPL", quotesCount=20) {
    data, error in
    /*
    callback: ([YFQuoteSearchResult]?, Error?) -> Void
    struct YFQuoteSearchResult{
        var symbol: String?
        var shortname: String?
        var longname: String?
        var exchange: String?
        var assetType: String?
    }
    */
    if error == nil{
        return 
    }
    print(data!.longname ?? "No long name")
}

同样的功能,但同步执行

let (data, error) = SwiftYFinance.syncFetchSearchDataBy(searchTerm:"AAPL", quotesCount=20)
if error == nil{
    return 
}
print(data!.longname ?? "No long name")

尽管在主线程中同步执行命令不是最佳实践,但我仍然将此功能添加到项目中。编写快速、不卡顿的应用程序是您的责任,因此请明智地使用同步方法。

搜索新闻也可以通过 fetchSearchDataBy(searchNews:String, ...) 获取

基本最新数据

获取关于标识符的最新数据,收集基本信息。

SwiftYFinance.recentDataBy(identifier:"AAPL"){
    data, error in
    /*
    data ~>
    struct RecentStockData{
        var currency: String?
        var symbol: String?
        var exchangeName: String?
        var instrumentType: String?
        var firstTradeDate: Int?
        var regularMarketTime: Int?
        var gmtoffset: Int?
        var timezone: String?
        var exchangeTimezoneName: String?
        var regularMarketPrice: Float?
        var chartPreviousClose: Float?
        var previousClose: Float?
        var scale: Int?
        var priceHint: Int?
    }
    */
    if error == nil{
        return 
    }
    print(data!.regularMarketPrice ?? "No regularMarketPrice")
}

图表数据

获取图表数据点

SwiftYFinance.chartDataBy(
        identifier:"AAPL",
        start: Date(...),
        end: Date(...),
        interval = .oneday){
    data, error in
    /*
    data ~>[
        struct StockChartData{
            var date: Date?
            var volume: Int?
            var open: Float?
            var close: Float?
            var adjclose: Float?
            var low: Float?
            var high: Float?
        }
    ]
    */
    if error == nil{
        return 
    }
    print(data![0]?.open ?? "Open price is unavailable")
}

指定时间的图表数据

有时,您需要获取过去某个时间点的数据。使用 chartDataBy(..., moment: Date, ...) 来实现。

SwiftYFinance.chartDataBy(
        identifier:"AAPL",
        moment: Date(...),
        futureMargin: TimeInterval(...)
        ){
    data, error in
    /*
    data ~>[
        struct StockChartData{
            var date: Date?
            var volume: Int?
            var open: Float?
            var close: Float?
            var adjclose: Float?
            var low: Float?
            var high: Float?
        }
    ]
    */
    if error == nil{
        return 
    }
    print(data![0]?.open ?? "Open price is unavailable")
}

标识符摘要

API 的这部分非常庞大。Yahoo Finance 拥有大量的摘要模块,我实现了其中的几个。不过,您仍然可以从原始 JSON 参数中获取数据。

我将在每个版本中添加新的模块。目前,只实现了必要的模块。

模块 支持 模块 支持
calendarEvents recommendationTrend
summaryProfile quoteType
industryTrend price
summaryDetail incomeStatementHistoryQuarterly
assetProfile balanceSheetHistoryQuarterly
incomeStatementHistory cashFlowStatementHistory
balanceSheetHistory cashFlowStatementHistoryQuarterly
financialData secFilings
upgradeDowngradeHistory institutionOwnership
fundOwnership majorDirectHolders
majorHoldersBreakdown insiderTransactions
insiderHolders netSharePurchaseActivity
sectorTrend earnings
companyOfficers earningsHistory
earningsTrend indexTrend
symbol fundProfile
topHoldings fundPerformance
defaultKeyStatistics

您可以通过调用 summaryDataBy(...) 获取模块

SwiftYFinance.summaryDataBy(identifier: "AAPL", selection = .all){
data, error in
    if error != nil{
        return
    }
    print(data)
    /*
    data ~>
    struct IdentifierSummary {
        var recommendationTrend:RecommendationTrend?
        var summaryProfile:SummaryProfile?
        var quoteType:QuoteType?
        var price:Price?
        var indexTrend:IndexTrend?
        var calendarEvents:CalendarEvents?
        var summaryDetail:SummaryDetail?
        var dataStorage:JSON?
    }
    */

    // Raw JSON:
    print(data.dataStorage)
}

有几种选择类型可用。.all 将获取每个方法,即使尚未支持,以便您可以从原始 JSON 中获取数据。 您可以选择 .supported,然后将仅获取受支持的数据。 此外,您可以指定特定的模块(例如:.price)或模块列表(例如:[.price, .summaryDetail]

作者

Aleksandr Dremov, dremov.me@gmail.com

许可证

SwiftYFinance 基于 MIT 许可证发布。请查看 LICENSE 文件了解更多信息。