85 lines
2.6 KiB
Python
85 lines
2.6 KiB
Python
|
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()
|