@dorothy.kim 님 감사합니다.
이번 기회에 알게된 무료서버 heroku를 설명하려고 하는데 기존에 해놓은 sibba는 설명할게 더 많아져서..
heroku 는 생각보다 다양한 환경을 제공해줍니다.
직접 접근해서 컨트롤하는게 아니라 제공해주는 git 주소로 푸시해서 돌아가게 해주는거에요
겸사겸사 간단한 봇도 만들어서 배포하는걸로 설명드려볼께요.
사용한 것은
nodejs + telegrambot + 무료서버 heroku
입니다. nodejs 랑 텔레그램은 많은분들이 설명하셨으니, heroku 에 집중하셔도 되요.
이번 예제로 만들어볼려고 하는것은 코인도 하락한겸 정신승리 봇을 만들어서 올리는 걸 해봅니다.
먼저 텔래그램 봇을 만들어 둡니다.
nodejs를 세팅합니다.
git을 설치합니다.
이건 많은 분들이 설명하셔서 패스하겠습니다.
기본 nodejs 구조를 를 만듭니다...
설명할려고했는데
https://johngrib.github.io/blog/2017/03/12/telegram-bot/
여기에 기똥차게 되어있어서.. 심지어 heroku까지..
근데 설명이 너무 심플해서 제가 좀 더 살을 붙일꺼구요
그럼 정신승리 봇을 만들어보겠습니다.
정신승리봇이란 ?
스팀 가격을 업비트기준으로 정해진 시간마다 알려주는 봇입니다. 여기에 정신승리를 해야하니깐 끝에 0을 하나 더 붙이겠습니다.
일단 프로젝트를 만듭니다.
한글로 만들수는 없으니.. 일단 영문검색부터..
이름이 기니깐 줄여서 mv , mvbot 으로 시작하죠
일단 폴더만 만들어둡니다.
mvbot
vscode 로 해당 폴더를 연다음
터미널을 열고 npm init을 쳐줍니다
귀찮게 여러가지 물어보는데 엔터쳐주면 됩니다.
package.json 중간에 이걸 추가해줍니다.
```
"dependencies": {
"express": "^4.16.3",
"get-json": "0.0.3",
"node-telegram-bot-api": "^0.30.0",
"sync-request": "6.0.0"
}
```
그리고 scripts 에
"start": "node index.js"
도 추가해줍니다.
.gitignore 파일 만드셔서
./node_modules
./vscode
package-lock.json
이거 추가해두세요. heroku에 올릴때 제외시킬겁니다.
추가해놓고 npm install 하면 적어둔 필요한 라이브러리들을 좌르륵 세팅 됩니다. 너무 편해요
설명을 좀더 쓸려고 했는데
https://johngrib.github.io/blog/2017/03/12/telegram-bot/
여기가 너무 잘되어있어서 양심에 찔립니다.
위 사이트를 참고하시고 나머지 파일구조는 bot.js web.js index.js 는 똑같이 해줍니다.
업비트 시세가져오는걸 찾아봅시다
https://steemit.com/kr/@segyepark/api
segyepark 님 감사합니다. 혹시 멘션갈수 있으니 @는 붙이지 않았습니다.
https://crix-api-endpoint.upbit.com/v1/crix/candles/weeks?code=CRIX.UPBIT.KRW-STEEM
스팀원화 가격 주소는 이거네요.
어떤값이 가격인지 봐야하니 결과값을
https://jsonformatter.curiousconcept.com/
요기에서 확인해봅시다.
tradePrice 값 이걸 이용하면 될것 같습니다.
이걸로 버무리면
생각보다 오랜시간 뒤( 아.. 캐마)
const TelegramBot = require('node-telegram-bot-api');
var http = require('http');
var request = require('sync-request');
const getToken = (function () {
const token = process.env.TELEGRAM_TOKEN;
return function () {
return token;
};
})();
//사용자 id 저장
var g_idSet = new Set();
//스팀 가격 주소
var g_upbitSteem = "https://crix-api-endpoint.upbit.com/v1/crix/candles/weeks?code=CRIX.UPBIT.KRW-STEEM";
// 정신승리를 위한 뻥튀기
var g_mentalVictory = 10;
// 앞에 문구
var g_pre = "우와 스팀가격이 ";
// 뒤에 문구
var g_after = "원 이에요!";
const bot = new TelegramBot(getToken(), { polling: true });
bot.onText(/\/start/, (msg, match) => {
if(g_idSet.has(msg.chat.id) == false) {
g_idSet.add(msg.chat.id);
}
});
bot.onText(/\/cancel/, (msg, match) => {
if(g_idSet.has(msg.chat.id)) {
g_idSet.delete(msg.chat.id);
}
});
setInterval(function() {
let res = request('GET', g_upbitSteem);
let steems = JSON.parse(res.getBody().toString("utf8"));
steems.map(steem => {
for(let id of g_idSet) {
bot.sendMessage(id, g_pre + steem.tradePrice * g_mentalVictory + g_after);
}
});
}, process.env.INTERVAL);
..쉽게 보여주기위해서 간단이 작성한 코드입니다. 매우매우 부끄럽습니다. 좀 더 이쁘고 효율적으로 만들고 싶으면 다른분들꺼 참고하세요. 이 코드 처럼 하시면 안됩니다.
그리고 아마 1인용으로만 제대로 동작할꺼에요. 여러명이 쓰시면.. 에러가 나올확률이 높습니다.
process.env.TELEGRAM_TOKEN
process.env.INTERVAL
은 이따가 heroku 사이트에서 정의하는겁니다. 이따 설명할께요
이제 heroku에 올려봅시다.
http://heroku.com/ 가입하세요
https://devcenter.heroku.com/articles/heroku-cli
설치하세요. heroku 에 올리는데 필수입니다.
heroku 에 접속해서 new app 하시고 적당한 이름으로 만듭니다.
요 메뉴에서 settings
눌러서 아까 이상한 값들 세팅합니다
1000 = 1초입니다.
이렇게 하는 이유는 편하게 시간도 바꾸고 싶구요.
git 에 올라가니깐 노출될 위험이 있으니 .. 따로 세팅해두는겁니다.
혹시 스팀잇 봇 만들꺼면 .. 포스팅키까지 지원되는 기능으로 가지고 노세요. heroku가 나쁜마음 먹으면 X되는겁니다.
다시 이메뉴에서 Deploy 메뉴에 들어가서 하라는 대로 하면됩니다.
굳이 설명과 과정을 보여드리겠습니다. .. 친절 친절..
이제 작업한 결과물을 올려서 동작시켜봐야겠죠?
로그인 하시구요 (heroku 이메일 / 비번)
git init
깃 기본 세팅
heroku git:remote -a test-mv
깃 저장소 세팅
git add .
현재 프로젝트 파일을 깃 현재 저장소에 등록하고
$ git commit -am "make it better"
현재 저장소에 저장하고
$ git push heroku master
heroku 서버에 올리고 동시에 프로그램이 시작됩니다.
정상적으로 되면 deploy done!
이제 확인해봅시다
잘되네요 ㅎㅎ heroku 에서 10초마다 해놔서 계속 울리니 끕시다. 시간을 바꿀려면 끈다음에 값을 변경하고 다시 키면되요.
오버뷰화면에서 저걸 눌러서
오른쪽에 있는 편집버튼 눌러서 모드를 변경하고
파란색 버튼눌러서 끄거나 키시구요. 빨간색 버튼으로 저장해줍니다.
다시 오버뷰 화면에 들어와서 수정하시면 됩니다.
heroku 가 일정시간동안 요청이 없으면 sleep 상태로 들어간데요 그래서 위에 참조 주소에도 나와있듯이
uptimerobot.com
여길 이용해서 30분 정도에 한번씩 요청시켜주면 계속 살아있습니다.
.. 설명이 부실한듯 보이지만 다들 알아보셨을거라 믿습니다. ㅠㅠ..
참조한 사이트
https://steemit.com/kr/@jys5220/7awbnk
https://johngrib.github.io/blog/2017/03/12/telegram-bot/
작성하고 보니 구글 어디엔가 있을것 같습니다...
그래도 heroku 좋으니까 써보세요! 보다는 그래도 성의를 보이는게 맞을것 같아서 한번 만들어봤네요. 생각보다 간단하게 만들어서 돌려볼수 있다! 라는걸 알려드리고 싶었습니다.
이러한 메뉴얼을 써본지 오래되었는데 .. 정말 힘드네요. 기존에 매뉴얼 만드신분들 정말 존경합니다. 너무 힘들어요...
이런식으로 평소 F5 누르거나 매일 어디 들어가서 정보를 보고 싶으면 이런식으로 만들어서 써먹으시면됩니다. 그 순간부터 당신은 이미 개발자에요.
그리고 혹시 설명이 매우 허접해서... 제가 다룬 내용들에 대해서 궁금하신분들이 계신다면 댓글달아주세요. 아는 한도내에서 답변해드릴께요.
그나저나 ... 완전 나락으로 빠지다가 그래도 조금 회복했네요. 다들 화이팅 합시다!
이런식으로라도 정신승리를 해봅시다.