Доступ к сохраненным значениям в Google Scripts из таблицы Google - PullRequest
0 голосов
/ 31 мая 2018

Я использую скрипт Google для опроса API CoinMarketCap через электронную таблицу Google, чтобы получить последние цены, рыночные ограничения, расходные материалы и т. Д. Для ряда крипто-монет.

Моя электронная таблица выглядит следующим образом ...

Ticker | Coin | Price | MarketCap | Supply etc
BTC | Bitcoin | 9,000 | 130,000,000,000 | 20,000,000
ETH | Ethereum | 700 | 60,000,000,000 | 80,000,000,000
etc

Затем я нажимаю кнопку обновления, и каждая ячейка, которая нуждается в обновлении, выполняет (одновременно) вызов повторяющихся функций (с тикером / coinID в качестве параметра, идентифицирующего строку) следующим образом ...

function getMarketCap(coinID) {
  var url1 = 'https://api.coinmarketcap.com/v1/ticker/';
  var full_url = url1 + coinID;
  var response = UrlFetchApp.fetch(full_url);
  var data = JSON.parse(response.getContentText());
  return Number(data[0]['market_cap_usd']);
}
function getTotalSupply(coinID) {
  //repetitive code for api call
  return Number(data[0]['total_supply']);
}
//about 6 more similar functions making same call but returning different data

Помимо неэлегического, проблема в том, что API CoinMarketCap имеет предел где-то около 30 запросов в минуту, и хотя я запрашиваю менее 30 монет, умножая их на каждый столбец, япревышение лимита.

Я знаю, что это супер базовый вопрос, но я новичок в вызове сценариев Google через электронную таблицу и изо всех сил пытаюсь понять, как в теории я мог бы сделать один вызов API для каждой монеты,и сохраните отдельные столбцы / атрибуты (например, цену, marketCap, снабжение и т. д.), к которым будут обращаться другие ячейки.Или, возможно, можно «подтолкнуть» обновления ячеек таблицы для всей строки из скрипта Google после первого вызова строки?

1 Ответ

0 голосов
/ 31 мая 2018

Ypu может просто получить все одним вызовом, а затем выбрать нужные данные из символов в столбце A. Запустите их из пользовательского меню, например:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Current Prices')
      .addItem('Run', 'getMarketCap')
      .addToUi();
}
function getMarketCap() {
  var ss=SpreadsheetApp.getActiveSpreadsheet()
  var s=ss.getSheetByName("Sheet1")//get Sheet1
  var lr=s.getLastRow()
  var url1 = 'https://api.coinmarketcap.com/v1/ticker/';// get all data
  var response = UrlFetchApp.fetch(url1);
  var data = JSON.parse(response.getContentText());
  var sym=s.getRange(2,1,lr,1).getValues()//get list of symbols in col A
  for(var i=0;i<sym.length;i++){//for eacch symbol in col A
    for(var j=0;j<data.length;j++){
       if(sym[i][0]==data[j]['symbol']){//find matching symbol in data
          s.getRange(i+2,2,1,1).setValue(data[j]['name'])
          s.getRange(i+2,3,1,1).setValue(data[j]['price_usd'])
          s.getRange(i+2,4,1,1).setValue(data[j][['market_cap_usd']])
          s.getRange(i+2,5,1,1).setValue(data[j]['total_supply'])
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...