【问题标题】:Script returning no results for data collection in an API脚本不返回 API 中数据收集的结果
【发布时间】:2020-11-14 18:11:57
【问题描述】:

当尝试将 API 数据复制到电子表格时返回空白,我想知道我在脚本中失败的地方(我相信这很简单,但我没有看到它就放手了)

function CartolaMarket() {
  var url = 'https://api.cartolafc.globo.com/atletas/mercado';
  var response = UrlFetchApp.fetch(url);
  var results = JSON.parse(response.getContentText());
  
  var table = [['apelido','clube_id','posicao_id','status_id','media_num']];
  for (var i = 0; i < results.length; i++) {
    var r = results[i];
    var apelido = r.atletas.apelido;
    var clube_id = r.atletas.clube_id;
    var posicao_id = r.atletas.posicao_id;
    var status_id = r.atletas.status_id;
    var media_num = r.atletas.media_num;
    table.push([apelido,clube_id,posicao_id,status_id,media_num]);
  }

  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(1,1, table.length, table[0].length).setValues(table);

}

返回数据 API:

电子表格链接:
https://docs.google.com/spreadsheets/d/1R9Naeuvl7ZequmyNwMOR7z_qKWfynxFa7vb6dq9RysU/edit?usp=sharing

我打算收集的数据:

apelido
clube_id
posicao_id
status_id
media_num

API 链接:
https://api.cartolafc.globo.com/atletas/mercado

【问题讨论】:

  • 如果您提供数据,我将测试脚本,但不会在该 url 上运行 urlFetchApp
  • 我不想要图像。我希望能够在测试脚本的其余部分时使用这些数据,而且我绝对不会自己输入。
  • 只提供代码格式的文本
  • 也就是说提供JSON。
  • 叹息。当人们开始关注数据结构...

标签: google-apps-script google-sheets


【解决方案1】:

这不是一个完整的答案,只是提示您如何解决它(我希望)。

试试这个:

var r = results[i].atletas[0];
var apelido    = r.apelido;
var clube_id   = r.clube_id;
var posicao_id = r.posicao_id;
var status_id  = r.status_id;
var media_num  = r.media_num;

或者这个:

var r = results[i];
var apelido    = r.atletas[0].apelido;
var clube_id   = r.atletas[0].clube_id;
var posicao_id = r.atletas[0].posicao_id;
var status_id  = r.atletas[0].status_id;
var media_num  = r.atletas[0].media_num;

而不是这个:

var r = results[i];
var apelido = r.atletas.apelido;
var clube_id = r.atletas.clube_id;
var posicao_id = r.atletas.posicao_id;
var status_id = r.atletas.status_id;
var media_num = r.atletas.media_num;

正如您所说,atletas 是一个数组。您必须对其进行迭代,或者获取它的第一个元素 atletas[0],如果它足够的话。


试试这个:

function CartolaMarket() {

  var url = 'https://api.cartolafc.globo.com/atletas/mercado';
  var response = UrlFetchApp.fetch(url);
  var results = JSON.parse(response.getContentText());

  // loop trough 'atletas', not through 'results'
  var atletas = results.atletas; 

  var table = [['apelido','clube_id','posicao_id','status_id','media_num']];
  for (var i = 0; i < atletas.length; i++) {
    var a = atletas[i];
    var apelido    = a.apelido;
    var clube_id   = a.clube_id;
    var posicao_id = a.posicao_id;
    var status_id  = a.status_id;
    var media_num  = a.media_num;
    table.push([apelido,clube_id,posicao_id,status_id,media_num]);
  }

  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(1,1, table.length, table[0].length).setValues(table);

}

但我还没有测试过。看起来它有效。

【讨论】:

    猜你喜欢
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2011-01-12
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    相关资源
    最近更新 更多