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.