Excel VBA调用coincap API失败求助:对比Binance有效代码排查
解决coincap.io Candles API VBA调用失败问题
第一步:确认正确的API请求URL
首先要把A1单元格的参数转换成coincap API要求的格式。coincap的Candles API端点为https://api.coincap.io/v2/candles,A1里的binance对应参数exchangeId,因此正确的请求URL是:
https://api.coincap.io/v2/candles?exchangeId=binance&interval=m5&baseId=monero"eId=bitcoin&start=1649894400000&end=1649898000000
先在浏览器中打开该URL,确认是否能返回正常JSON数据,排除API本身的问题。
第二步:排查VBA代码的常见问题
1. 参数拼接错误
如果直接将A1内容拼到URL后,会导致第一个参数缺少exchangeId=前缀,正确拼接逻辑如下:
Dim rawParams As String, requestUrl As String rawParams = ThisWorkbook.Sheets("Tabelle1").Range("A1").Value ' 替换第一个参数前缀,修正格式 rawParams = Replace(rawParams, "binance&", "exchangeId=binance&") requestUrl = "https://api.coincap.io/v2/candles?" & rawParams
2. 未启用TLS 1.2
coincap API要求使用TLS 1.2及以上协议,VBA默认可能未启用,需在请求前添加:
' 启用TLS 1.2 http.SetOption 2, 13056 ' 对应TLS 1.2协议设置
3. 请求头缺失
coincap API需要指定Accept头确保返回JSON格式,添加请求头代码:
Dim http As Object Set http = CreateObject("MSXML2.XMLHTTP.6.0") http.Open "GET", requestUrl, False http.setRequestHeader "Accept", "application/json" http.send
4. 响应处理错误
先检查HTTP状态码,再处理响应内容:
If http.Status = 200 Then ' 若安装了VBA-JSON库,可解析JSON提取数据 Dim json As Object Set json = JsonConverter.ParseJson(http.responseText) ' 示例:将第一个蜡烛的收盘价写入J1 ThisWorkbook.Sheets("Tabelle1").Range("J1").Value = json("data")(1)("close") Else ' 输出错误信息便于排查 MsgBox "请求失败,状态码:" & http.Status & vbCrLf & "响应内容:" & http.responseText End If
未安装VBA-JSON库的话,可直接将http.responseText写入单元格,查看返回的错误提示。
5. 时间戳有效性
确认start和end的毫秒级时间戳是否在有效范围,比如不超过当前时间,且时间跨度符合m5(5分钟)的间隔要求(你的时间范围为1小时,包含12个蜡烛,逻辑合理)。
完整测试代码示例
Sub CallCoincapAPI() Dim rawParams As String, requestUrl As String Dim http As Object Dim json As Object ' 获取A1参数并修正格式 rawParams = ThisWorkbook.Sheets("Tabelle1").Range("A1").Value rawParams = Replace(rawParams, "binance&", "exchangeId=binance&") requestUrl = "https://api.coincap.io/v2/candles?" & rawParams ' 创建HTTP请求对象 Set http = CreateObject("MSXML2.XMLHTTP.6.0") ' 启用TLS 1.2 http.SetOption 2, 13056 ' 发送请求 http.Open "GET", requestUrl, False http.setRequestHeader "Accept", "application/json" http.send ' 处理响应 If http.Status = 200 Then On Error Resume Next Set json = JsonConverter.ParseJson(http.responseText) On Error GoTo 0 If Not json Is Nothing Then ThisWorkbook.Sheets("Tabelle1").Range("J1").Value = json("data")(1)("close") Else ThisWorkbook.Sheets("Tabelle1").Range("J1").Value = http.responseText End If Else MsgBox "请求失败:" & http.Status & vbCrLf & http.responseText End If Set http = Nothing Set json = Nothing End Sub
内容的提问来源于stack exchange,提问作者matthias Kloß
相关产品推荐
相关产品推荐

