SwiftFlyer
An API wrapper for bitFlyer that supports all providing API.
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, [email protected]
License
SwiftFlyer is available under the MIT license. See the LICENSE file for more info.