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.getAccountVotes
steem.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.
Steemit api uses bluebird, so you don't need to wrap with promises. You can just do:
steem.api.getAccountVotesAsync(author) .then((votes) => { // do stuff })
or
steem.api.getContentAsync(author, permlink) .then((content) => { // do stuf })
Thank you for your contribution.
While I enjoyed your work, I would suggest some further improvements to your future contributions, as follows:
Your contribution has been evaluated according to Utopian rules and guidelines, as well as a predefined set of questions pertaining to the category.
To view those questions and the relevant answers related to your post,Click here
Chat with us on Discord.
[utopian-moderator]Need help? Write a ticket on https://support.utopian.io/.
Thank you for your time.
I will work on that in the next contributions.
Thanks for contributing on Utopian.
We’re already looking forward to your next contribution!Hey @drookyn
Contributing on Utopian
Learn how to contribute on our website or by watching this tutorial on Youtube.
Want to chat? Join us on Discord https://discord.gg/h52nFrV.
Vote for Utopian Witness!