코인시세를 카카오톡으로 알아보기

설명

최근 비트코인과 더불어 다양한 코인들이 관심을 끌고있다..그 중 대표적인 거래소인 업비트의 실시간 코인 별 시세를 챗봇으로 확인할 수 있도록 만드는 포스트이다. 현재 확인할 수 있는 코인은 에이다, 리플, 퀀텀, 스텔라루멘, 스테이터스네트워크 이며 얼마든지 추가 가능하다.

API

업비트는 다른 거래소와는 다르게 공식적으로 API를 제공하지 않는다. 하지만 업비트에 접속 후 네트워크 창을 토대로 request주소를 알아낼 수 있었다.
https://crix-api-endpoint.upbit.com/v1/crix/candles/minutes/1?code=CRIX.UPBIT.KRW-XXX
위의 주소의 맨 마지막 XXX에 코인의 이름을 입력해 주면 현재 코인의 시세, 1분동안 최저가, 최고가를 알 수 있다. 위의 주소에서 제공하는 데이터는 1분단위로 갱신된다.

실시간으로 코인데이터를 읽어오는 모듈

챗봇은 기존 개발된 Node.js 기반의 프로그램을 이용하였다. 소스코드는 아래의 주소에서 확인 가능하다.
https://github.com/KKimSangHeon/Dg_Chat_Bot

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
exports.processCoin=function(res,commonFunction,request,async){


var headers = {
'User-Agent': 'Super Agent/0.0.1',
'Content-Type': 'application/x-www-form-urlencoded'
}
var options = {
url: 'https://crix-api-endpoint.upbit.com/v1/crix/candles/minutes/1?code=CRIX.UPBIT.KRW-ADA',
method: 'GET',
headers: headers,
}

const tasks = [
function(callback){
var temp='';
request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
// Print out the response body

var jsonContent= JSON.parse(body);

var resString='에이다: '+jsonContent[0].openingPrice+'\n';
temp=resString;

callback(null,temp);
}
})

},

function(temp, callback) {
options.url = 'https://crix-api-endpoint.upbit.com/v1/crix/candles/minutes/1?code=CRIX.UPBIT.KRW-XRP'

request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
var jsonContent= JSON.parse(body);

var resString ='리플: '+jsonContent[0].openingPrice+'\n';
temp+=resString;
callback(null,temp);
}
})
},
function(temp, callback) {
options.url = 'https://crix-api-endpoint.upbit.com/v1/crix/candles/minutes/1?code=CRIX.UPBIT.KRW-QTUM'

request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
var jsonContent= JSON.parse(body);

var resString ='퀀텀: '+jsonContent[0].openingPrice+'\n';
temp+=resString;
callback(null,temp);
}
})
},
function(temp, callback) {
options.url = 'https://crix-api-endpoint.upbit.com/v1/crix/candles/minutes/1?code=CRIX.UPBIT.KRW-SNT'

request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
// Print out the response body

var jsonContent= JSON.parse(body);

var resString ='스테이터스네트워크: '+jsonContent[0].openingPrice+'\n';
temp+=resString;

callback(null,temp);
}
})
},
function(temp, callback) {
options.url = 'https://crix-api-endpoint.upbit.com/v1/crix/candles/minutes/1?code=CRIX.UPBIT.KRW-XLM'

request(options, function (error, response, body) {
if (!error && response.statusCode == 200) {
// Print out the response body

var jsonContent= JSON.parse(body);

var resString ='스텔라루멘: '+jsonContent[0].openingPrice+'\n';
temp+=resString;

commonFunction.sendMessage(res,temp);
callback(null);
}
})
}
];

async.waterfall(tasks, function(err){
if (!err) {

} else {
console.error(err);
}
});
}

Node.js 는 동기방식이라 async 모듈을 이용하여 동기방식으로 각 코인들의 데이터를 읽어온 후 문자열 변수에 저장하였다.
tasks 배열안에 함수들이 순차적으로 실행되며 callback 함수를 통해 축적된 문자열을 다음 함수로 넘겨준다.
최종적으로 스텔라루멘에 대한 코인정보가 temp 변수에 저장되면 사용자에게 메세지를 전달하게 된다.

이렇게 위와같이 카카오톡으로 업비트에 들어가지 않고 코인들의 시세를 확인할 수 있다.

Share