
This tutorial is a continuation of Part 1: How To Configure The Steempy CLI Wallet And Upvote An Article With Steem-Python and Part 2: How To Stream And Filter The Blockchain Using Steem-Python, so make sure to read it before starting on this tutorial. Today we will use the knowledge we acquired from those tutorials to create a program that follows a voting trail!
What will I learn
- How to filter the blockchain for votes
- What a vote looks like in
steem-python
- How to following a voting trail
- How to make sure you don't follow votes on comments
Requirements
- Python3.6
steem-python
Difficulty
- Basic
Tutorial
Filtering the blockchain for votes
In part 2 of this tutorial series we learned how to filter the blockchain for comments. This time we will be filtering it for votes instead. As you should recall we used the stream()
function to stream the blockchain. So how can we stream votes instead? To do this we can use the filter_by
argument, which is a list of operations we want to filter the blockchain by. So what kind of operations, besides a comment, can we filter the blockchain by? All operations that we can filter by can be found here, and as you can see "vote" is one of them. This means we can simply stream all votes on the blockchain with the following code
from steem import Steem
from steem.blockchain import Blockchain
steem = Steem()
blockchain = Blockchain()
stream = blockchain.stream(filter_by=["vote"])
while True:
try:
for vote in stream:
# DO SOMETHING
except Exception as error:
continue
What does a vote look like?
Before we can do anything with the votes we are streaming we need to know what a vote actually looks like. An example of a printed vote is given below
{
"voter": "badfatcat",
"author": "claudene",
"permlink": "update-the-new-coins-in-the-philippines-the-p10-pesos-and-p5-pesos-2018-20171231t62751604z",
"weight": 10000,
"_id": "1af544c59ea75a816ed756578105d9befa442224",
"type": "vote",
"timestamp": "2018-01-15 14:32:33",
"block_num": 19001685,
"trx_id": "1d0490ac6aea885b373a5dc0f1bebb22d9f9fd96"
}
which includes some useful information about who the voter is, who the author is and what the permalink of the post he voted on is. To get this information you can simply do
voter = vote["voter"]
author = vote["author"]
permlink = vote["permlink"]
Following the voting trail
So now we can filter the blockchain on votes we want to make sure our program votes on the same posts as some of our favourite users. To do this we can simply create a list of users whose vote we want to follow and then use this to find the correct votes! We already learned how to upvote in part 1 of this tutorial series, so that shouldn't be a problem anymore! Putting this all together results in the following code
voting_trail = ["juliank"]
for vote in stream:
voter = vote["voter"]
author = vote["author"]
permlink = vote["permlink"]
if voter in voting_trail:
print("Voting on {} post that {} voted on!".format(permlink,
voter))
steem.vote(template.format(author, permlink), 100)
which outputs the following
Voting on re-juliank-what-is-beter-than-1-person-jumping-20180115t144010042z post that juliank voted on!
and indeed, I voted on the same post that @juliank upvoted, as seen below

Making sure it's not a comment
To do this we simply need to use what we learned in part 2 of this tutorial series and make sure the post is not a comment with the function is_main_post()
! We can simply change some of the code from above to be the following
post = template.format(author, permlink)
if Post(post).is_main_post():
print("Voting on {} post that {} voted on!".format(permlink,
voter))
steem.vote(post, 100)
Congratulations! You now know how to filter the blockchain for votes and upvote all posts (not comments!) that your favourite users vote on automatically!
Curriculum
Part 1: How To Configure The Steempy CLI Wallet And Upvote An Article With Steem-Python
Part 2: How To Stream And Filter The Blockchain Using Steem-Python
Credits
This tutorial was written by @amosbastian in conjunction with @juliank
The code for this tutorial can be found on GitHub!
Posted on Utopian.io - Rewarding Open Source Contributors