Node.js로 스티밋에서 할 수 있는 것(4): 보팅하기
오늘은 특정글에 보팅을 하는 방법을 알아보겠다. 이번 글에서는 우선 특정 글에 보팅하는 함수에 대하여 알아보고, 실질적으로 보팅을 할 때 어떤 조건에서 보팅을 해야하는지를 살펴보겠다.
1. 특정글에 보팅하기
steem.js에 있는 아래 함수를 사용하면 된다.
var voter = 'tradingideas' // 보팅할 사람
var wif = '5xxxx' // posting key
var author = 'tradingideas' // 작가
var permlink = '5nnwke-test' // 글 링크
var weight = 100 // 보팅 가중치 1.0%
steem.broadcast.vote(wif, voter, author, permlink, weight, function (err, voted) {
여기에서 wif는 posting에 사용하는 key 값이다. 지갑/권한/포스팅 옆에 있는 개인키보기를 눌렀을 때 나오는 값이다. weight는 보팅하고자 하는 퍼센트 값에 100을 곱한 값이다.
node.js를 이용하여 보팅을 하면 weight를 결정할 때 소숫점까지 사용이 가능하다. 정확하게 $1.00을 줄 수도 있다.
소스코드
https://github.com/multiwhs/steem-js/blob/master/auto_voting_simple.js
2. 보팅하면서 발생할 수 있는 경우의 수
보팅은 함수 한번만 부르면 되기 때문에 아주 간단하다.하지만 제대로 된 프로그램을 개발할려면 여러가지 이상 상황에 대한 고려가 필요하고 이에 대응하는 코드를 모두 짜야한다. 각종 오류에 대한 대응코드도 짜야한다. 한줄이면 될 것 같은 코드가 실제로 모든 경우를 다 고려하면 수백라인의 코드가 되기도 한다.
문제가 될 만한 상황을 정리해보자.
- 이미 보팅을 한 경우
- 보팅할 수 있는 기한을 넘긴 경우 (보팅은 글을 쓴 후 6일 +12시간까지 가능하다. )
그리고 어떤 이유로 보팅이 성공하지 않은 경우에 대한 이유를 알아야 원인을 파악할 수 있다.
이런 경우의 수를 모두 반영하는 코드는 이런 형태가 될 것이다.
01 vshares를 $로 변환할 때 필요한 값들을 얻는다.
02 보팅할 글에 이미 보팅한 사람들의 리스트를 구한다.
03 for (# voters ) {
04 보팅한 사람 중에 자기가 있는지 확인한다.
05 }
06 if (아직 보팅하지 않은 글이면) {
07 보팅한다.
08 보팅한 사람들의 리스트를 구한다.
09 for (# voters) {
10 내가 보팅한 rshares를 얻은 후 $로 변환하여 보여준다.
11 }
12 }
소스코드를 직접 보면 머리가 아프기 때문에 관심있는 분들만 보기를. 링크는 아래에
소스코드
https://github.com/multiwhs/steem-js/blob/master/auto_voting_final.js
3. 보팅하면서 발생할 수 있는 오류들
steem.js에서 제공하는 함수는 아래와 같은 형태로 사용하여야 한다. 오류가 발생하면 err.message에 자세한 내용이 기술되어 있다.
steem.broadcast.vote(wif, voter, author, permlink, weight, function (err, voted) {
if (err === null) {
// do something
}
else {
console.log(err.message.split("{}")[0])
}
});
이 함수에서 발생할 수 있는 오류는 아래와 같다.
- 한 post에 보팅할 수 있는 횟수를 초과하였다 (4-5회 이상은 할 수 없는 것 같다.)
- 너무 적은 weight로는 보팅할 수 없다.
- 입력값이 틀린 경우(post 키 오류, 글 링크오류, 저자 오류 등등)
소스코드를 보면 알겠지만 node.js는 비동기적 함수로 이루어져 있기 때문에 가독성이 떨어지는 코드가 만들어진다. 이 말이 무슨 의미인지는 아래 글을 보면 이해가 될 것이다.
[개발] nodejs + steem-js 콜백 지옥을 탈출해보자. - synchronize.js 편
동기식으로 변경하기 위해서는 fibers를 설치해야 하는데, 내 노트북에서는 설치가 안된다. 어제 @nhj12311 님이 원격으로 내 노트북에 접속하여 설치 시도를 하였으나 실패하였다.
제대로 작업을 할려면 fibers를 설치해야 하는데, 방법을 모르겠다. 일단은 부분 부분 steem.js API 사용법 확인하는 작업을 먼저 해야겠다.
이전 글 보기
Node.js로 ..(1) :원하는 작가들의 최신 글 리스트 받기
A very useful post. Thank you very much for the information @tradingideas. Good luck always for you.
이렇게 노력해주시는 분들이 계시기에
추후 이용자들이 편안한 사용을 할수있겠어요 ㅎㅎ
참조할게여.
많은 도움이 되었네요.
아직은
당최 뭔 말씀이신지 이해가 어렵지만
1.2.3 차근차근 읽으며
공부해야겠네요
큰 도움이 될 것 같아요
고맙습니다
공부값은 한 잔의 차로 대신할게요
1편의 최신글 목록을 받은 후에 본 4편의 보팅을 엮에 봐야 겠어요~ ^^
감사합니다~!!
이 상태로는 어려워요. synchronize이용해서 동기식으로 바꾸어야 작업하시기가 용이할 겁니다.
참고 하겠습니다~
감사합니다~
리스팀 해갑니다!
제가 요새 집에를 잘 못가서 ㅠㅠ 다시 한번 설정을 하면서 빠진 차례가 있는지 기억을 되살려봐야할 듯 합니다. 좀 환경이 되면 해보겠습니다. ㅎㅎ
바쁘신데 괜히 신경을 쓰시는 것 같네요. 제가 해 볼께요. 안되면 그냥.. 다시 파이썬으로.. 가야죠.
스팀잇 플랫폼 관련된 개발도 재미있겠네요
팔로우하고 갑니다 ~