coinbus代码更新
This commit is contained in:
85
coinbus/btc_price_fetcher.py
Normal file
85
coinbus/btc_price_fetcher.py
Normal file
@@ -0,0 +1,85 @@
|
||||
import time
|
||||
import requests
|
||||
import pymysql
|
||||
from datetime import datetime
|
||||
|
||||
# MySQL配置
|
||||
DB_CONFIG = {
|
||||
"host": "127.0.0.1",
|
||||
"user": "root",
|
||||
"password": "2GS@bPYcgiMyL14A",
|
||||
"database": "btcdb",
|
||||
"port": 4423
|
||||
}
|
||||
|
||||
# 获取当前时间戳
|
||||
def get_current_timestamp():
|
||||
return int(time.time())
|
||||
|
||||
# 获取API1的BTC价格(示例:币安)
|
||||
def get_binance_price():
|
||||
url = "https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT"
|
||||
resp = requests.get(url, timeout=5)
|
||||
resp.raise_for_status()
|
||||
data = resp.json()
|
||||
return float(data["price"])
|
||||
|
||||
# 获取API2的BTC价格(示例:Coinbase)
|
||||
def get_coinbase_price():
|
||||
url = "https://api.coinbase.com/v2/prices/spot?currency=USD"
|
||||
resp = requests.get(url, timeout=5)
|
||||
resp.raise_for_status()
|
||||
data = resp.json()
|
||||
return float(data["data"]["amount"])
|
||||
|
||||
# 更新或插入价格
|
||||
def upsert_price(source, price, timestamp):
|
||||
connection = pymysql.connect(**DB_CONFIG)
|
||||
try:
|
||||
with connection.cursor() as cursor:
|
||||
# 先判断该 source 是否已存在
|
||||
sql_check = "SELECT id FROM btc_realtime_prices WHERE source = %s"
|
||||
cursor.execute(sql_check, (source,))
|
||||
result = cursor.fetchone()
|
||||
|
||||
if result:
|
||||
# 已存在,执行更新
|
||||
sql_update = """
|
||||
UPDATE btc_realtime_prices
|
||||
SET price = %s, timestamp = %s
|
||||
WHERE source = %s
|
||||
"""
|
||||
cursor.execute(sql_update, (price, timestamp, source))
|
||||
else:
|
||||
# 不存在,执行插入
|
||||
sql_insert = """
|
||||
INSERT INTO btc_realtime_prices (timestamp, source, price)
|
||||
VALUES (%s, %s, %s)
|
||||
"""
|
||||
cursor.execute(sql_insert, (timestamp, source, price))
|
||||
connection.commit()
|
||||
finally:
|
||||
connection.close()
|
||||
|
||||
def main():
|
||||
while True:
|
||||
now_ts = get_current_timestamp()
|
||||
|
||||
try:
|
||||
binance_price = get_binance_price()
|
||||
print(f"Binance BTC Price: {binance_price}")
|
||||
upsert_price("binance", binance_price, now_ts)
|
||||
except Exception as e:
|
||||
print(f"获取Binance价格失败: {e}")
|
||||
|
||||
try:
|
||||
coinbase_price = get_coinbase_price()
|
||||
print(f"Coinbase BTC Price: {coinbase_price}")
|
||||
upsert_price("coinbase", coinbase_price, now_ts)
|
||||
except Exception as e:
|
||||
print(f"获取Coinbase价格失败: {e}")
|
||||
|
||||
time.sleep(60) # 每分钟执行一次
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user