Rony 2 vuotta sitten
vanhempi
commit
a3c618416b
1 muutettua tiedostoa jossa 105 lisäystä ja 0 poistoa
  1. 105 0
      coingecko_price.py

+ 105 - 0
coingecko_price.py

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