将硬币市值 API 连接到 Google Sheet

Connect Coin Market Cap API to Google Sheet

我想制作一个脚本来在 Google 电子表格中更新加密货币价格。我不想使用 API 连接器,而是自己端到端地做。我在 CMC 博客上找到了一个博客 post,但它不起作用,我得到一个错误。

代码如下:

function ohlc_price() {
var sh1=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“IDs″); 
var requestOptions = {method: ‘GET’, uri: ‘https://pro-api.coinmarketcap.com/v1/cryptocurrency/ohlcv/historical’, qs: {‘id’: ‘1’,’time_period’:’daily’,’interval’:’2d’, ‘start_date’: ‘2019-08-15’, ‘end_date’: ‘2019-08-18’}, 
headers: {‘X-CMC_PRO_API_KEY’: ‘MY APY KEY IS HERE’}, 
json: true, gzip: true};
var url=”https://pro-api.coinmarketcap.com/v1/cryptocurrency/ohlcv/historical?id=1&time_start=2019-06-01&interval=weekly”; 
var result= UrlFetchApp.fetch(url, requestOptions); 
var txt= result.getContentText();
var d=JSON.parse(txt); for (var i=0; i<10;i++) {sh1.getRange(i+2, 1).setValue(d.data.quotes[i].quote.USD.timestamp); sh1.getRange(i+2, 2).setValue(d.data.quotes[i].quote.USD.low); sh1.getRange(i+2, 3).setValue(d.data.quotes[i].quote.USD.open); sh1.getRange(i+2, 4).setValue(d.data.quotes[i].quote.USD.close); sh1.getRange(i+2, 5).setValue(d.data.quotes[i].quote.USD.high);}

这是我收到的错误消息: SyntaxError:无效或意外的令牌(ligne:2,fichier:Coin price.gs)

我尝试按照 CMC 说明进行操作,但没有任何效果...

有人可以向我解释什么不起作用以及为什么吗?

感谢

我预计会缺少引号或撇号,尤其是在 uri/url 之后。试试这个并完成:

function ohlc_price() {
  var sh1=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('IDs'); 
  var requestOptions = {
    'method' : 'GET', 
    'uri': 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/ohlcv/historical&#8217', 
    'qs': {'id': '1',
      'time_period':'daily',
      'interval':'2d', 
      'start_date': '2019-08-15', 
      'end_date': '2019-08-18'
    }, 
    'headers' : {'X-CMC_PRO_API_KEY': 'MY APY KEY IS HERE'}, 
    'json': true, 
    'gzip': true};
  var url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/ohlcv/historical?id=1&time_start=2019-06-01&interval=weekly&#8221'; 
  var result = UrlFetchApp.fetch(url, requestOptions); 
  var txt= result.getContentText();
}

修改点:

  • UrlFetchApp的参数中没有uriqs的属性
  • 在您的 URL 中,id=1&time_start=2019-06-01&interval=weekly 用作查询参数。但是在你的qs中,使用了{‘id’: ‘1’,’time_period’:’daily’,’interval’:’2d’, ‘start_date’: ‘2019-08-15’, ‘end_date’: ‘2019-08-18’}。很遗憾,我不明白您想使用哪个。
    • 在此修改中,使用了interval=weeklytime_start=2019-06-01time_end=2019-08-18。当您想使用其他值时,请修改脚本。
  • 在您的脚本中,for (var i = 0; i < 10; i++) {} 用于 var d = JSON.parse(txt)。在这种情况下,当数据长度小于10时,就会出错。

当以上几点反映到你的脚本中,就会变成下面这样。

修改后的脚本:

function ohlc_price() {
  // This is from https://gist.github.com/tanaikech/70503e0ea6998083fcb05c6d2a857107
  String.prototype.addQuery = function (obj) {
    return this + Object.keys(obj).reduce(function (p, e, i) {
      return p + (i == 0 ? "?" : "&") +
        (Array.isArray(obj[e]) ? obj[e].reduce(function (str, f, j) {
          return str + e + "=" + encodeURIComponent(f) + (j != obj[e].length - 1 ? "&" : "")
        }, "") : e + "=" + encodeURIComponent(obj[e]));
    }, "");
  }

  var url = "https://pro-api.coinmarketcap.com/v1/cryptocurrency/ohlcv/historical";
  var query = { 'id': '1', 'time_period': 'daily', 'interval': 'weekly', 'time_start': '2019-06-01', 'time_end': '2019-08-18' };
  var endpoint = url.addQuery(query);
  var requestOptions = {
    method: 'GET',
    headers: { 'X-CMC_PRO_API_KEY': 'MY APY KEY IS HERE' },
  };
  var result = UrlFetchApp.fetch(endpoint, requestOptions);
  var txt = result.getContentText();
  var d = JSON.parse(txt);

  var sh1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("IDs");
  var values = d.data.quotes.map(({ quote: { USD } }) => [USD.timestamp, USD.low, USD.open, USD.close, USD.high]);
  sh1.getRange(2, 1, values.length, values[0].length).setValues(values);
}

注:

  • 在这个答案中,假设您的 X-CMC_PRO_API_KEY 值是有效值。请注意这一点。

参考文献: