Browse Source

add pancakeswap

Rony 2 năm trước cách đây
mục cha
commit
5b3d1a0476
3 tập tin đã thay đổi với 39 bổ sung1 xóa
  1. 39 1
      coingecko_price.py
  2. 0 0
      get_history_data.py
  3. 0 0
      test.py

+ 39 - 1
coingecko_price.py

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

+ 0 - 0
get_history_data.py


+ 0 - 0
test.py