123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- 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()
|