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

in #kr2 years ago

지난 포스트(#4)에서 구현한 것을 이번 포스트에서는 BLURT 버전으로 구현해 보았습니다. 당분간 아래 코드를 활용하여 매일 블러트 보팅을 실시할 예정입니다. 블러트 자동 포스팅이 필요하신 분들께서는 아래 코드를 참고하셔도 좋습니다.

var blurt = require("@blurtfoundation/blurtjs");

// 보팅할 계정 데이터
var voter = "dorian-lee"
var wif = "포스팅키"

// 보팅 대상 계정 리스트
var authors = [
    "dorian-lee",
    "dorian-dev",
    "jini-zzang"
]

// 포스트 로딩에 활용할 쿼리
var query = {
    "tag": authors[0],    // 보팅 대상 계정
    "limit": 5            // 읽을 포스트 최대 개수
}

// account 계정의 블로그 포스트들을 구하는 함수.
// callback 파라메터는 아래의 getDiscussionsByBlogCallback 함수를 대입한다.
function getDiscussions(account, callback) {
    query.tag = account
    blurt.api.getDiscussionsByBlog(query, function (err, data) {
        callback(err, data, account)
    })
}

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

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

        vote(posts[i].author, posts[i].permlink, 10000, voteCallback)
        return
    }

    console.log(`@${account} 블로그에 보팅 가능한 포스트가 없습니다.`)
}

// 보팅 실행
// callback 파라메터는 아래의 voteCallback 함수를 대입한다.
function vote(author, permlink, weight, callback) {
    blurt.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} 보팅 실패`)
        console.log(err)
        return
    }

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

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

function main() {
    runVoting()
}

main()

마치며...

내일은 2개 이상의 계정으로 스팀 보팅할 수 있는 코드를 만들어볼까 합니다. 코드가 좀 더 복잡해지겠지요... ^^


지난 포스트


참고 포스트 - @ayogom


참고 포스트 - API 문서

Sort:  

You got Lottery 1st prize STEEM! Thanks for your upvoting. We are gathering STEEM delegation. You receive additional rewards for your delegation.http://steemit.email/

You got Lottery 2nd prize STEEM! Thanks for your upvoting. We are gathering STEEM delegation. You receive additional rewards for your delegation.http://steemit.email/

You got Lottery 2nd prize STEEM! Thanks for your upvoting. We are gathering STEEM delegation. You receive additional rewards for your delegation.http://steemit.email/

Coin Marketplace

STEEM 0.21
TRX 0.14
JST 0.030
BTC 68220.71
ETH 3321.59
USDT 1.00
SBD 2.74