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