업비트 API 서비스 자바스크립트로 접근

Words
542
Reading
3 min
Listen
Play
8y

업비트 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);

[결과]

alt

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);  

[결과]

alt

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);  

[결과]

alt

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로 거래하는 것은 정상적으로 이루어질 지는 의문이네요. 업비트 거래하신 분들은 아마 아시겠지만 일시적 거래 폭주하면 자신이 매수/매도 등록한 것이 일정시간이 지나도록 수정이 잘 안되고 뒷북 작렬을 경험하신분들이 아마 많으실 꺼에요.

업비트 API 서비스 자바스크립트로 접근 | Ecency