dash-whales-spaces / utils /extract_tokens_balances.py
mohcineelharras's picture
graph done
5901908
import os
import json
import requests
import pandas as pd
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
ETHERSCAN_API_KEY = os.getenv("API_KEY_ETHERSCAN")
TOKENS_TO_WATCH = "ressources/dict_tokens_addr.json" # Path to the file with tokens to watch
INFLUENCERS_FILE = "ressources/dict_influencers_addr.json" # Path to the file with influencers' addresses
def fetch_token_balance(address, token_contract):
url = f"https://api.etherscan.io/api?module=account&action=tokenbalance&contractaddress={token_contract}&address={address}&tag=latest&apikey={ETHERSCAN_API_KEY}"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
if data["status"] == "1":
balance = int(data["result"])
return balance
else:
print(f"Error fetching token balance: {data.get('message')}")
else:
print(f"Error: HTTP {response.status_code}")
return 0
def main():
# Load tokens and influencers
with open(TOKENS_TO_WATCH, "r") as file:
tokens_to_watch = json.load(file)
with open(INFLUENCERS_FILE, "r") as file:
influencers = json.load(file)
balances = []
for name, address in influencers.items():
for token_name, token_contract in tokens_to_watch.items():
balance = fetch_token_balance(address, token_contract)
if balance > 0: # Optionally check if balance is above a certain threshold
balances.append({
"Influencer": name,
"Token": token_name,
"Balance": balance / (10 ** 18) # Convert from Wei
})
# Save to CSV
df = pd.DataFrame(balances)
df.to_csv("output/influencers_token_balances.csv", index=False)
if __name__ == "__main__":
main()