Как использовать Google Civic API через несколько адресов с помощью Google Sheets - PullRequest
1 голос
/ 01 октября 2019

Я пытаюсь использовать Google Civic API для запуска списка адресов, чтобы найти имя представителя штата и адрес электронной почты, и поместить эти данные в лист Google.

Я успешно позвонилиспользуя один из адресов, но есть ли способ выполнить вызов API по нескольким адресам и вставить его в новую ячейку?

function findRep() {

  // Call the Google Civic API
  var response = UrlFetchApp.fetch("https://www.googleapis.com/civicinfo/v2/representatives?address={address}&includeOffices=true&levels=administrativeArea1&roles=legislatorLowerBody&roles=legislatorUpperBody&fields=divisions%2CnormalizedInput%2Cofficials&key={mykey}");
  Logger.log(response.getContentText());

  // Add to Google Sheet
  var fact = response.getContentText();
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(sheet.getLastRow() + 1,1).setValue([fact]);
}

1 Ответ

0 голосов
/ 01 октября 2019

Вы можете использовать функцию fetchAll () [1] для отправки всех запросов, которые вам нужны в пакетном режиме. Я получаю массив адресов из листа «Адреса» и вставляю результаты в ту же электронную таблицу, но в лист «Результаты».

function findRep() {

  var ss = SpreadsheetApp.openById("[SPREADSHEET-ID]");
  var targetSheet = ss.getSheetByName("Results")
  var sourceSheet = ss.getSheetByName("Addresses")
  var addresses = sourceSheet.getDataRange().getValues();
  var requests = [];

  //Loop to set up the requests array
  for(var i=1; i<addresses.length; i++) {
    var address = addresses[i];
    var request = 'https://www.googleapis.com/civicinfo/v2/representatives?address=' + address + '&includeOffices=true&levels=administrativeArea1&roles=legislatorLowerBody&roles=legislatorUpperBody&fields=divisions%2CnormalizedInput%2Cofficials&key=[API-KEY]';
    requests.push(request)    
  }

  //Get the responses in batch
  var responses = UrlFetchApp.fetchAll(requests);

  //Iterate the responses object and insert the data  
  for(var i=0; i<responses.length; i++) {
    var response = JSON.parse(responses[i].getContentText());
    var official = response.officials[0].name;
    targetSheet.getRange(targetSheet.getLastRow() + 1,1).setValue(official);
  }
}

В своем коде я использую только первое значение из массива должностных лиц ивведите имя этого человека. Потому что для каждого чиновника нет поля электронной почты.

[1] https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetchAll(Object)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...