import json import pandas as pd from pycoingecko import CoinGeckoAPI from rediscluster import RedisCluster # from redis import Redis import ast # d_price = {} # d = {} # r = RedisCluster(host="101.37.79.39", port=6381, decode_responses=True) REDIS_ONLINE = 'denet-chain-prod.y2slbl.clustercfg.memorydb.us-east-1.amazonaws.com' r = RedisCluster(host=REDIS_ONLINE, port=6379, decode_responses=True, skip_full_coverage_check=True) TOKENPRICE = 'TOKENPRICE_' d_chain_name = {'bsc_mainnet':"BSC", 'czz':"CZZ"} KEY_SET_TOKEN_FIXED_PRICE = 'KEY_LIST_TOKEN_FIXED_PRICE' KEY_TOKEN_FIXED_PRICE = 'KEY_TOKEN_FIXED_PRICE_' KEY_SET_TOKEN_NOW_PRICE = 'KEY_LIST_TOKEN_NOW_PRICE' KEY_TOKEN_IDMAP = 'KEY_TOKEN_IDMAP_' def load_file_data(): # Load the xlsx file excel_data = pd.read_excel('token_20220613.xlsx') # Read the values of the file in the dataframe data = pd.DataFrame(excel_data, columns=['token', 'tokenName', 'contract_address', 'chian', 'id'], dtype=str) global r default_address = '0x0000000000000000000000000000000000000000' for row in data.itertuples(): contract_address = getattr(row, 'contract_address') if len(str(contract_address).strip()) < 10: contract_address = str(default_address) chain = getattr(row, 'chian') chain = d_chain_name.get(chain, chain) chain = chain.upper() tid = getattr(row, 'id') if tid.isnumeric(): price = int(tid) if price == 0: price = 1 / 10 ** 11 #固定价格币的集合 r.sadd(KEY_SET_TOKEN_FIXED_PRICE, f'{chain}_{contract_address}') #固定价格的币 r.set(f'{KEY_TOKEN_FIXED_PRICE}{chain}_{contract_address}', price) else: #定时计算价格的币列表 r.sadd(KEY_SET_TOKEN_NOW_PRICE, f'{tid}') #币对应的属性 r.set(f'{KEY_TOKEN_IDMAP}{tid}', str({'contract':contract_address, 'chain':chain})) # print(d_price) print(1) def get_token_price(): global r # coins = r.scard(KEY_SET_TOKEN_NOW_PRICE) d = {} coins = r.smembers(KEY_SET_TOKEN_NOW_PRICE) print(coins) cg = CoinGeckoAPI() coin_prices = cg.get_price(ids=list(coins), vs_currencies='usd') # print(coin_prices) for k, v in coin_prices.items(): price = v['usd'] coin_info = r.get(f'{KEY_TOKEN_IDMAP}{k}') coin_info = ast.literal_eval(coin_info) contract_address = coin_info['contract'] chain = coin_info['chain'] print(chain, contract_address, price) items = d.get(chain,[]) items.append({'contract':contract_address, 'usdPrice':price}) d[chain] = items fixed_price_coins = r.smembers(KEY_SET_TOKEN_FIXED_PRICE) for coin_id in fixed_price_coins: price = r.get(f'{KEY_TOKEN_FIXED_PRICE}{coin_id}') segs = coin_id.split('_') chain = segs[0] contract_address = segs[1] print(chain, contract_address, price) items = d.get(chain, []) items.append({'contract': contract_address, 'usdPrice': price}) d[chain] = items return d def save_redis(d): for k, v in d.items(): r.set(f'{TOKENPRICE}{k}', json.dumps({'tokenPrice':v})) def get_redis(): print(r.get(f'{TOKENPRICE}BSC')) print(r.get(f'{TOKENPRICE}CZZ')) if __name__ == '__main__': # load_file_data() d = get_token_price() save_redis(d) get_redis()