Skip to content

rinov/SwiftFlyer

Repository files navigation

SwiftFlyer

An API wrapper for bitFlyer that supports all providing API.

Swift Platform Cocoapods Carthage License

API Document

https://lightning.bitflyer.jp/docs

Usage

Public API

Fetch a market list.

import SwiftFlyer

let request = GetMarketListRequest()

ApiSession.shared.send(request) { result in
    switch result {
    case .success(let markets):
      print(markets)
    case .failed(let e):
      // Error handling
      break
    }
}

Response:

[
  SwiftFlyer.Market(productCode: SwiftFlyer.ProductCode.btc_jpy, alias: nil),
  SwiftFlyer.Market(productCode: SwiftFlyer.ProductCode.fx_btc_jpy, alias: nil),
  SwiftFlyer.Market(productCode: SwiftFlyer.ProductCode.eth_btc, alias: nil),
  SwiftFlyer.Market(productCode: SwiftFlyer.ProductCode.bch_btc, alias: nil)
]

Private API

Generate API keys: https://lightning.bitflyer.jp/developer

Check your balance.

import SwiftFlyer
...

// For access private API.
BitFlyer.apiKey = // Your API Key
BitFlyer.apiSecretKey = // Your API Secret Key

let request = GetBalanceRequest()

ApiSession.shared.send(request) { result in
    switch result {
    case .success(let markets):
      print(markets)
    case .failed(let e):
      // Error handling
      break
    }
}

Response:

[
  SwiftFlyer.Balance(amount: 0.0, available: 0.0, currencyCode: SwiftFlyer.CurrencyCode.jpy),
  SwiftFlyer.Balance(amount: 0.0, available: 0.0, currencyCode: SwiftFlyer.CurrencyCode.btc),
  SwiftFlyer.Balance(amount: 0.0, available: 0.0, currencyCode: SwiftFlyer.CurrencyCode.bch),
  SwiftFlyer.Balance(amount: 0.0, available: 0., currencyCode: SwiftFlyer.CurrencyCode.eth),
  SwiftFlyer.Balance(amount: 0.0, available: 0.0, currencyCode: SwiftFlyer.CurrencyCode.etc),
  SwiftFlyer.Balance(amount: 0.0, available: 0.0, currencyCode: SwiftFlyer.CurrencyCode.ltc),
  SwiftFlyer.Balance(amount: 0.0, available: 0.0, currencyCode: SwiftFlyer.CurrencyCode.mona)
]

RealTime API (JSON RPC over WebSocket)

Use RealTImeAPI in your project.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    // If you want retrive realtime information, set channels and call `subscribe` of RealTimeAPI.
    typealias Channel = RealTimeAPI.SubscribeChannel

    // Set channels for subscribing realtime api from bitFlyer RealTimeAPI by using JSON RPC over WebSocket.
    let subscribeChannels: [String] = [
    Channel.SnapShot.boardSnap_fx_btc_jpy.targetChannel,
    Channel.Board.board_fx_btc_jpy.targetChannel,
    Channel.Ticker.ticker_fx_btc_jpy.targetChannel,
    Channel.Execution.execution_fx_btc_jpy.targetChannel
    ]

    // Start observing realtime API.
    RealTimeAPI.shared.subscribe(with: subscribeChannels)

    ...
}

After subscribe realtime API, you should implement RealTimeAPIDelegate into your class.

class ViewController: UIViewController {    

    private let realtime: RealTimeAPI = .shared

    override func viewDidLoad() {
        super.viewDidLoad()

        // Set realtime API delegate for get your setted object.
        realtime.delegate = self
    }
}

extension UIViewController: RealTimeAPIDelegate {
    public func didReceiveSnapShot(_ snapshot: Board) {
        print(snapshot)
    }
    
    public func didReceiveBoardDiff(_ board: Board) {
        print(board)
    }
    
    public func didReceiveTicker(_ ticker: Ticker) {
        print(ticker)
    }
    
    public func didReceiveExecution(_ executions: [Execution]) {
        print(executions)
    }
}

Requirements

XCode 9+

Swift 4+

Installation

$ pod repo update

And add this to your Podfile:

pod 'SwiftFlyer'

and

$ pod install

Carthage

Add this to your Cartfile:

github "rinov/SwiftFlyer"

and

$ carthage update

TODO

  • Add timeout to each requests and common settings.
  • Provide HMAC 256 algorithm instead of CryptoSwift.
  • Detect exceeding of API call.

Disclaimer

USE THE SOFTWARE AT YOUR OWN RISK.

THE AUTHORS NO RESPONSIBILITY FOR YOUR TRADING RESULTS.

Author

Ryo Ishikawa, rinov@rinov.jp

License

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