Digital Farmer
Digital Farmer

Reputation: 2137

Script returning no results for data collection in an API

When trying to copy the API data to the spreadsheet returns blank, I would like to know where I am failing in the script (I believe it is something simple but I am letting go without seeing it)

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);

}

Return Data API:

enter image description here

Link to Spreadsheet:
https://docs.google.com/spreadsheets/d/1R9Naeuvl7ZequmyNwMOR7z_qKWfynxFa7vb6dq9RysU/edit?usp=sharing

Data I intend to collect:

apelido
clube_id
posicao_id
status_id
media_num

API Link:
https://api.cartolafc.globo.com/atletas/mercado

Upvotes: 1

Views: 113

Answers (1)

Yuri Khristich
Yuri Khristich

Reputation: 14537

It's not quite an answer, just a hint how you could fix it (I hope).

Try this:

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;

or this:

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;

Instead of this:

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;

Since, as you were told, the atletas is an array. You must iterate though it, or take its first element atletas[0], if it's enough.


Try this:

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);

}

But I haven't tested this. Looks like it works.

Upvotes: 2

Related Questions