์ฌ๋ฏธ๋ก ํธ๊ธฐ์ฌ์์ ์ถ๋ฐํ๋ค์. ๊ตฌ๊ธ ์คํ๋ ๋์ํธ๋ก ์ถ๋ ฅํ๋ ๊ฒ์๋ฌผ๋ค๋ ๋ง๊ณ ๊ณต๋ถ์ฐจ์์ผ๋ก ์ ๊ทผํ๊ฒ ๋์๋ค์. "์ด๋ค์์ผ๋ก ๊ฐ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ผ๊น?"์์ ์ถ๋ฐํด์ ๊ฐ์ ธ์ค๋ ํจ์๋ค์ ์ดํด๋ณด๊ฒ ๋์์ต๋๋ค. ๊ฑฐ๋์ API์ ๊ณต์๊ณผ ๋น๊ณต์์ผ๋ก ๋๋๋๋ฐ ๊ณต์์ ํด๋น ๊ฑฐ๋์์์ API์ฃผ์๋ฅผ ๊ณต๊ฐํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ ๊ทผํ๊ธฐ๋ ํธํฉ๋๋ค. ํ์ง๋ง ๋น๊ณต์์ ๊ฒฝ์ฐ๋ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋งํฌ ์ฃผ์๋ก ์ด๋์ ๋ ํ๋ก๊ทธ๋จ์ ๊ด์ฌ์๋ ๋ถ๋ค์ ์น๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ฐฝ์์ ๋คํธ์ํฌ ์ ๋ณด๋ฅผ ๋ณด๊ณ ๋ฐ์ดํฐ์ ํ๋ฆ์ ๊ด๋ จ๋ ๋งํฌ ์ฃผ์๋ฅผ ์ฐพ์๋ด์ ๊ฐ์ํํ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ๋ ํฉ๋๋ค.
์ด ํฌ์คํธ๋ฅผ ์ฐ๋ฉด์ ์ด๋ฐ ์ฃผ์ ๋ฅผ ์จ๋ ๋ ๋ ค๋ ํ๊ณ ์ ๋งคํ ์
์ฅ์์ ๊ณต๋ถ์ฐจ์์ผ๋ก ์๋ฆฌ๋ง ์ดํดํ์๋ผ๋ ๋ชฉ์ ์ผ๋ก ๊ทธ๋ฅ ํฌ์คํ
ํ๊ฒ ์ต๋๋ค.
๊ตฌ๊ธ ์คํ๋ ๋์ํธ(์์ )์์๋ ๊ณผ์ฐ ์ด๋ค์์ผ๋ก ์ธ๋ถ ๊ฑฐ๋์์ ๊ฐ์ํํ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ผ๊น?
์ฌ๋ฌ ๋น์ทํ ๊ธ์ด ๋ง์๋ฐ ์ด๋ถ์ด ๋ก์ง์ ์ ์ง์ จ๋๊ตฐ์. ๊ทธ๋ฆฌ๊ณ ๊ณต๋ถ์ ์ฐธ์กฐํ์ต๋๋ค.
๋ฐฐ์์ผ ํ ์ธํจ์๋ง ์์ผ๋ฉด ํด๋น ๊ฑฐ๋์ api url์ ์ ๋ณด๋ง ์์ผ๋ฉด ์ฝ๊ฒ ๊ฐ์ํํ์ ์ ๋ณด๋ฅผ ์ฝ์ ์ ์๊ฒ ๋ฉ๋๋ค.
function getbithumb(coin){
var url = "https://api.bithumb.com/public/ticker/"+coin; //url ์ฃผ์
var result = UrlFetchApp.fetch(url); //url ๊ฐ์ ธ์ด
var dataset = result.getContentText(); //url์ ํ์ด์ง์ ๋ณด๋ฅผ ๋ฌธ์์ด๋ก ์ฝ์
var d = JSON.parse(dataset); //json ํ์์ผ๋ก ๋ณ๊ฒฝ
return d.data.closing_price; //json ์ ๊ทผํ ํด๋น ์ฝ์ธ์ ๋ง์ง๋ง ๊ฑฐ๋๊ฐ๊ฒฉ์ ๋ฐํ(return)
}
์ ๊ณผ์ ์ ์ด๋ ๊ฑฐ๋์๋ ๋์ผํ๊ฒ ์ ์ฉ๋์ง๋ง ๋ง์ง๋ง 5๋จ๊ณ๋ ํด๋น ๊ฑฐ๋์์์ ์ ๊ณต๋๋ jsonํ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
์ ๋น์ธ ๊ณต์ํ์ด์ง ๋ณด๋ฉด์ url์ด ์๋์ ๊ฐ์ต๋๋ค. currency์ ์ด๋ค ์ฝ์ธ์ธ์ง๋ฅผ ์ ๋ ๋ถ๋ถ์ ๋๋ค.
https://api.bithumb.com/public/ticker/{currency}
๋ง์ฝ, BTC๋ผ๋ฉด
https://api.bithumb.com/public/ticker/BTC
์ด๋ ๊ฒ ๊ฒฝ๋ก๊ฐ ๋๊ฒ ์ฃ . ๊ทธ๋ฌ๋ฉด ๋๋์ฒด ์ ๊ธฐ์ ๋ญ๊ฐ ๋ค์ด์๋์ง ์ดํด๋ณผ๊น์. ์น๋ธ๋ผ์ฐ์ ์ ์ด url๋ก ๋ฃ๊ณ ๋๋ ค๋ณด์ธ์.
๋จผ์ง๋ ๋ชจ๋ฅธ๋ฐ json ํ์์ผ๋ก ๋์ด๋์ด ์์ต๋๋ค. ํด๋น ๊ฑฐ๋์์ ํ์ด์ง์ ์ ๋ณด๋ฅผ ๊ผญ ํ์ธํ์ธ์.
์ด๊ฒ ์์ผ๋ก ๋์ด๋์ด์ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง์ง๋ง ์ธ๋ก๋ก ๋์ด์ํค๋ฉด ์๋์ ๋ชจ์ต์ ๋๋ค.
{"status":"0000",
"data":
{"opening_price":"8005000",
"closing_price":"7526000",
...
}
}
์ ๊ทผ์ json์ด ํธํ๋ค๊ณ ํ์ฃ . ๊ทธ ์ด์ ๋ ์์ ํํ์์ ์์๋๋ก ํด๋น ํ๋๋ช ์ ํตํด์ ์ ๊ทผํ๊ฒ๋ฉด ๋ฉ๋๋ค. ๋ง์ง๋ง ๊ฑฐ๋ ๊ฐ๊ฒฉ์ ์ด๋์ ๋ด๊ฒจ์ ธ ์๋์. data์์ closing_price๋ผ๋ ์์น์ ์ ์ฅ๋์ด ์์ฃ . ๊ทธ๋ฌ๋ฉด ๊ฐ ๊ฒฝ๋ก๋ง๋ค ์ ๊ทผ์ '.'(์ฝค๋ง)๋ฅผ ์ด์ฉํด์ ์ ๊ทผํ๋๋ฐ ์๋์ ๊ฐ์ ํํ์ผ๋ก ์ ๊ทผํ๊ฒ ๋ฉ๋๋ค.
๋ณ์๋ช
.data.closing_price
์ด๋ ๊ฒ ํด์ ๋ง์ง๋ง ๊ฑฐ๋๊ฐ๊ฒฉ(closing_price)์ ์ป์ ์ ์์ต๋๋ค. ์ด๋ฝ๊ฒ ์ ๊ทผ๋ ๊ฐ๊ฒฉ์ "7526000"๊ฐ ๋ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ํฉ์ ๋ฐ๋ผ ์ข ๋ฌ๋ผ์ง๋๋ฐ ์คํ ๋ชฉ์ ์ผ๋ก ์ธํฐ๋ท์ ๋ ๋๋ ๋นํธ์ ๋ด๋ถ api๋ก ํ๋ฒ ํ ์คํธ ๋ชฉ์ ์ผ๋ก๋ง ๋๋ ธ๋๋ฐ
d.openingPrice;
์ ๊ทผ์ด ์๋๋๊ตฐ์,
d[0].openingPrice;
์ด๋ ๊ฒ ํํ์ ํด์ผ ํ์ฌ ์ฝ์ธ์ ๊ฐ๊ฒฉ์ ์ป์ด์ค๊ฒ ๋๋๊ตฐ์. json์ผ๋ก ์ ๊ทผํ์ค๋ ๋ณ์๋ช .ํ๋๋ช ์ผ๋ก ์ ๊ทผ์ด ๋๋ ๊ฒฝ์ฐ๋ ์๊ณ ๋ฐฐ์ด๋ณ์๋ก ์ ์ฅ๋๋ ๊ฒฝ์ฐ๋ ๋ณ์[0].ํ๋๋ช ์ผ๋ก ์ ๊ทผํด์ผ์ง ์ ์์ ์ผ๋ก ๋์ํ๊ฒ ๋๋ ๊ณณ๋ ์์ต๋๋ค. ์ ์๋์ง ํ์ค๋๋ ๋ณ์[0]์ผ๋ก ํด์ ์ ๊ทผ์ ํด๋ณด์ธ์.
๊ทธ์ธ๋ ๋ถ๋ฌ์ค๋๋ฐ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์๋๊ตฐ์.
๋ค์ฏ์ค ์ค๋ช ์ด ๋๋ฌด ๊ธธ์ด์ก๋ค์. ์ ๋ด์ฉ์ ๊ทธ๋ฅ ํธ๊ธฐ์ฌ์ ์คํ ๋ ธํธ์ ๋๋ค. ๊ณต๊ฐ๋ ์ ์์ api url๋ก ์ ์์ ์ธ ๋ชฉ์ ์ผ๋ก ํ์ฉํ์๊ธฐ ๋ฐ๋๋๋ค.
์ค์๊ฐ ์ ๋ณด๋ฅผ ์ป๊ธฐ๋ ๋ค์ ๋ฌด๋ฆฌ๊ฐ ์์ต๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํตํด์ ๊ฐฑ์ ํ ์ ๋ณด๋ ๋ฐ๋ก ๋ค์ด๋ ํธ๋ก ์ผ์นํ๋๋ฐ ๊ตฌ๊ธ ์คํ๋ ํธ์ํธ์์ ๊ฐฑ์ ๋ ์ ๋ณด๋ ๋๋ ์ด ์ฐจ๊ฐ ํฝ๋๋ค. ์ค์๊ฐ ๋์์ฉ์ด๋ผ๊ธฐ ๋ณด๋ค๋ ์ด๋์ ๋ ์ค์๊ฐ ์ฑ์ ๊ฐ์ง ์ ๋ณด๋ฅผ ์์งํ์ฌ ๋ถ์์ฉ์ผ๋ก ์ฌ์ฉํ๊ธฐ์ ์ข์ ๋ฏ ์ถ๋ค์.
Steem.js API์ ๊ด์ฌ์ ๋ง์ด ๋๊ณ ์ฐ๊ตฌํ๋๋ฐ ์ด๊ฒ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ ๊ทผํด๋ณผ๊น ํ๋ ํธ๊ธฐ์ฌ์ด ๋ฐ๋ํ๋๊ตฐ์. ๊ทธ๋์ ์ฐพ์๋ธ ํจ์๊ฐ ์ด ๋ฐฉ์์ผ๋ก ๋ง์ด๋ค ์ ๊ทผํ๋ค์. ๊ฐ์ฅ ๋งค๋ํธ๊ฐ ์๋ ๋ฐฉ์์ด๊ธฐ๋ ํ๊ณ ์. ์ค์๊ฐ์ฑ์์ ๋ฐ๋ก ์ผ์น๋ ๊ฐ์ํํ์ ๋ณด๋ฅผ ์ป์ ์ ์์ผ๋ฉฐ ๊ทธ ์ ๋ณด๋ฅผ HTML๋ก ๋ฟ๋ ค์ฃผ๊ธฐ๋ ์ข๊ณ ๋๋ง์ ๊ฑฐ๋์ ์ํฉํ์ ๋ง๋ค ์ ์๋ค๋๊ฒ ๊ฝค ์ฌ๋ฏธ๊ฐ ์์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ XMLHttpRequest ์ด๊ฑธ ์ด์ฉํด์ ์ ๊ทผํ๊ฒ ๋ฉ๋๋ค. ๊ฐ์ฒด๋ฅผ ์ ์ธํ๊ณ open(), send() ์ด ํจ์๋ง ํ์๋ฉด ๋ ์ธ๊ฐ๋ก ๊ฐ๋จํ ์ ๊ทผํ ์ ์์ฃ .
๊ทธ๋ฐ๋ฐ ๋ชจ๋ ๊ฑฐ๋์์ ์ ๋ณด๋ฅผ ๋ค ๊ฐ์ ธ์ฌ ์ ๋ ์์ต๋๋ค. ๋ช๋ช ๊ฑฐ๋์์์๋ ๋คํธ์ํฌ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด๊ฑธ ํด๊ฒฐํ๊ธฐ ์ฐํด์๋ ๋ฐ๊ฟ์ ธ์ผํ ๋ถ๋ถ์ด ์์ง๋ง ์ ๋ ์ฐพ๋ค๊ฐ ํฌ๊ธฐํ๊ณ ์. ๋ํผ๋ฐ์ค๋ฅผ ์ฐธ์กฐํ์๊ณ ์ฐ๊ตฌํด๋ณด์ธ์.
<script>
const request = new XMLHttpRequest();
const url = "https://api.bithumb.com/public/ticker/BTC";
request.open("GET", url, false);
request.send();
console.log(request.responseText); // ๊ธ์ด์จ ๋ด์ฉ ๋ฟ๋ฆฌ๊ธฐ
</script>
1๋จ๊ณ : XMLHttpRequest() ์ธ์คํฐํธํ ๊ฐ์ฒด์ ์ธ์ ๋๋ก ์ดํด
2๋จ๊ณ : url๋ฅผ ๋ณ์์ ์ ์ฅ
3๋จ๊ณ : open()ํจ์๋ฅผ ํตํด์ ํด๋น url์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์๋ผ
4๋จ๊ณ : ์ด๊ฑธ send() ์คํ์์ผ๋ผ
5๋จ๊ณ : ๊ทธ ์ ๋ณด๋ request.respneText ์ ์ฅ๋์ด ์์ด console์ฐฝ์ ์ถ๋ ฅ
์ฌ๊ธฐ์ 'request.respneText' ํํ์ ์ ๊ตฌ๊ธ ์คํ๋ ๋์ํธ์์ ๋น์ทํ ๋ช ๋ น์ด ์๊ฐ๋์๋์. 'result.getContentText()'๋ ๊ฐ์ ์๋ฏธ ์ ๋๋ค. ๊ทธ๋ฌ๋ฉด, ์ด ์ฝ์ ๊ฐ์ json์ผ๋ก ํ์ฑํ๊ณ ์ถ์ด์ง์ง ์๋์. ์ ๊ทผํ๊ธฐ ํธํ๊ฒ์.
var obj = JSON.parse(request.responseText);
console.log(obj.data.opening_price);
์ด๋ ๊ฒ ํด์ ๊ตฌ๊ธ ์คํ๋ ๋์ํธ์์์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ฒ ๋์์ต๋๋ค.
์ฐ์ ๊ณต๊ฐ๋ ๋น์ธ url์ ํตํด์ ์ ๊ทผ๊ฒฐ๊ณผ๋ฅผ ์ข ํฉํด์ ์ด๋ป๊ฒ ์ถ๋ ฅ๋๋์ง ๋ณผ๊น์.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Steem.js</title>
</head>
<body>
<script>
const request = new XMLHttpRequest();
const url = "https://api.bithumb.com/public/ticker/BTC";
request.open("GET", url, false);
request.send();
var obj = JSON.parse(request.responseText);
console.log(obj); // ๊ธ์ด์จ ๋ด์ฉ ๋ฟ๋ฆฌ๊ธฐ
console.log(obj.data.opening_price); // ๊ธ์ด์จ ๋ด์ฉ์ค opening_price ๋ฟ๋ฆฌ๊ธฐ
</script>
</body>
</html>
๊ฒฐ๊ณผ
์ด๋ ๊ฒ ํด์ ์ฝ๊ฒ ํด๋น ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๊ณ json ํ์์ผ๋ก ๋ฐ๊ฟ์ ์ ๊ทผ์ '.'(์ฝค๋ง)๋ก ์ฝ๊ฒ ํด๋น ํ๋๊ฐ์ ์ ๊ทผํ ์ ์๊ฒ ๋์๋ค์. ๊ทธ๋ฌ๋ฉด HTML ํ๊ทธ๋ก ๊ฐ์ ๋์ ธ์ฃผ๊ธฐ๋ง ํ๋ฉด ์์ ๋ง์ ๊ฑฐ๋์ ์ํฉํ์ ๋ง๋ค ์ ์๊ฒ ์ฃ . ์์ ์ด ๊ตฌ๋งคํ ๊ฐ๊ฒฉ์ HTML๋ก ์ ๋ ฅ์ ํ๊ฒ ํ๊ณ ํด๋น ๊ฑฐ๋์์ ํ์ฌ ์์ธ๊ฐ๊ฒฉ์ ๊ฐ์ ธ์ค๋ฉด ๊ตฌ๋งคํ ๊ฐ๊ฒฉ๊ณผ ์์ธ์ ๊ฐ๊ฒฉ์ฐจ๋ฅผ ์ํ์ ์ผ๋ก ๊ฐ๋จํ ํํํ๋ฉด ํ์ฌ ์์ต๋ฅ ์ด ๋ชํผ์ผํธ์ธ์ง๋ ์ฝ๊ฒ HTML๋ก ์ถ๋ ฅ์ด ๋๊ฒ ์ฃ .
ํฌ๋กฌ๋ธ๋ผ์ฐ์ ์์ ์คํ์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํฉ๋๋ค. "jQuery์ ajax ๋ฉ์๋ ์ ์ฌ์ ๋๋ฌธ์ Chrome์์ ์๋ํ์ง ์๋๋ค๋ ๊ธ์ ๋ณธ ๊ฒ ๊ฐ๋ค์" ์ต์ค๋ ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ ์์๋ ์ ์์ ์ผ๋ก ๋์ํ๋ค์. ์ ์คํํ ๊ณณ์ ์จ๋ผ์ธ ์์์ ํธ์งํ๋ ์๋ํฐ์ฌ์ ๊ทธ๋ฅ ์๋ฌด๋ฐ ๋ฌธ์ ์์ด ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋์์ง๋ง ๋ง๋ค์ด์ ๊ทธ๋ฅ ์นํ์ด์ง๋ฅผ ํฌ๋กฌ์ฐฝ์์ ์ด์๋๋ฐ ๊ฒฐ๊ณผ๊ฐ ์๋์จ๋ค๋ฉด console์ฐฝ์ ์๋ฌ ๋ฉ์์ง๋ฅผ ํ์ธํ์๊ณ ๊ตฌ๊ธ ๊ฒ์ํ์๋ฉด ๊ทธ์ ๊ด๋ จ๋ ๋ต์ ์ฐพ์ ์ ์์๊บผ์์.
์ ๊ฐ ์ค๋์ ์ ๊ธฐ์ด๋ง ์ด์ง ๋ง๋ณธ D3.js API๋ผ๋๊ฒ ์์ต๋๋ค. Data-Driven Documents๋ผ๋ ์๋ฏธ๋ก ๋ฐ์ดํฐ ์๊ฐํ ๋ฌธ์์ ๋๋ก ์ดํดํ์๋ฉด ๋ฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ก ๊ตฌ์ฑ๋์ด ์๋๋ฐ ์ฌ๊ธฐ์ json๋ฅผ ์ฝ๋ ํจ์๊ฐ ์ด๋ ตํ์ด ๋ ์ค๋ฅด๋๊ตฐ์. ๊ทธ๋์ ํ๊น์ D3๋ก ๊ณต๊ฐ๋ ๊ฑฐ๋์ API url์ ์ ๋ณด๋ฅผ ์ฝ์ด๋ณด๊ณ ์ถ์ ์ถฉ๋์ด ์๊ธฐ๋๊ตฐ์.
๋ฑ ํ์ค๋ก ๋๋๋ฒ๋ ธ๋ค์. d3๋ ๋ด๋ถ๋ก์ง์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ณผ์ ์ ๊ฑฐ์น๋๋ฐ ๊ทธ ๋ถ๋ถ์ ํจ์๋ก ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์์ ์ ๊ฒฝ ์ธ๊ฒ์ด ์๊ณ ๊ทธ๋ฅ url๋ง ๋์ ธ์ฃผ๋ฉด ์์์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํด๋ฐ๊ฒ ๋ฉ๋๋ค. D3๋ผ๋๊ฒ ์ฐธ ์ฌ๋ฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ฐธ๊ณ ๋ก ์ด ํฌ์คํ ์ ํ ๋ v5๋ฒ์ ์ธ๋ฐ json()ํจ์๊ฐ ๋์ํ์ง ์๊ณ ์๋ค์. v4์์๋ ์๋ฌด ๋ฌธ์ ๊ฐ ์์ด ์ ์๋ํ๋๊น v4๋ฒ์ ์ผ๋ก ๋งํฌ ์ฐ๊ฒฐํ์๋ฉด ๋ฉ๋๋ค. ์ ๊ฐ d3๋ฅผ ๊ณต๋ถํ๋ค๊ฐ ์ ์ ์ด์ ๊ฐ ๋ฐ๋ก ์ด๋ฐ ๋ฌธ์ ๋๋ฌธ์ด์ง์. ๋ฒ์ ์ด ๋ฐ๋ ๋๋ง๋ค ๊ธฐํ ๋ถ๋ถ๋ค์ด ๊ฐ์ ๋์ด ์ข์์ง์ง๋ง ์ ๊ทผ์๋ฅผ ํตํ ํจ์๋ช ์ ๊ทผ์ด ํํ ๋ฐ๋์ด ๋ฒ๋ฆฐ๋ค๋ ๊ฒ์ด์ฃ . ํด๋น ๋ฒ์ ์ผ๋ก ์ฌ์ฉํ๋ฉด ๋ฌธ์ ๋ ์์ง๋ง ๊ฐ๋ฐ์์ ๊ฒฝ์ฐ ์๋ก ๋ค๋ฅธ ๋ฒ์ ์ผ๋ก ๊ณต๋ถํ๋ ๋ถ๋ค์ ๋ฒ์ ๋ณ ์ ๊ทผ ๋ฌธ์ ๊ฐ ์๊ฒจ์ ํ์ฌ ์จ๋จน์ง๋ ๋ชปํ๋๋ฐ ๊ตฌ์ง ๊ณต๋ถํ๋ค๊ฐ ๋ค์์ ์จ๋จน์ ๋ ๋ค์ ํด๋น ๋ฒ์ ์ ๊ณต๋ถํด์ผํ๊ธฐ ๋๋ฌธ์ ๊ณต๋ถํ ์์์ ๊บฝ์ด ๋ฒ๋ฆฌ๋๊ตฐ์. ์ผ๊ด์ฑ์ด ์ข ๋จ์ด์ง๋ค๋ ๋จ์ ์ ์์ง๋ง ์ฌ์ด ์ฝ๋ฉ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํ๋ ๊ฐ๋ ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ์ ํน์ ๊ด์ฌ์๋ ๋ถ๋ค์ ๊ณต๋ถํ์๋ ๊ฑธ ์ถ์ฒ๋๋ ค์.
์ฐธ๊ณ ๋ก Steem API ๋ฐ์ดํฐ๋ฅผ ์๊ฐํ ํ ์ ๋ณด์ฌ์ดํธ ์์ฃ . ๊ทธ๊ฒ์ ์ฝ๊ฒ ์๊ฐํ ํ ์ ์๋๊ฒ D3์ ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๊ธฐ๋ง ํ๋ฉด ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์๊ฐํ ํ ์ ์๋ ๋ค์ํจ ํจ์๋ค์ด ์์ด์ ๋ค์ํ ์๊ฐํ๊ฐ ์ฝ๊ฒ ๋๋ค๋ ๊ฒ ํฐ ์ฅ์ ์ ๊ฐ์ง API๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
-๊ณต์์ฌ์ดํธ : https://d3js.org/
๊ฐ์ ์ ๊ตฌ๊ฒฝํด๋ณด์ธ์.
์ผ์ฒํฌ๋ก ๋น ์ก์ง๋ง ์ด์ ๊ฑฐ๋์ url๋ฅผ ํตํด ์ฝ์ด์ฌ๊น์.
<script src="https://d3js.org/d3.v4.min.js"></script>
<body>
<script>
const url = "https://api.bithumb.com/public/ticker/BTC";
d3.json(url, function(error,data){
console.log(data);
});
</script>
</body>
์ฝ๋ฉ์ด ์ฐธ ๊ฐ๋จํ์ง์. url ๋ณ์๋ก ์ฃผ์๋ฅผ ์ ์ฅํ๊ณ d3.json()์ด๊ฑธ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฒ ๋ฉ๋๋ค. ์ฝ๋ฐฑํจ์๋ก data ๋ณ์์ ์ฝ์ด์จ ๊ฐ๋ค์ด ์ ์ฅ๋์ด ์์ต๋๋ค.
๊ทธ๊ฑธ ์ถ๋ ฅํด๋ณผ๊น์.
๊ฒฐ๊ณผ
์ ๊ทธ๋ฆผ์ ํ์ด์ฌ 3 ๋ฒ์ ์ฉ์ ๋๋ค.
import json
import urllib.request
opendata = urllib.request.urlopen('https://api.bithumb.com/public/ticker/BTC')
readdata = opendata.read().decode('utf-8')
coindata = json.loads(readdata)
print(coindata)
print('BTC : '+coindata['data']['closing_price'])
์ข ๋ฅ๋ฒ ์ ๊ทผ์ด ๋ค๋ฅด๋๊ตฐ์
import urllib2 => urllib2.urlopen("url").read()
import urllib.request => urllib.request.urlopen("url").read()
import requests => requests.get("url")
์๋ฌดํผ, ๋๋ฒ์งธ ๋ฐฉ์์ผ๋ก ๊ณต๊ฐ ๋น์ธ API url๋ก BTC์ ์ ๋ณด๋ฅผ ์ป์ด์๋ค์. ์ฒจ์ opendata.read()ํจ์๋ก๋ง ์ฝ์ผ๋๊น json.loads()ํ ๋ ํ์
๊ด๋ จํด์ ์๋ฌ๊ฐ ๋ฐ์ํ๋๊ตฐ์. ๊ตฌ๊ธ๊ฒ์์ ํ๋ decode('utf-8')์ ํด์ค์ผ ํ๋ค๊ณ ํ๋๊ตฐ์. ์ฐธ๊ณ ๋ก ์ฝ์๋ 'utf-8'๋ก ํ์
๋ ๋๊ณ ์ฐ์ ์ฝ์ด์จ ๋ค์ json ํํ๋ก ๋ฐ๊ฟ๋ decod('utf-8')๋ก ๋ฃ์ผ์
๋ ๋ฉ๋๋ค. ์์น๋ ๋ ์ค ์ํ๋ ์์น์ ์ง์ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ค๋ช
ํ๋ฏ์ด ๋ค ๋น์ทํ ํํ์ด๋๊น ๊ตฌ์ง ์ค๋ช
์ ๋๋ฆด ํ์๋ ์๋ค๊ณ ์๊ฐ ๋๋ค์.
ํํ์ ์ ๋ถ๋ค ๊ฐ์ผ๋๊น์.
๊ฒฐ๊ณผ๋ฌธ์ ๊น๋ํ๊ฒ ์ ๋์๋ค์. ๋์ค์ ๊ฑฐ๋์ ๋ณ๋ก ๋ชจ๋์ ๋ง๋ค์ด ๋๊ณ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค์๋ฉด ํธํ๊ฒ ์ง์. ํ์ด์ฌ ์์ฒด๋ฅผ ์จ๋ณธ์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋์ด์ ํํ์ ์๋ตํ๊ฒ ์ต๋๋ค.
ํ์ด์ฌ์ผ๋ก ๊ตฌ๊ธ ์ด๋ฉ์ผ์ ์ปจํธ๋กค ํ ์ ์์ต๋๋ค. ์ฐธ๊ณ ๋ก ์ ์คํ์ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์ ํ์ด์ฌ์ด ๊น๋ ค ์์ด์ ๊ทธ๊ณณ์์ ๋๋ ค๋ณธ ๊ฒฐ๊ณผ์ด๊ณ ์. ์ฌ๊ธฐ์ ๊ตฌ๊ธ ์ด๋ฉ์ผ ์ปจํธ๋กค ์ฝ๋๋ฅผ ๋ฃ์ผ์๋ฉด์ ๊ตฌ๊ธ ์ด๋ฉ์ผ์ ์ด์ฉํด์ ์ค์๊ฐ์ผ๋ก ์ฝ์ธ ์ ๋ณด๋ฅผ ์ด๋ฉ์ผ๋ก ๋ณด๋ผ ์ ์์ต๋๋ค.
๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ๊ด๋ จ ์ด๋ฉ์ผ ์์ค๋ฅผ ๊ตฌ๊ธ ๊ฒ์ํ์๋ฉด ์ฝ๊ฒ ์ฐพ์ ์ ์์๊บผ์์. ์ ๋ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ip์ ๋ณด๋ฅผ ๋ถํ
๋ ์๋์ผ๋ก ์ ๋ณด๋ฅผ ์ด๋ฉ์ผ๋ก ์ ์กํ๋๋ก ๋ง๋ค์ด ๋จ์๊ฑฐ๋ ์.
์ด ์๋ฆฌ๋ฅผ ์ฌ๊ธฐ๋ค๊ฐ ์ ์ฉํ๋ฉด ํน์ ์กฐ๊ฑด์ด ๋ ๋ ๊ทธ ์ ๋ณด๋ฅผ ์ด๋ฉ์ผ๋ก ์์ ํ ์ ์๊ฒ ์ฃ . ์ด ํํ์ ๋ฃ๊ณ ์ถ์๋๋ฐ ์ข ์ ๋งคํด์ ๋ฃ์ง ์๊ฒ ์ต๋๋ค. ํด๋ณด๊ณ ์ถ์ ๋ถ๋ค์ ํ ๋ฒ ๊ฒ์์ ํด์ ๋์ ํด ๋ณด์ธ์.
๊ทธ๋ฅ ๊ตฌ๊ธ ์คํ๋ ๋์ํธ ํด์ ํ๋ฉด ์ข์๋ฐ ๊ตฌ์ง ์๋ฐ์คํฌ๋ฆฝํธ๋ก ํํํ๊ณ ๋ ๊ทธ๊ฑธ์ HTML๋ก ์ถ๋ ฅํ ์ด์ ๊ฐ ๋ญ๊น์. ์ฌ์ค ์ค์๊ฐ์ฑ์์๋ ์น์์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ ๊ทผํ๋๊ฒ ๋น ๋ฆ ๋๋ค. ๊ตฌ๊ธ ์คํ๋ ๋์ํธ ์ฌ์ค ๊ฐฑ์ ๋๋ ์ ๋ณด์ ์๊ฐ์ฐจ๊ฐ ๋๋ฌด ํฝ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ์๋ฐ์คํธ๋ฆฝํธ์๋ ์ฌ๋ฐ๋ ํจ์๋ค์ด ๋ง์ต๋๋ค.
ํ์ด๋จธ๋ผ๋ ํจ์๊ฐ ๊ทธ ํ๊ฐ์ง์ด์ฃ .
<button type="button" class="btn btn-primary" onclick="startAlert()">ํ์ด๋จธ์์</button>
<button type="button" class="btn btn-dark" onclick="stopAlert()">ํ์ด๋จธ์ข
๋ฃ</button>
startAlert = function() {
timeout= setInterval(paly, 60000);
};
stopAlert = function() {
clearInterval(timeout);
};
์ด๋ฐ ํํ์ด ์์ต๋๋ค. ํ์ด๋จธ์์์ด๋ผ๋ ๋ฒํด์ ๋๋ฅด๊ฒ ๋๋ฉด 1๋ถ๋จ์๋ก play()ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค. paly()์ ๊ธฐ๋ก๋ ๋ก์ง์ด ์ด๋ป๊ฒ ๋ ๊น์. 1๋ถ๋จ์๋ก ๊ฐฑ์ ์ด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์๊ฐํด ๋ณด์ธ์. ๊ฑฐ๋์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๋ก์ง์ด ์๋ค๊ณ ์น๋ฉด ์ด๊ฑธ๋ก ํ์ด๋จธ์์ ๋ฒํด์ ๋๋ฅด๋ฉด 1๋ถ ๋จ์๋ก ๊ฑฐ๋์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ฒ ๋ฉ๋๋ค.
์ด๋ ต์ง ์๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๊ฐ๋ ฅํ์ฃ . steInterval()ํจ์๊ฐ ์ฅ๋์๋์ฃ . ๊ทธ๋ฆฌ๊ณ ํ์ด๋จธ๋ฅผ ์ข ๋ฃ์ํค๋ ํจ์๊ฐ clearInterval()์ด๋ผ๋ ํจ์์ ๋๋ค. ์ํ ๋ ์ผ์ ์๊ฐ ๋จ์๋ก ๊ฐฑ์ ์ ์ํฌ ์ ์๊ณ ์ํ ๋ ์ค๋จ ์ํฌ ์ ์๊ฒ ๋ฉ๋๋ค.
์ด๊ฒ ๋ญ๋ผ๊ณ ๊ตฌ๊ธ ์คํ๋ ๋์ํธ์์ ๊ฐฑ์ ํ๋ฉด ๋์์ ํ ์ ์์ต๋๋ค. ๋๋ค๋ ํจ์๊ฐ ์์ต๋๋ค.
alert('๋ฉ์ธ์ง');
์ด ํจ์๋ ๊ฝค ์ฌ๋ฐ๋ ํจ์์ ๋๋ค. ๊ฒฝ๊ณ ์ฐฝ์ ๋์์ฃผ๋ ๋ฉ์ธ์ง ์ ๋๋ค. ๊ฐ๋ น, ํ๋ฒ ์์๋ ฅ์ ๋ฐํํด ๋ณด์ธ์. ์์ ์ด ๊ตฌ๋งคํ ๊ฐ๊ฒฉ์ด ์๋ค๊ณ ์นฉ์๋ค. ๊ทธ ๊ฐ๊ฒฉ์์ ํ์ฌ ์์ธ์ฐจ๊ฐ ์ด๋์ ๋ ๋ฒ์ด์ก์๋ ์์ต๋ฅ ์ด ํ๋ฌ์ค์ธ์ง ๋ง์ด๋์ค์ธ์ง ์์ ์ด ์กฐ๊ฑด๋ฌธ์ผ๋ก ์๋ฆผ์ ์ค์ ํ๊ณ ์ถ์๋ ์ด ํจ์๋ฅผ ์ ์ฉ ํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์. ์ค์๊ฐ์ผ๋ก ํ์ด๋จธํจ์๋ก ๊ฐฑ์ ์ด ์ด๋ค์ง๋ค๊ณ ํ์ฃ ๊ทธ๋ฌ๋ฉด ๊ฐ์ํํ ๊ฐ๊ฒฉ์ ๊ฐ์ ธ์ค๋ ๋ก์ง์์ ๊ฐ์ ธ์จ ๊ฐ๊ฒฉ์ ์์ ์ด ์ ๋ ฅํ ๊ฐ๊ฒฉ์ ๋น๊ตํ๋ if๋ฌธ์ ์ฝ์ ํด ๋ด ์๋ค. ๋ง์ฝ 5%๋์ผ๋ฉด ์ฐธ์ผ๋ alert()ํจ์๋ฅผ ์คํํ๊ฒ ํ๊ณ ๊ทธ ์์ ํ์ฌ ์ฝ์ธ๊ณผ ์์ต๋ฅ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๊ฒ ํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์. ๊ทธ๋ฅ ์๋ฆผ์ฐฝ์ด ๋๋ ๊ฑฐ์ง์.
if(์์ต๋ฅ >=5){
alert('๋ฉ์ธ์ง');
}
๊ฐ๋จํ์ง์. ๋ฉ์ธ์ง ์์๋ ์ฝ์ธ, ํ์ฌ์์ธ, ์์ต ๊ธฐ๋ณธ์ผ๋ก ํฉ์ณ์ง ์ ๋ณด๋ฅผ ๋ฉ์ธ์ง๋ก ์ถ๋ ฅ์ ๊ฒฝ๊ณ ์ฐฝ์๋ค ํ๋ฉด ๋๊ฒ ์ฃ . ์ด๋ ต์ง ์์ฃ . ํ์ด๋จธ ํจ์์ ๊ฒฝ๊ณ ์ฐฝํจ์ ๋๊ฐ๋ง ์ ์ฉํ์ ๋ฟ์ธ๋ฐ ์ฌ๋ฐ๋๊ฒ ๋ง๋ค์ด์ง์ฃ . ๊ทธ๋ฐ๋ฐ ๋จ์ ์ ํด๋น ์นํ์ด์ง๊ฐ ์ด๋ ค ์์ด์ผ ํ๋ค๋ ์ ์ ๋๋ค. ๊ทธ ๋์์ผ๋ก ๊ฒฝ๊ณ ์ฐฝ ๋์ ์ ํฌ๋กฌ ์๋ฆผ ์ค์ ์ ํด๋๊ณ ๊ทธ ๊ฒฝ๋ก๋ก ํตํด์ ์๋ฆผ์ฐฝ์ ๋ง๋์ค ์ ์์ต๋๋ค. ๊ตฌ๊ธ ๊ฒ์์ ํ์๋ฉด ์ฝ๊ฒ ํฌ๋กฌ ์๋ฆผ์ฐฝ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ด ๋์ ์์ต๋๋ค. ํฌ๋กฌ ์น๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ ค ์์ผ๋ฉด ์ด๋ ํ์ด์ง์ ๊ฐ๋๋ผ๋ ์๋ฆผ์ ๋์ธ ์ ์๊ฒ ๋ฉ๋๋ค
์ฌ๊ธฐ์ ๋ ์ฌ๋ฐ๋๊ฒ ๋ ์ค๋ฅด๋๊ตฐ์. ํ์ฅํ๋ก๊ทธ๋จ์ด๋๊ฒ ์์ต๋๋ค. ์ฌ๋ฌ๋ถ๋ค์ steem ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด์ ํ์ฅํ๋ก๊ทธ๋จ์ ์ค์นํ๊ณ ๊ณ์์ฃ . ๊ทธ๋ฌ๋ฉด ์ ๋ด์ฉ์ ํ์ฅํ๋ก๊ทธ๋จ ํ์์ผ๋ก ๋ง์ถฐ์ ์์ ์ ์น๋ธ๋ผ์ฐ์ ์ ๋ฑ๋กํด ๋์ผ๋ฉด ์ข ๋ ํจ์จ์ ์ผ๋ก ์๋ฆผ ์๋น์ค๋ฅผ ๋ฐ์ ์ ์๊ฒ ์ฃ . ๊ตฌ์ง ํด๋น ํ์ด์ง๋ฅผ ๋์ธ ํ์๊ฐ ์์ด๋ ๋ง์ด์ฃ .
ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๊ณผ์ ์ ์ํ์ฝ๋ฉ ์ฌ์ดํธ์ ๊ฐ์๋ฉด ๊ฐ๋จํ ํ์ฅํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๊ณผ์ ๊ณผ ์์ ์ ํฌ๋กฌ๋ธ๋ผ์ฐ์ ์ ๋ฑ๋ก์ํค๋ ๊ณผ์ ์ด ์ ๋์ ์์ต๋๋ค. ๊ตฌ๊ธ๊ฒ์์์ ์ํ์ฝ๋ฉ๊ณผ ํ์ฅํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ ํค์๋๋ก ๊ฒ์ํ์๋ฉด ์ฝ๊ฒ ์ฐพ์ ์ ์์ ๊บผ์์.
์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด๋ผ๋๊ฒ ์ฐธ ์ฌ๋ฐ๊ณ ๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์์ผ๋ฉฐ ๋ค์ํ ๊ฒ๋ค๊ณผ ์ฐ๊ฒฐ๋๋ฉด ์ฌ๋ฐ๋ ๊ฒ๋ค๋ก ๋ง๋ค์ด์ง ์ ์์ต๋๋ค.
์ด์ ๋ง๋ฌด๋ฆฌ ํ ์๊ฐ์ด๋ค์. ์๋๋ ๊ณ์ ์๋์ด๋ ธ ํฌ์คํ ํ ๊น? ์๋๋ฉด Steem API ๊ณต๋ถํ ๋ด์ฉ์ ํ์ด ๋ผ๊น ๊ณ ๋ฏผ์ด ๋๋ ์ฃผ๋ง ํฌ์คํธ ์๋ค์. ๊ทธ๋ฌ๋ค๊ฐ ๊ฑฐ๋์ API ์ ๊ทผ์ด ๊ถ๊ธํด์ ธ์ ์คํํด๋ณด๊ณ ์ถ์ด์ ์ฌ๋ฌ๊ฐ์ง๋ฅผ ์กฐ์ฌํ๊ณ ํด๋ฉํด ๋ดค๋ค์.
๊ทธ๋ฅ ์คํ์ผ์์ html๋ก ๋์ถฉ ๋ฐ์ดํฐ๋ง ์ถ๋ ฅ๋๋๋ก ๋ณ๋ค๋ฅธ ๊ธฐ๋ฅ ์์ด ๊ฐ๋จํ ํํํด๋ณด๊ณ ๊ฒฐ๊ณผ๋ง ํ ์คํธ ํ๋ค์. ์ฌ๊ธฐ์ ํ์ด๋จธ๋ฅผ ๋์์ํค๋ฉด ์์ต์ด 5% ๋์ผ๋ฉด ํด๋น ์ฝ์ธ์ด ๊ฒฝ๊ณ ์ฐฝ์ผ๋ก ์์ธํ ๋ด์ฉ์ด ์ถ๋ ฅ๋๋๋ก ๊ฐ๋จํ ์ฝ๋ฉํด ๋ดค์ด์. ๊ทธ๋ฆผ์์์ ETH๊ฐ 5%์ ๊ฐ๊น์์ง๋ค์. 5%์ด์์ด ๋๋ฉด ์๋์ผ๋ก ์นํ์ด์ง ์๋จ์ ๊ฒฝ๊ณ ์ฐฝ์ผ๋ก ํด๋น ์ฝ์ธ์ ์ ๋ณด๋ฅผ ์๋ ค ์ฃผ๊ฒ ์ฃ .
์ฐธ๊ณ ๋ก ์ค์ ์ฌ์ฉํ์ง๋ ์์ต๋๋ค. ์ฌ์ฉํ ๋ ค๊ณ ํ๋ค๋ฉด ์ ๋ ฅ์ฐฝ๊ณผ ์์ธ๋ฟ ์๋๋ผ ๊ธฐํ ๋ช๊ฐ์ง ๊ณ์ฐ์์ ๋ ๋ฃ์ด์ ๋ง๋ค์๊ฒ ์ฃ . ๊ทธ๋ฅ ์ฌํํ๊ฒ ์๋ฆฌ๋ง ์ดํดํ๋ ๊ฒ ๋ชฉ์ ์ด๋ผ์ ๋์ด์ ์ง๋๋ ์๋๊ฐ๋ค์.
์ฝ๋ฉ์ ์ธ๊ณ๋ ์ด์ฒ๋ผ ์ฌ๋ฏธ ์์ต๋๋ค. ์ด๋ค ํจ์๊ฐ ์์ผ๋ฉด ๊ทธ ํจ์์ ์๋ฏธ๋ง ์ ์ดํดํ์๋ฉด ์ฌ๋ฐ๋ ๊ฒ๋ค์ ๋ง๋ค์ด ๋ ๋๋ค.
์ด์์ผ๋ก ๊ฐ๋จํ ๊ถ๊ธ์ฆ์ด ์๊ธด ๊ฑฐ๋์ API url ์ ๊ทผ์ ๋ํด์ ์ดํด๋ดค๋ค์. ๊ถ๊ธ์ฆ์ด ํด์ ๋์๊ธฐ ๋๋ฌธ์ ์ด์ ๊ด๋ จ๋ ๊ฑด ๋์ด์ ํ์ง ์์๊บผ์์.
ํธ๊ธฐ์ฌ์ผ๋ก ๊ธ ํํธ ๋จ๊น๋๋ค. ๊ทธ๋ฆฌ๊ณ API๋ ๊ณต์์ ์ผ๋ก ๊ณต๊ฐ๋ ๊ฒ๋ง ์ฌ์ฉํ์ธ์. ๋น๊ณต์์ ์ธ๊ฑด ๋ ์ ์์ผ๋ฉด ์ฐ์ง ๋ง์ ์ฃผ์ธ์. ๊ฑด์ ํ ์ ๊ทผ์ ๊ฑด์ ํ ์ฝ๋ฉ๋ฌธํ๋ฅผ ๋ง๋ญ๋๋ค.