|
@@ -5,6 +5,8 @@ from pycoingecko import CoinGeckoAPI
|
|
|
from rediscluster import RedisCluster
|
|
|
# from redis import Redis
|
|
|
import ast
|
|
|
+import requests
|
|
|
+import traceback
|
|
|
|
|
|
# d_price = {}
|
|
|
# d = {}
|
|
@@ -19,6 +21,7 @@ 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_'
|
|
|
+KEY_TOKEN_IDMAPS = 'KEY_TOKEN_IDMAPS_'
|
|
|
|
|
|
|
|
|
def load_file_data():
|
|
@@ -49,11 +52,32 @@ def load_file_data():
|
|
|
#定时计算价格的币列表
|
|
|
r.sadd(KEY_SET_TOKEN_NOW_PRICE, f'{tid}')
|
|
|
#币对应的属性
|
|
|
+ #TODO 改成列表形式,可能一个id对应多个合约地址
|
|
|
r.set(f'{KEY_TOKEN_IDMAP}{tid}', str({'contract':contract_address, 'chain':chain}))
|
|
|
+ r.sadd(f'{KEY_TOKEN_IDMAPs}{tid}', str({'contract':contract_address, 'chain':chain}))
|
|
|
|
|
|
# print(d_price)
|
|
|
print(1)
|
|
|
|
|
|
+def parse_token(d, coin_info):
|
|
|
+ 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
|
|
|
+
|
|
|
+def get_pancakeswap_price(contract):
|
|
|
+ url = f'https://api.pancakeswap.info/api/v2/tokens/{contract}'
|
|
|
+ price = None
|
|
|
+ try:
|
|
|
+ ret = requests.get(url)
|
|
|
+ price = round(float(ret.json()['data']['price']), 2)
|
|
|
+ print(price)
|
|
|
+ except:
|
|
|
+ traceback.print_exec()
|
|
|
+ return price
|
|
|
|
|
|
def get_token_price():
|
|
|
global r
|
|
@@ -63,10 +87,16 @@ def get_token_price():
|
|
|
print(coins)
|
|
|
cg = CoinGeckoAPI()
|
|
|
coin_prices = cg.get_price(ids=list(coins), vs_currencies='usd')
|
|
|
- # print(coin_prices)
|
|
|
+ print(coin_prices)
|
|
|
for k, v in coin_prices.items():
|
|
|
+ if v.get('usd') is None:
|
|
|
+ continue
|
|
|
+
|
|
|
price = v['usd']
|
|
|
coin_info = r.get(f'{KEY_TOKEN_IDMAP}{k}')
|
|
|
+ print(coin_info)
|
|
|
+ if coin_info is None:
|
|
|
+ continue
|
|
|
coin_info = ast.literal_eval(coin_info)
|
|
|
contract_address = coin_info['contract']
|
|
|
chain = coin_info['chain']
|
|
@@ -81,6 +111,10 @@ def get_token_price():
|
|
|
segs = coin_id.split('_')
|
|
|
chain = segs[0]
|
|
|
contract_address = segs[1]
|
|
|
+ price_swap = get_pancakeswap_price(contract_address)
|
|
|
+ if price_swap:
|
|
|
+ price = price_swap
|
|
|
+
|
|
|
print(chain, contract_address, price)
|
|
|
items = d.get(chain, [])
|
|
|
items.append({'contract': contract_address, 'usdPrice': price})
|
|
@@ -88,6 +122,7 @@ def get_token_price():
|
|
|
|
|
|
return d
|
|
|
|
|
|
+
|
|
|
def save_redis(d):
|
|
|
for k, v in d.items():
|
|
|
r.set(f'{TOKENPRICE}{k}', json.dumps({'tokenPrice':v}))
|
|
@@ -100,6 +135,9 @@ def get_redis():
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
# load_file_data()
|
|
|
+
|
|
|
d = get_token_price()
|
|
|
save_redis(d)
|
|
|
get_redis()
|
|
|
+
|
|
|
+ # get_pancakeswap_price('0x25102c5af2d4faa83ddbd36d9f6af5d9c2b84093')
|