区块链技术研究金马带你定投区块链区块链研究

以太坊token持有情况分析跟踪

2018-05-09  本文已影响33人  freelands
analysis.png

背景

工具

code for token 情况分析跟踪

import requests
from bs4 import BeautifulSoup
from flask import Flask
from flask import request
class TokenHolder:
    
    def __init__(self,rank,address,balance,percentages):
        self.rank = rank
        self.address = address
        self.balance = balance
        self.prcentages = percentages

    def __str__(self):
        return str(self.__dict__)
    
def getSumPercentagesByAddressAndPage(contract_address,page,topN):
    url_prefix = "https://etherscan.io/token/generic-tokenholders2?a="
    url_suffix = "&s=1E%2b28&p="
    request_url = url_prefix + contract_address + url_suffix + str(page);
    print(request_url)
    page = requests.get(request_url)
    soup = BeautifulSoup(page.content, 'html.parser')
    return getTopNSumPercentage(soup,topN)
def getTopNSumPercentage(soup,n):
    total = 0.0
    index = 1
    if n > 50:
        n = 50
    if n < 0:
        n = 50
    for row in soup.find_all('tr')[1:]:
        if index > n:
            break
        percentages = str(row.find_all("td")[3].text)
        b = mapToFloat(percentages)
        total = total + b 
        index = index + 1
    return str(total*10) + "%"


def getRankNDetail(n):
    total = 0.0
    index = 1
    if n > 50:
        n = 50
    if n < 0:
        n = 50
    row = soup.find_all('tr')[n]
    return getRowDetail(row)

def getRowDetail(row):
    rowInfo = row.find_all("td")
    rank = rowInfo[0].text
    address = rowInfo[1].text
    balance = rowInfo[2].text
    percentages = rowInfo[3].text
    return TokenHolder(rank,address,balance,formatPercentages(percentages))
    for td in row.find_all("td"):
        print(td.text)

def formatPercentages(n):
    new =  float(n.replace("%",""))
    return str(new*10)+"%";

def mapToFloat(n):
    return  float(n.replace("%",""))
app = Flask(__name__)
@app.route('/')
def index():
    page = request.args.get('page', default = 1, type = int)
    address = request.args.get('address', default = '0xa4e8c3ec456107ea67d3075bf9e3df3a75823db0', type = str)
    topN = request.args.get('topN', default = 50, type = int)
    return getSumPercentagesByAddressAndPage(address,page,topN);

if __name__ == '__main__':
    app.run(host='127.0.0.1',port=3366)
上一篇 下一篇

猜你喜欢

热点阅读