Repository
https://github.com/steemit/steem-js
What Will I Learn?
- How to retrieve any vote a user took
- How to retrieve details from a post a user voted on
Requirements
- JavaScript (ES6 / ES7) knowledge
- Promises
Difficulty
Intermediate
In this tutorial I will show you how to get details of posts you upvoted using the steem.js API. Instead of callbacks I will use promises.
steem.js functions
To retrieve our votes and the corresponding posts we need the following API functions:
steem.api.getAccountVotessteem.api.getContent
These two functions using callbacks to handle asynchrony. As we dont want to end in the "callback-hell" we are going to use promises:
function getAccountVotes(author) {
return new Promise((resolve, reject) => {
// get all votes for specific author
steem.api.getAccountVotes(author, (error, result) => {
// reject if error
if (error) {
reject(error);
// return votes if success
} else {
resolve(result);
}
});
});
}
function getContent(author, permlink) {
return new Promise((resolve, reject) => {
// get all details for specific authors post
steem.api.getContent(author, permlink, (error, result) => {
if (error) {
// reject if error
reject(error);
} else {
// return post details if success
resolve(result);
}
});
});
}
Main code
The previous code retrieves the last ten votes and creates an array of content requests to retrieve all details.
// get all votes for myself
getAccountVotes('drookyn')
.then((votes) => {
// get last 10 votes
const lastTenVotes = votes.reverse().slice(0, 10);
// return new promise with all detail promises
return Promise.all(lastTenVotes.map((vote) => {
const authorPerm = vote.authorperm.split('/');
return getContent(authorPerm[0], authorPerm[1]);
}));
})
.then(posts => console.log(posts.map(p => p.title))) // log all titles
.catch(err => console.log(err));
Other details
We just printed the title of each post in the posts array above. But what else do these objects contain?
- id
- author
- permlink
- category
- parent_author
- parent_permlink
- title
- body
- json_metadata
- last_update
- created
- active
- last_payout
- depth
- children
- net_rshares
- abs_rshares
- vote_rshares
- children_abs_rshares
- cashout_time
- max_cashout_time
- total_vote_weight
- reward_weight
- total_payout_values
- curator_payout_value
- author_rewards
- net_votes
- root_author
- root_permlink
- max_accepted_payout
- percent_steem_dollars
- allow_replies
- allow_votes
- allow_curation_rewards
- beneficiaries
- url
- root_title
- pending_payout_value
- total_pending_payout_value
- active_votes
- replies
- author_reputation
- promoted
- body_length
- reblogged_by
All the code can be found in this paste.