업비트 웹소켓 데이터 활용중인데요. 클래스 내부에서 소켓 함수 정의가 안되네요.
클래스 내부에 정의하면
아래와 같이 에러가 뜨네요.
ws = websocket.WebSocketApp("wss://api.upbit.com/websocket/v1", on_message=on_message, on_error=on_error, on_close=on_close)
NameError: name 'on_message' is not defined
외부에 정의해야 동작하는데 이유 아시는분.?
사실 클래스 내부에 정의를 해야 클래스 변수를 메인함수에서 가져오는게 간편하게 되서. 내부에 정의를 하려고 했는데.
안되네요? 이유아시는분 좀 알려주시면 감사하겠습니다.
기존코드는 아래와 같습니다.
class UpbitAPI: access_key = '' secret = '' def on_message(ws, message): message_json = json.loads(message.decode('utf-8')) # json 형태로 변경하는 방법인건 같음 print(message_json) def on_error(ws, error): print(error) def on_close(ws): print("### closed ###") def on_open(ws): sendData = '[{"ticket":"INSERTUUID"},{"format":"SIMPLE"},{"type":"orderbook","codes":["KRW-BTC"],"isOnlyRealtime":"TRUE"},{"format":"SIMPLE"}]' ws.send(sendData) def get_orderbook_websocket(self, currency_type=None, rgParams=None): websocket.enableTrace(True) ws = websocket.WebSocketApp("wss://api.upbit.com/websocket/v1", on_message=on_message, on_error=on_error, on_close=on_close) ws.on_open = on_open ws.run_forever()
클래스 내부 메소드 선언은 def on_message(self, ws, message): 첫번째 인수로 self가 무조건 들어갑니다.
이 부분은 기초를 좀더 탄탄하게 다져둘 필요가 있습니다.