가상화폐 거래소에서는 API를 서비스하고 있습니다. API는 크게 공중에 오픈되어 있는 Public(공개) API와 개인 로그인 후 사용가능한 Private(개인) API의 두 종류로 나눌 수 있습니다.
Public 은 말 그대로 로그인과 인증과정이 필요없이 그냥 http 명령어로 가져올 수 있는 데이터이고 Private은 본인의 인증정보(ID, Password)를 사용해서 접속 후 가져올 수 있습니다. 가져온다는 말이 쉬운데 http request(요청)을 사용한다는 말입니다.
이번 포스팅에서는 빗썸 Public API의 사용법을 알아보겠습니다. 빗썸에서 Public으로 가져올 수 있는 정보는 다음과 같습니다.
이걸 사용하면 빗썸 거래소에 접속하지 않아도 내가 원하는 정보만 가져올 수 있지요. 프로그램 매매를 하기 위해서는 Private API를 사용해야 하는데 먼저 Public에 접속하는 방법에 적응하면 Private 도 어렵지 않게 사용할 수 있을겁니다.
http requests 니까 딱히 언어의 종류는 상관이 없는데요. 인터넷을 검색해보면 많은 경우 파이썬의 자료가 많이 나옵니다. 그 이유는 비전공자라도 쉽고 편하게 사용할 수 있는 언어기 때문입니다. 거래소 API를 써서 웹사이트를 만들려고 한다면 파이썬 보다는 자바스크립트가 유리하겠지요.
아래 링크의 빗썸의 API DOCS(문서) 를 참고해서 만들어 볼겁니다.
빗썸의 API를 사용하기 편하도록 만들어 놓은 모듈들도 있는데 원초적으로 리눅스 셸의 CURL 명령어부터 파이썬, 자바스크립트 등 레퍼런스를 제공하고 있으니까 JSON 으로 받아서 여러가지 방법으로 가공하면 될겁니다. 아래 이미지를 보면 C, C#, C++ 등 어떤 언어로도 같은 응답을 받을 수 있습니다.
여기서는 파이썬으로 진행하겠습니다. requests 모듈은 파이썬 기본패키지에 설치되지 않으니 pip install requests로 설치를 한 후 시작합니다. 미니콘다 등을 이용해 파이썬 가상환경을 만드는 것을 추천합니다.
비트코인의 최근체결내역을 한번 가져와보겠습니다. 일단 접속이 잘되는지부터 봐야겠네요. 빗썸 레퍼런스에서 파이썬을 선택하여 코드를 복사합니다. 이것들은 빗썸 API가 정해놓은 약속이므로 이해가 쉽습니다. 코드를 읽어보면 url(어떤 Public API를 쓸것인가?), headers (json형식의 요청이다) 그리고 response 객체에 데이터를 받습니다.
import requests
url = "https://api.bithumb.com/public/transaction_history/BTC_KRW"
headers = {
"Accept": "application/json",
"Content-Type": "application/json"
}
response = requests.get(url, headers=headers)
print('응답코드: ',response.status_code)
print('인코딩: ',response.encoding)
결과는 다음과 같습니다. http 응답에서 Response는 내가 API에 보낸 요청에 대한 답신입니다. 200은 요청이 성공했음을 나타내는 성공 응답 상태 코드입니다.
비트코인 최근 체결내역 20개를 출력합니다. 체결내역은 계속 업데이트 되는데 1초에 1-2건이 체결되고 있음을 알 수 있습니다.
print('텍스트 형식: \n', response.text)
콘솔에 출력하면 다음과 같이 어지럽게 나옵니다.
json 모듈을 사용해서 좀 더 가독성있게 바꿔볼까요?
import requests
import json
url = "https://api.bithumb.com/public/transaction_history/BTC_KRW"
headers = {
"Accept": "application/json",
"Content-Type": "application/json"
}
response = requests.get(url, headers=headers)
print('응답코드: ',response.status_code)
print('인코딩: ',response.encoding)
# print('텍스트 형식: \n', response.text)
print(json.dumps(response.json(), indent="\t"))
이제 좀 잘 보이는 것 같네요. 누가 비트코인KRW 페어를 0.0001개 샀네요. (비트코인 2900원 어치;;;)
json 파일에서 가장 최근에 거래된 가격 1개만 가져오고 싶다면 다음과 같이합니다.
import requests
import json
url = "https://api.bithumb.com/public/transaction_history/BTC_KRW"
headers = {
"Accept": "application/json",
"Content-Type": "application/json"
}
response = requests.get(url, headers=headers)
print('응답코드: ',response.status_code)
print('인코딩: ',response.encoding)
BTC_price = response.json()
print('JSON 타입:', type(BTC_price))
print('상태코드:', BTC_price['status'])
quantity = len(BTC_price['data'])
print('리스트 수량:', quantity)
print('*직전 거래가:',BTC_price['data'][quantity-1]['price'])
json 파일을 가져오면 dictionary 자료형안에 list가 있기 때문에 그 안에서 분리해내는 겁니다. 조금 번거로울 수 있겠네요. 요런 방식으로 빗썸의 Public API를 사용해서 현재 체결가를 알 수 있습니다.
종목은 바꾸고 싶으면 URL에서 티커를 바꾸면 됩니다. 예를 들어 비트코인이 BTC_KRW이면 이더는 ETH_KRW 이런 식으로요.
현재가 정보 조회(ALL) 같은 다른 Public API도 요청 방법은 같습니다. 단지 Response에 뭐가 들어있나 차이입니다. 여기서 받은 데이터를 웹에 뿌려주면 코인 정보 사이트가 되는거고, 본인이 사용하기 위해 데스크탑 GUI에 구현하면 트레이딩 프로그램이 되는 겁니다. 모바일에 구현하면 코인 정보 모바일 앱이 되는 거지요.
다음 포스팅에는 업비트 open api 나 Private API에 대해서 알아보겠습니다.