我一直在寻找,但没有找到好的解决方案。我正在尝试获取 Coinbase 午夜的 BTC-USD 价格。我最接近的成功是按日期打电话,但我无法通过这种方式比这一天更接近
https://api.coinbase.com/v2/prices/BTC-USD/spot?date=2024-05-07
我已经附上了我的最佳尝试,但每次打电话时都会给我一个不同的号码。
import requests
from datetime import datetime
CRYPTO_PAIR = "BTC-USD"
now = datetime.now()
midnight = now.replace(hour=0, minute=0, second=0, microsecond=0)
formatted_date = midnight.strftime("%Y-%m-%d")
url = f"https://api.coinbase.com/v2/prices/{CRYPTO_PAIR}/spot"
response = requests.get(url, params={"date": formatted_date})
data = response.json()["data"]
price = data["amount"]
print(price)
我也尝试过不同的方式,但这给了我 44,000 的值,而它应该略高于 63,000。
midnight_timestamp = int(time.mktime(time.strptime('00:00:00:2024', '%H:%M:%S:%Y')))
ohlcv = exchange.fetch_ohlcv(symbol, '1d', since=midnight_timestamp * 1000)
midnight_price = ohlcv[0][4] # Closing price at midnight
return midnight_price
您无法通过此 API 获取比 1 天更精细的价格。
据猜测,我建议如果您获得前一天(即运行代码的前一天)的价格,则该价格将是当天的最新值。
正如我的评论中所述,此 API 的日期格式严格为 YYYY-MM-DD
我建议这可能会有所帮助:
import requests
from datetime import datetime, timedelta
def yesterday():
_yesterday = datetime.now() - timedelta(days=1)
return str(_yesterday).split()[0]
params = {
"date": yesterday()
}
with requests.get("https://api.coinbase.com/v2/prices/BTC-USD/spot", params=params) as response:
response.raise_for_status()
amount = float(response.json()["data"]["amount"])
print(f"{amount:,.2f}")