如何从 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 服务器施加的速率限制(和错误消息)。