Sample code for 30+ languages & platforms
Go

Read Bitfinex WebSocket Ticker Channel

See more WebSocket Examples

Subscribes to the public Bitfinex websocket ticker channel and receives ticker updates.

Chilkat Go Downloads

Go
    success := false

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    ws := chilkat.NewWebSocket()

    // For brevity, this example does not check for errors when etablishing the WebSocket connection.
    // See Establish WebSocket Connection for more complete sample code for making the connection.

    rest := chilkat.NewRest()

    // Connect to api.bitfinex.com
    success = rest.Connect("api.bitfinex.com",443,true,false)
    ws.UseConnection(rest)
    ws.AddClientHeaders()

    responseBody := rest.FullRequestNoBody("GET","/ws")
    success = ws.ValidateServerHandshake()
    if success != true {
        fmt.Println(ws.LastErrorText())
        fmt.Println(*responseBody)
        fmt.Println(rest.ResponseHeader())
        ws.DisposeWebSocket()
        rest.DisposeRest()
        return
    }

    // After connecting, the bitfinex websocket server will send
    // an info message that contains the actual version of the websocket stream.
    // Receive that message..
    success = ws.ReadFrame()
    if success != true {
        fmt.Println("Failed to receive a frame")
        fmt.Println("ReadFrame fail reason = ", ws.ReadFrameFailReason())
        fmt.Println(ws.LastErrorText())
        ws.DisposeWebSocket()
        rest.DisposeRest()
        return
    }

    // We should get this:
    // {"event":"info","version":1.1,"platform":{"status":1}}
    fmt.Println(*ws.GetFrameData())

    // Subscribe to the public ticker feed.
    // See https://docs.bitfinex.com/docs for more information.
    json := chilkat.NewJsonObject()
    json.AppendString("event","subscribe")
    json.AppendString("channel","ticker")
    json.AppendString("pair","BTCUSD")

    finalFrame := true
    success = ws.SendFrame(*json.Emit(),finalFrame)

    // Read the response.
    success = ws.ReadFrame()
    if success != true {
        fmt.Println("Failed to receive a frame")
        fmt.Println("ReadFrame fail reason = ", ws.ReadFrameFailReason())
        fmt.Println(ws.LastErrorText())
        ws.DisposeWebSocket()
        rest.DisposeRest()
        json.DisposeJsonObject()
        return
    }

    // Examine the response
    // We should get this:
    // {"event":"subscribed","channel":"ticker","chanId":2751,"pair":"BTCUSD"}
    fmt.Println(*ws.GetFrameData())

    // Begin reading the ticker feed.
    // We'll just read the 1st 5 updates and then exit..
    receivedFinalFrame := false
    numUpdatesReceived := 0
    for numUpdatesReceived < 5 {

        success = ws.ReadFrame()
        if success != true {
            fmt.Println("Failed to receive a frame")
            fmt.Println("ReadFrame fail reason = ", ws.ReadFrameFailReason())
            fmt.Println(ws.LastErrorText())
            ws.DisposeWebSocket()
            rest.DisposeRest()
            json.DisposeJsonObject()
            return
        }

        // The responses we desire are in Text frames, where the opcode = 1.
        if ws.FrameOpcodeInt() == 1 {
            receivedText := ws.GetFrameData()
            fmt.Println(*receivedText)
            // Should receive a line of text such as this:
            // [2751,7349,36.34269559,7349.1,41.01777063,-116.2,-0.0156,7349.1,22188.26055319,7560,7270.5]
            numUpdatesReceived = numUpdatesReceived + 1
        }

    }

    // Close the websocket connection.
    success = ws.SendClose(true,1000,"Closing this websocket.")
    if success != true {
        fmt.Println(ws.LastErrorText())
        ws.DisposeWebSocket()
        rest.DisposeRest()
        json.DisposeJsonObject()
        return
    }

    // Read the Close response.
    success = ws.ReadFrame()
    if success != true {
        fmt.Println("ReadFrame fail reason = ", ws.ReadFrameFailReason())
        fmt.Println(ws.LastErrorText())
        ws.DisposeWebSocket()
        rest.DisposeRest()
        json.DisposeJsonObject()
        return
    }

    fmt.Println("Success.")

    ws.DisposeWebSocket()
    rest.DisposeRest()
    json.DisposeJsonObject()