Part 4: How To Follow A Voting Trail Using Steem-Python

steem-python.png

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

upvote_comment.png

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

H2
H3
H4
Upload from PC
Video gallery
3 columns
2 columns
1 column
7 Comments