업비트에서도 2018-06-21일자로 API 정식 서비스를 하네요. 지금까지 업비트에 가격 동향을 내부 API 주소로 접근하셨을 텐데 정식으로 공개 되어서 쉽게 가상화폐정보를 확인할 수 있게 되었네요. OPEN API KEY를 발급 받아서 직접 거래에 사용도 할 수 있네요. 오늘 post은 간단히 자바스크립트를 이용하여 가상화폐 정보를 조회하는 방법을 살펴보도록 하겠습니다.
const request = new XMLHttpRequest();
const url = '업비트 주소';
request.open("GET", url, false);
request.send();
var obj = JSON.parse(request.responseText);
console.log(obj);
위 코딩으로 API 주소를 통해서 해당 Coin 정보를 가져오게 된다. request.responseText로 가져온 정보를 JSON.parse()함수로 JSON 형태로 변환 시키고 obj객체로 JSON으로 변환된 정보를 쉽게 접근 할 수 있게 됩니다.
그러면, 이 로직으로 통해 업비트 API 정보를 조회 해 볼까요.
curl --request GET \
--url https://api.upbit.com/v1/market/all
마켓의 코인 리스트 조회 할 수 있게 되어 있네요.
그러면, 코인 리스트 정보를 조회해 볼까요.
[자바스크립트 소스]
const request = new XMLHttpRequest();
const url = 'https://api.upbit.com/v1/market/all';
request.open("GET", url, false);
request.send();
var obj = JSON.parse(request.responseText);
console.log(obj);
[결과]
curl --request GET \
--url 'https://api.upbit.com/v1/ticker?markets=KRW-BTC'
마켓의 특정 코인에 대한 가격를 조회할 수 있습니다.
markets=KRW-BTC
KRW마켓에 대한 BTC 가격을 조회를 하게 됩니다. 참고로, KRW, BTC, ETH, USDT 마켓이 존재하고 해당 마켓에 대한 각각의 코인 가격을 조회 할 수 있습니다.
그러면, KRW마켓의 대한 BTC 코인의 가격을 살펴볼까요.
[자바스크립트 소스]
const request = new XMLHttpRequest();
const url = 'https://api.upbit.com/v1/ticker?markets=KRW-BTC';;
request.open("GET", url, false);
request.send();
var obj = JSON.parse(request.responseText);
console.log(obj);
[결과]
curl --request GET \
--url 'https://api.upbit.com/v1/candles/minutes/5?market=KRW-BTC&count=3'
분봉에 대한 갯수를 출력 할 수 있습니다. 분봉의 기준 시각이 매 시의 0, 5, 10, 15.. 55분으로 이루어 진다고 하네요. 1, 3, 5, 10, 30, 60, 240분 간격의 시세를 종합한 정보 조회 할 수 있다고 나와 있습니다.
minutes/5?market=KRW-BTC&count=3
앞에 5분 분봉을 말하고 뒤에 count은 해당 분봉의 최근 갯수를 나타냅니다.
그러면, 최신 KRW 마켓에 대한 STEEM 가격을 5분봉을 기준으로 3개의 데이터를 가져와 볼까요.
[자바스크립트 분분봉 소스]
const request = new XMLHttpRequest();
const url = 'https://api.upbit.com/v1/candles/minutes/5?market=KRW-BTC&count=3';
request.open("GET", url, false);
request.send();
var obj = JSON.parse(request.responseText);
console.log(obj);
[결과]
url에 값만 형식에 맞추면 됩니다.
url = 'https://api.upbit.com/v1/candles/days?market=KRW-BTC'
url = 'https://api.upbit.com/v1/candles/weeks?market=KRW-BTC'
url = 'https://api.upbit.com/v1/candles/months?market=KRW-BTC'
days, weeks, minths 만 붙이고 뒤에 market="KRW마켓-타켓BTC코인"을 지정함으로서 원하는 코인의 정보를 얻을 수 있게 되어 있네요.
예를 들면, 주 분봉으로 KRW 마켓의 STEEM의 정보를 조회하고 싶다면
**weeks?market=KRW-STEEM"
이렇게 수정하면 되겠죠. 그리고 url에 대한 정보를 토대로 XMLHttpRequest로 읽어오면 자바스크립트로 간단히 조회가 가능해지네요.
function MarketCoinRead(url){
const request = new XMLHttpRequest();
request.open("GET", url, false);
request.send();
var obj = JSON.parse(request.responseText);
return obj;
}
이렇게 읽을 함수를 사용자정의함수로 만들어 놓습니다. 이렇게 해놓으면 url의 정보만 있으면 그 정보에 대한 조회 정보를 얻을 수 있게 됩니다. 그리고 얻은 정보는 obj 객체에 저장되고 그 정보는 MarketCoinRead()함수를 호출한 곳에 반환하게 됩니다.
MarketCoinList();
function MarketCoinList(){
const url = 'https://api.upbit.com/v1/market/all';
var obj = MarketCoinRead(url);
console.log(obj);
}
위처럼 코딩하면 obj에는 리스트 정보를 가져오고 나중에 이 정보를 HTML로 디자인해서 출력하면 되겠죠.
MarketCoinTicker('KRW','BTC');
function MarketCoinTicker(market,coin){
const url = 'https://api.upbit.com/v1/ticker?markets='+market+'-'+coin;;
var obj = MarketCoinRead(url);
console.log(obj);
}
KRW마켓의 BTC 코인 조회가 가능하겠죠.
MarketCoincandlesMinutes('KRW','STEEM',5,3);
function MarketCoincandlesMinutes(market,coin,timeVal,count){
const url = 'https://api.upbit.com/v1/candles/minutes/'+timeVal+'?market='+market+'-'+coin+'&count='+count;
var obj = MarketCoinRead(url);
console.log(obj);
}
이렇게 KRW 마켓에 STEEM 코인을 5분분봉으로 최근 3개의 데이터를 가져오게 되겠죠.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Upbit.js</title>
</head>
<body>
<script>
//마켓 정보 List Ticker 조회
MarketCoinList();
//마켓 Ticker 조회
MarketCoin('KRW','BTC');
//캔들 조회
MarketCoincandles('KRW','STEEM',5,3);
function MarketCoinList(){
const request = new XMLHttpRequest();
const url = 'https://api.upbit.com/v1/market/all';
request.open("GET", url, false);
request.send();
var obj = JSON.parse(request.responseText);
console.log(obj);
}
function MarketCoin(market,coin){
const request = new XMLHttpRequest();
const url = 'https://api.upbit.com/v1/ticker?markets='+market+'-'+coin;;
request.open("GET", url, false);
request.send();
var obj = JSON.parse(request.responseText);
console.log(obj);
}
function MarketCoincandles(market,coin,timeVal,count){
const request = new XMLHttpRequest();
const url = 'https://api.upbit.com/v1/candles/minutes/'+timeVal+'?market='+market+'-'+coin+'&count='+count;
request.open("GET", url, false);
request.send();
var obj = JSON.parse(request.responseText);
console.log(obj);
}
function MarketCoinRead(url){
const request = new XMLHttpRequest();
const url = 'https://api.upbit.com/v1/candles/minutes/'+timeVal+'?market='+market+'-'+coin+'&count='+count;
request.open("GET", url, false);
request.send();
var obj = JSON.parse(request.responseText);
//console.log(obj);
return obj;
}
</script>
</body>
</html>
자바스크립트로 간단히 실험을 해보았습니다. 참고로, WebSocket 방식으로 접근 제어가 가능하지만 설치하는 부분이 있기 때문에 자바스크립트가 간단한 정보 조회을 실험했네요. 이 실험은 간단히 원리를 살펴보는 실험이기 때문에 직접 이용에 있어서는 업비트 규정에 맞게 사용하시기 바랍니다. 어제 API 공지글 보고 가셔 몇가지 실험한 뒤 간단히 뭔가를 만들었는데 개인 소장용이라서 공개는 하지 않겠습니다. 위의 코딩에서 간단히 정보 조회가 되면 그 정보를 통해서 가공하여 HTML로 멋지게 디자인하시면 재밌는 것을 많이 만드실 수 있을 꺼에요.
참고로, 자산, 주문, 출금은 EXCHANGE API으로 업비트 API키를 발급 받아서 봇을 만드시는 분들이 많을 것 같군요.
그런데, 기존에 업비트 거래 폭주하면 제대로 매수/매도가 이루어지지 않는데 API로 거래하는 것은 정상적으로 이루어질 지는 의문이네요. 업비트 거래하신 분들은 아마 아시겠지만 일시적 거래 폭주하면 자신이 매수/매도 등록한 것이 일정시간이 지나도록 수정이 잘 안되고 뒷북 작렬을 경험하신분들이 아마 많으실 꺼에요.