업비트 API 서비스 자바스크립트로 접근
업비트 API 서비스 자바스크립트로 접근
- 업비트 API : https://docs.upbit.com/
- 레퍼런스 : https://docs.upbit.com/v1.0/reference
- 참고 : 거래소 API 접근할 때 알아두면 좋은 함수
업비트에서도 2018-06-21일자로 API 정식 서비스를 하네요. 지금까지 업비트에 가격 동향을 내부 API 주소로 접근하셨을 텐데 정식으로 공개 되어서 쉽게 가상화폐정보를 확인할 수 있게 되었네요. OPEN API KEY를 발급 받아서 직접 거래에 사용도 할 수 있네요. 오늘 post은 간단히 자바스크립트를 이용하여 가상화폐 정보를 조회하는 방법을 살펴보도록 하겠습니다.
1. 자바스크립트 접근
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 정보를 조회 해 볼까요.
2. 마켓 정보 List 조회
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);
[결과]

3. 마켓 Ticker 조회
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);
[결과]

4. 캔들 조회
1) 분 분봉
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);
[결과]

2) 일,주,월 분봉 추가 내용
url에 값만 형식에 맞추면 됩니다.
- 일 : "days?market"
url = 'https://api.upbit.com/v1/candles/days?market=KRW-BTC'
- 주: "weeks?market"
url = 'https://api.upbit.com/v1/candles/weeks?market=KRW-BTC'
- 월: "months?market"
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로 읽어오면 자바스크립트로 간단히 조회가 가능해지네요.
5. 중복된 부분을 정리하여 함수 만들기
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()함수를 호출한 곳에 반환하게 됩니다.
1) 리스트 정보
MarketCoinList();
function MarketCoinList(){
const url = 'https://api.upbit.com/v1/market/all';
var obj = MarketCoinRead(url);
console.log(obj);
}
위처럼 코딩하면 obj에는 리스트 정보를 가져오고 나중에 이 정보를 HTML로 디자인해서 출력하면 되겠죠.
2) 특정 마켓 코인 조회
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 코인 조회가 가능하겠죠.
3) 캔들 조회(분봉 기준)-일/주/월 함수는 비슷한 방식으로 직접 만드세요
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개의 데이터를 가져오게 되겠죠.
6. 테스트 소스
<!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로 거래하는 것은 정상적으로 이루어질 지는 의문이네요. 업비트 거래하신 분들은 아마 아시겠지만 일시적 거래 폭주하면 자신이 매수/매도 등록한 것이 일정시간이 지나도록 수정이 잘 안되고 뒷북 작렬을 경험하신분들이 아마 많으실 꺼에요.
(jjangjjangman 태그 사용시 댓글을 남깁니다.)
호출에 감사드립니다! 즐거운 스티밋하세요!
짱짱맨 방문에 감사합니다.
오오 업비트도 api를 제공해주다니ㅎㅎ 신기하군요 ~ 좋은 포스팅 잘 봤습니다 !
이제 봇 개발자들이 많이 프로그램을 만들 듯 싶네요
JAVA는 어떻게 compiler 하는 건가요? compiler가 따로 있나요?
어떤 컴파일이 아니라 C언어는 Compiler이고 java 는 interpreter 방식으로 나뉘어요.
아 JAVA를 사용 안해 봐서 BASIC 같은 interpreter 방식이군요.
신기합니다. 이걸로 봇을 만들 수가 있다니 ㅎㅎㅎ
업비트에서 API 키 발급 받으시면 접근 할 권한이 생기니깐 거기에 코딩으로 로직만 잘 짜면 봇이 만들어 질 듯 싶네요.
한번 해볼까 생각중이네요
아 API키를 받아서 하는군요. 으음. 신기합니다. 다른 거래소도 다 그럴까요? 궁금. ㅎㅎ. 오. 봇을 그거 재밌겠습니다. ㅎㅎ
API 제공되는 거래소만 가능 할 꺼에요.
업비트는 말씀하신 것처럼 되고, 빗썸도 되는 것 같던데요. 고팍스도 될랑가. 한 3~4개 이상은 되겠네요. ㅎㅎㅎㅎ
헐... 무슨말인지...
지난 post와 연계된 내용이라 좀 어렵게 느껴지셨을 거에요 ^^