coinbase API允许您在向https://api.coinbase.com/v2/prices/BTC-USD/spot发出请求时指定日期。 API声明日期应格式化为YYYY-MM-DD。是否有可能在特定时间内收到历史价格(例如:1小时前的价格)?我在他们的ios应用程序上看到了这一点,但似乎他们可能没有通过API提供这些数据。
感谢您的帮助!
答案 0 :(得分:1)
我最近对此做了一些研究,我认为@gavinstevens的答案是正确的,下面描述的实验证实了这一点。
import dt as dt
import requests
today=dt.date.today()
today_dt=dt.datetime.now()
earlier_dt=today_dt-dt.timedelta(hours=6)
print(today)
'2017-03-31'
print(today_dt.strftime("%Y-%m-%d %H:%M:%S"))
'2017-03-31 11:57:58'
print(earlier_dt.strftime("%Y-%m-%d %H:%M:%S"))
'2017-03-31 05:57:58'
#build dicts to pass in the api requests
dict_today={'date':today.strftime("%Y-%m-%d")}
dict_dt_now={'date':today_dt.strftime("%Y-%m-%d %H:%M:%S")}
dict_dt_earler={'date': earlier_dt.strftime("%Y-%m-%d %H:%M:%S")}
r=requests.get('https://api.coinbase.com/v2/prices/BTC-USD/spot/',params=dict_today)
print(r.text)
{"data":{"amount":"1082.42","currency":"USD"},...}
r=requests.get('https://api.coinbase.com/v2/prices/BTC-USD/spot/',params=dict_dt_now)
print(r.text)
{"data":{"amount":"1078.45","currency":"USD"},...}
r=requests.get('https://api.coinbase.com/v2/prices/BTC-USD/spot/',params=dict_dt_earler)
print(r.text)
{"data":{"amount":"1078.03","currency":"USD"},...}
从上面的代码剪辑可以看出,api为每个传递的日期时间返回了不同的价格。接下来回过头来确保这个模型能够支持所有历史数据...
way_earlier_dt=today_dt-dt.timedelta(days=365)
dict_way_earlier={'date': way_earlier_dt.strftime("%Y-%m-%d %H:%M:%S")}
r=requests.get('https://api.coinbase.com/v2/prices/BTC-USD/spot/',params=dict_way_earlier)
print(r.text)
{"data":{"amount":"415.23","currency":"USD"},...}
确实,这会为该日期时间返回合理的价格。减去六个小时作为最终检查...
way_earlier_dt=way_earlier_dt-dt.timedelta(hours=6)
dict_way_earlier={'date': way_earlier_dt.strftime("%Y-%m-%d %H:%M:%S")}
r=requests.get('https://api.coinbase.com/v2/prices/BTC-USD/spot/',params=dict_way_earlier)
print(r.text)
{"data":{"amount":"415.23","currency":"USD"},...}
嗯,哦!价格与之前的要求相同。看起来我们可能有故障。
让我们进行“午夜漫步”测试,看看日期时间历史记录请求是否仅对当天有效。我们可以从“today_dt”值开始,减去12,然后减去16小时......
yesterday_dt_12=today_dt-dt.timedelta(hours=12)
yesterday_dt_16=today_dt-dt.timedelta(hours=16)
print(yesterday_dt_12.strftime("%Y-%m-%d %H:%M:%S"))
'2017-03-30 23:57:58'
print(yesterday_dt_16.strftime("%Y-%m-%d %H:%M:%S"))
'2017-03-30 19:57:58'
dict_yest_12={'date':yesterday_dt_12.strftime("%Y-%m-%d %H:%M:%S")}
dict_yest_16={'date':yesterday_dt_16.strftime("%Y-%m-%d %H:%M:%S")}
r=requests.get('https://api.coinbase.com/v2/prices/BTC-USD/spot/',params=dict_yest_12)
print(r.text)
{"data":{"amount":"1039.37","currency":"USD"},..}
r=requests.get('https://api.coinbase.com/v2/prices/BTC-USD/spot/',params=dict_yest_16)
print(r.text)
{"data":{"amount":"1039.37","currency":"USD"},...}
唉,我们有答案。我们无法使用coinbase api spot请求获得历史BTC现货价格。我做了一些更多的摆弄,并确认初始实验中的价格差异是当前BTC现货价格的波动,即api正在回归。
悲伤!
答案 1 :(得分:0)
令人怀疑,现货价格通常意味着价格"现在"。它确实说你可以使用YYYY-MM-DD(UTC),但是没有指定时间。
查看这个类似的主题: Get bitcoin historical data
答案 2 :(得分:0)