파이썬을 처음 시작했을 때는, RestAPI 통신으로 시세 데이터를 받아오는 코드를 작성했었다. 이번에는 빗썸에 WebSocket API가 있는 것을 보고 그걸 이용해서 시세를 내려받는 기능을 구현해보고자한다.
추후에 시세를 내려받고 여러 API 서버들을 구현하여, 클라이언트에 시세 데이터를 뿌려주는 시세서버를 구현할 계획이다.
사용 프레임워크 : Gorilla WebSocket
gorilla WebSocket 깃헙페이지의
example/echo/client.go 에서 일부분만 수정했다.
var addr = flag.String("addr", "pubwss.bithumb.com", "http service address")
func main() {
...
u := url.URL{Scheme: "wss", Host: *addr, Path: "/pub/ws"}
...
}
data := "{\"type\":\"ticker\", \"symbols\":[\"ETH_KRW\"], \"tickTypes\":[\"1H\"]}"
err := c.WriteMessage(websocket.TextMessage, []byte(data))
!! 주의 !!
빗썸 API Guide에는 tickTypes가 Optional이라고 되어있었는데, 여기서 Optional의 의미는 type 이 ticker일때만 필요하기때문에 optional 하다는 의미임. 모든 경우에 optional인줄 알고 시간 많이 잡아먹었네...
그 결과, 출력 값은 아래와 같았다.
recv: {
"type":"ticker",
"content":{
"tickType":"1H", "date":"20211204",
"time":"174044",
"openPrice":"4955000",
"closePrice":"5087000",
"lowPrice":"4925000",
"highPrice":"5100000",
"value":"10267216369.457695127747132",
"volume":"2050.31399443062484187",
"sellVolume":"572.9525891557074934",
"buyVolume":"1477.36140527491734847",
"prevClosePrice":"5642000",
"chgRate":"2.66",
"chgAmt":"132000",
"volumePower":"257.85",
"symbol":"ETH_KRW"
}
}