|  | @@ -0,0 +1,105 @@
 | 
											
												
													
														|  | 
 |  | +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()
 |