Node.js 스터디 #4 - 보팅 대상 계정 리스트를 만들고, 각 계정의 최근 포스트에 보팅하기

in #zzan2 years ago

오늘은 보팅 대상 계정 리스트를 만들고, 각 계정의 최근 포스트에 보팅하는 프로그램을 만들어 보았습니다. 저는 주로 자바, 코틀린 언어를 사용하는데, 자바스크립트는 여전히 낯선 언어지요. 약간의 적응이 필요했지만, 그리 어렵지 않게 코드를 만들어볼 수 있었습니다. 내일부터는 이 프로그램으로 자동 보팅을 시도해볼 수 있을 거 같습니다.

vote_authors.js

오늘 작성한 코드를 아래와 같이 공유합니다.

var steem = require('steem');

var voter = "hive-131263";
var wif = "포스팅키를 여기에 복사하세요."
var limit = 3      // 읽을 포스트 최대 개수

var authors = [
    "dorian-lee",
    "dorian-dev",
    "dorian-mobileapp",
    "jini-zzang"
]

// account 계정의 블로그 포스트들을 구하는 함수.
// callback 파라메터는 아래의 getBlogCallback 함수를 대입한다.
function getBlog(account, entryId, limit, callback) {
    steem.api.getBlog(account, entryId, limit, function (err, data) {
        callback(err, data, account)
    })
}

// 블로그의 1번째 포스트에 보팅 실행
// 보팅 실패하면 그걸로 끝.
// 향후 추가 과제: 보팅 실패시 다음 포스트에 보팅
function getBlogCallback(err, posts, account) {
    if (err != null) {
        console.log(`@${account} 블로그를 로딩할 수 없습니다.`)
        return
    }
    else if (posts.length == 0) {
        return
    }

    for (let i = 0; i < posts.length; i++) {
        if (posts[i].blog != posts[i].comment.author) {    // 리스팀 포스트는 패스!
            continue
        }

        vote(posts[i].blog, posts[i].comment.permlink, 10000, voteCallback)
        break
    }
}

// 보팅 실행
// callback 파라메터는 아래의 voteCallback 함수를 대입한다.
function vote(author, permlink, weight, callback) {
    steem.broadcast.vote(
        wif,
        voter,
        author,
        permlink,
        weight,
        function (err, data) {
            callback(err, author, permlink)
        }
    )
}

// 보팅 실행 결과를 콘솔에 출력 (성공 또는 실패)
function voteCallback(err, author, permlink) {
    if (err != null) {
        console.log(`@${author}/${permlink} 보팅 실패`)
        return
    }

    console.log(`@${author}/${permlink} 보팅 성공`)
}

// 보팅은 이 함수로 시작
function runVoting() {
    for (let i = 0; i < authors.length; i++) {
        setTimeout(
            () => {
                getBlog(authors[i], 0, 10, getBlogCallback)
            },
            5000 * (i + 1)
        )
    }
}

function main() {
    runVoting()
}

main()

지난 포스트


참고 포스트

Coin Marketplace

STEEM 0.16
TRX 0.15
JST 0.029
BTC 56588.25
ETH 2399.94
USDT 1.00
SBD 2.32