Значения в столбцах и строках - PullRequest
0 голосов
/ 23 февраля 2019

Я использую этот скрипт в Google Sheets для извлечения данных из API coinmarketcap.Я добавил цикл (coins.forEach), чтобы получить все данные нужных мне монет всего за один вызов API (ограниченное количество кредитов).Но после каждой петли / монеты она продолжает опускаться в столбце, и я хотел бы использовать новый столбец для каждой монеты.Как я могу сделать это, не вызывая функцию (и API) снова для каждой монеты?Надеюсь, я дал понять, что не могу вспомнить, откуда у меня оригинальный сценарий

function cmc(){
  var response = CMCFetch();
  if (response.status === true) { response.data = response.datos; 
      }  
  return response.data;}

function xCMCFetch() {
  
    var uri = "https://sandbox-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?CMC_PRO_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

      cache     = CacheService.getScriptCache(),
      response  = { status: true, name: "Unknown", USD: 0, BTC: 0, datos: [], error:null },
      obj_array = null;
      obj_array = JSON.parse(cache.get('firstX'));
  if (obj_array === null ) 
  { try { 
    obj_array = JSON.parse(UrlFetchApp.fetch(uri).getContentText());  
    cache.put('firstX', JSON.stringify(obj_array), 20); }   // ** cache for 20 sec
    catch (e) { response.status = false; response.error = e }  }   
   
  var coins = ["btc","eth","ltc","bch"]; 
  
  if (response.status === true) { 
    coins.forEach(function(symb){
   for (r in obj_array.data){
      if (obj_array.data[r].symbol == symb.toUpperCase()) { 
        response.datos.push(
          obj_array.data[r].total_supply,          
          obj_array.data[r].cmc_rank,
          obj_array.data[r].quote.USD.market_cap,
          obj_array.data[r].quote.USD.volume_24h,
          parseFloat(obj_array.data[r].quote.USD.percent_change_7d), 
          parseFloat(obj_array.data[r].quote.USD.percent_change_24h), 
          parseFloat(obj_array.data[r].quote.USD.percent_change_1h),
          obj_array.data[r].quote.USD.price
           );
        break;  }   } })}
  return response;
}

1 Ответ

0 голосов
/ 23 февраля 2019

Полагаю, проблема заключается в for (r in obj_array.data).Это означает, что вы перебираете свойства каждого объекта.Таким образом, вы не можете позвонить obj_array.data[r].symbol.Замените его на for (int r = 0; r < obj_array.data.length; r++)

...