Steem Developer logo

Steem Developer Portal

PY: Account Reputation

Would you like to know how to interpret account reputation to more human readable format, then this tutorial is for you.

Full, runnable src of Account Reputation can be downloaded as part of the PY tutorials repository.

Intro

Account reputation is long integer string which requires special function or formula to convert in more human readable format. We will define that function in this tutorial and show how to fetch and interpret reputation.

Steps

  1. App setup - Library install and import
  2. Account list - List of predefined accouns to select from
  3. Reputation interpret - Reputation converting function
  4. Print output - Print results in output

1. App setup

In this tutorial we will use 4 packages, pick - helps us to select filter interactively. steem - steem-python library, interaction with Blockchain. pprint - print results in better format and math to perform some math calculations.

First we import all libraries and initialize Steem class

    import pprint
    import math
    from pick import pick

    # initialize Steem class
    from steem import Steem

    s = Steem()

2. Account list

Next we will show predefined account list to select and setup pick properly.

    title = 'Please choose account: '
    options = ["steemitblog","esteemapp","busy.org","demo"]

    # get index and selected filter name
    option, index = pick(options, title)

    # option is printed as reference
    pprint.pprint("Selected: "+option)

This will show us list of accounts to select in terminal/command prompt. And after selection we will fetch account details from Blockchain with get_accounts function.

    user = s.get_accounts([option])

3. Reputation interpret

Next we will define reputation interpreter:

def rep_log10(rep):
    """Convert raw steemd rep into a UI-ready value centered at 25."""
    def log10(string):
        leading_digits = int(string[0:4])
        log = math.log10(leading_digits) + 0.00000001
        num = len(string) - 1
        return num + (log - int(log))

    rep = str(rep)
    if rep == "0":
        return 25

    sign = -1 if rep[0] == '-' else 1
    if sign < 0:
        rep = rep[1:]

    out = log10(rep)
    out = max(out - 9, 0) * sign  # @ -9, $1 earned is approx magnitude 1
    out = (out * 9) + 25          # 9 points per magnitude. center at 25
    return round(out, 2)

Above function will cover all edge cases, for example, if account is new their reputation is 0 hence, default starting reputation will be 25. If reputation negative that’s also considered.

4. Print output

After we have fetched account details from Blockchain, all we have to do is to use defined function above to interpret account’s reputation field into meaningful number.

    # print specified account's reputation
    pprint.pprint(rep_log10(user[0]['reputation']))

That’s it. We have successfully interpreted reputation.

To Run the tutorial

  1. review dev requirements
  2. clone this repo
  3. cd tutorials/20_account_reputation
  4. pip install -r requirements.txt
  5. python index.py
  6. After a few moments, you should see output in terminal/command prompt screen.