Giter Site home page Giter Site logo

swiftyfinance's Introduction

SwiftYFinance

Language GitHub Workflow Status codecov CodeFactor Version License Platform

Example

To run the example project, clone the repo, and run pod install from the Example directory first. Example project includes basic features demonstration.

You asked about this beautiful chart in the preview gif: AlexRoar/BeautyChart

Requirements

I used Swift 5.0 and backward compatibility is not guranteed. IOS 13+

Installation

SwiftYFinance is available through CocoaPods. To install it, simply add the following line to your Podfile and run pod install:

pod 'SwiftYFinance'

You can try Example project on your device by running:

pod try SwiftYFinance

Basic Usage

Search

/*
* 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")
}

The same thing but synchronously:

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

Even though executing commands in the main thread synchronously is not the best practice, I added this feature to the project. It's on your account to write fast, non-freezing apps, so use synchronous methods wisely.

Search for news is also awailable through fetchSearchDataBy(searchNews:String, ...)

Basic recent data

Fetches the most recent data about identifier collecting basic information.

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")
}

Chart data

Fetches chart data points

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")
}

Chart data at moment

Sometimes, you need to fetch data at some moment in the past. Use chartDataBy(..., moment: Date, ...) for that.

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")
}

Identifier Summary

This part of API is MASSIVE. Yahoo Finance has a lot of summary modules and I implemented several of them. Still, you can fetch data from raw JSON parameter.

I will add new modules with every version. Currently, only essential modules are implemented.

Module Support Module Support
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

You can fetch modules by calling 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)
}

Several types of selection are available. .all will fetch every method, even not supported yet so that you can get data from raw JSON. You can select .supported, then only supported data will be fetched. Also, you can specify specific module (ex: .price) or list of modules (ex: [.price, .summaryDetail])

Author

Aleksandr Dremov, [email protected]

License

SwiftYFinance is available under the MIT license. See the LICENSE file for more info.

swiftyfinance's People

Contributors

alexdremov avatar code-factor avatar

Stargazers

rockeet avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.