如何从 Binance API 获取 BTC 在 Binance 上的价格
How To Get BTC Price on Binance from Binance API
我想从 Binance API 获取 Btc 价格,但每次我 运行 脚本时,值 return :null 或 36425 或 SyntaxError:意外令牌 < in JSON 在位置 0。我不知道为什么这是不一致的,请帮助我。这是我的代码
function test () {
var options = {muteHttpExceptions: true};
resBTCPrice = JSON.parse(UrlFetchApp.fetch('https://api.binance.com/api/v3/avgPrice?symbol=BTCUSDT',options).getContentText());
Logger.log(resBTCPrice.price)
}
例如简单的jQuery
var settings = {
"url": "https://api.binance.com/api/v3/avgPrice?symbol=BTCUSDT",
"method": "GET",
"timeout": 0,
};
$.ajax(settings).done(function (response) {
console.log(response);
});
结果
{
"mins": 5,
"price": "36174.68934930"
}
原版JavaScript
fetch('https://api.binance.com/api/v3/avgPrice?symbol=BTCUSDT')
.then(r => r.json()
.then(j => console.log(parseFloat(j.price).toFixed(2))));
输出
36200.65
其他答案提供了在 Google Apps 脚本以外的其他环境中获取数据的正确方法。
在 Apps 脚本环境中,您的代码抛出解析错误,因为远程服务器有时 returns 一个 HTML 页面包含错误 - 不是预期的 JSON.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD><BODY>
<H1>403 ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
Request blocked.
We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
<BR clear="all">
If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
<BR clear="all">
<HR noshade size="1px">
<PRE>
Generated by cloudfront (CloudFront)
Request ID: UyFmlcv2qjKSBvlulcdv06KufF5KCoHm0CpZJu28tE5-aw9KvRquHw==
</PRE>
<ADDRESS>
</ADDRESS>
</BODY></HTML>
对 CloudFront 的请求(缓存来自“真实”Binance API 的结果)来自 Google 个服务器。
根据我自己的经验,这种情况经常发生。很可能有如此多的 Google 用户试图请求 CloudFront 阻止某些 Google 服务器向他们发送大量请求的数据。
解决方法 1:
如果您正在使用 Google Spredsheets 并且您不介意在请求时获得估计价格而不是 Binance 上交易的确切价格,您可以使用 =GOOGLEFINANCE("CURRENCY:BTCUSD")
Google(不是 Binance)提供的 BTC 价格公式。
解决方法 2:
您可以在 Apps 脚本中请求您自己的脚本(部署在 Google 服务器之外)。
resBTCPrice = JSON.parse(UrlFetchApp.fetch('https://example.com/get-btc-price',options).getContentText());
这个 get-btc-price
脚本然后简单地请求原始 Binance API 并打印输出。这样,您可以绕过 CloudFront 对 Google 服务器施加的速率限制(和错误消息)。
我想从 Binance API 获取 Btc 价格,但每次我 运行 脚本时,值 return :null 或 36425 或 SyntaxError:意外令牌 < in JSON 在位置 0。我不知道为什么这是不一致的,请帮助我。这是我的代码
function test () {
var options = {muteHttpExceptions: true};
resBTCPrice = JSON.parse(UrlFetchApp.fetch('https://api.binance.com/api/v3/avgPrice?symbol=BTCUSDT',options).getContentText());
Logger.log(resBTCPrice.price)
}
例如简单的jQuery
var settings = {
"url": "https://api.binance.com/api/v3/avgPrice?symbol=BTCUSDT",
"method": "GET",
"timeout": 0,
};
$.ajax(settings).done(function (response) {
console.log(response);
});
结果
{
"mins": 5,
"price": "36174.68934930"
}
原版JavaScript
fetch('https://api.binance.com/api/v3/avgPrice?symbol=BTCUSDT')
.then(r => r.json()
.then(j => console.log(parseFloat(j.price).toFixed(2))));
输出
36200.65
其他答案提供了在 Google Apps 脚本以外的其他环境中获取数据的正确方法。
在 Apps 脚本环境中,您的代码抛出解析错误,因为远程服务器有时 returns 一个 HTML 页面包含错误 - 不是预期的 JSON.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD><BODY>
<H1>403 ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
Request blocked.
We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
<BR clear="all">
If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
<BR clear="all">
<HR noshade size="1px">
<PRE>
Generated by cloudfront (CloudFront)
Request ID: UyFmlcv2qjKSBvlulcdv06KufF5KCoHm0CpZJu28tE5-aw9KvRquHw==
</PRE>
<ADDRESS>
</ADDRESS>
</BODY></HTML>
对 CloudFront 的请求(缓存来自“真实”Binance API 的结果)来自 Google 个服务器。
根据我自己的经验,这种情况经常发生。很可能有如此多的 Google 用户试图请求 CloudFront 阻止某些 Google 服务器向他们发送大量请求的数据。
解决方法 1:
如果您正在使用 Google Spredsheets 并且您不介意在请求时获得估计价格而不是 Binance 上交易的确切价格,您可以使用 =GOOGLEFINANCE("CURRENCY:BTCUSD")
Google(不是 Binance)提供的 BTC 价格公式。
解决方法 2:
您可以在 Apps 脚本中请求您自己的脚本(部署在 Google 服务器之外)。
resBTCPrice = JSON.parse(UrlFetchApp.fetch('https://example.com/get-btc-price',options).getContentText());
这个 get-btc-price
脚本然后简单地请求原始 Binance API 并打印输出。这样,您可以绕过 CloudFront 对 Google 服务器施加的速率限制(和错误消息)。