Как связать Google Cloud Platform с Google Sheet Script - PullRequest
0 голосов
/ 04 ноября 2018

Как связать код Google Sheet с моей платной учетной записью Cloud Platform с помощью API-ключа или OAuth2. У меня есть простой скрипт приложения, связанный с простым рабочим листом, который отлично работает, пока я использую его в «свободном» режиме. Но мне не удалось заставить мой API учетной записи Google Cloud Platform работать с моим рабочим листом. Может кто-нибудь помочь мне с этим или сказать мне, что я делаю не так?

Что делает лист: Возьмите «От адреса», «До адреса» и дату-время из первых трех столбцов подряд. Затем я вызываю maps.newDirectionFinder() с этими тремя входными параметрами. Затем я обновляю три других столбца в той же строке с distance.value, duration.value и duration_in_traffic.value.

Ниже мой код. При использовании «Maps.setAuthentication(<client-id>, <secret-key>)" я получаю сообщение об ошибке« Действие не разрешено »в строке, где вызывается Maps.newDirectionFinder().

Примечание. В число моих включенных API входят: «API направлений», «API Google Sheets», «API матрицы расстояний», «API Javascript Maps» и «API дорог».

Код (со снятыми ключами):

/********************************************************************************
 * Library of Direction Finding and Route Optimization routines from Google Maps
 * Documentation of the Google Maps directionFinder functionality is here: 
 *       https://developers.google.com/apps-script/reference/maps/direction-finder
********************************************************************************/

// To do: 
// API Key (11/04/2018): <API-key>

/********************************************************************************
 * calcDistanceTable:
********************************************************************************/
function calcDistanceTable() {

  // var debug;
  var mysheet = SpreadsheetApp.getActiveSheet();
  var fromLocation = "test string";
  var toLocation = "test string";
  var lastRow = mysheet.getLastRow() + 1;
  var directions;
  var stringDate = "11/03/2018 22:00";//RR
  var customDate = new Date('Thu Nov 02 2018 17:29:34 GMT-0700 (PDT)');//RR 

  var row = 1; 

  //AuthenticateMaps();//RR

  // this next line doesn't work: there is no error message, but my GCP API Console shows no requests -- it seems to be ignored
  // https://maps.googleapis.com/maps/api/staticmap?center=40.714%2c%20-73.998&zoom=12&size=400x400&key=<API-key>

  // this next line failed with an error:  TypeError: Attribute name "async" associated with an element type "script" must be followed by the ' = ' character. (line 32, file "getDistTime")
  // <script async defer src="https://maps.googleapis.com/maps/api/js?key=<API-key>&callback=initMap" type="text/javascript"></script>

  // this failed on the line where I call "directions = Maps.newDirectionFinder()" with this error message:  Action not allowed (line 50, file "Code") 
  // Maps.setAuthentication("<Client-ID>","<Secret-key>");


  do {    
    debug = mysheet.getRange(row, 1).getValues()[0][0];

    // check column 5 ('E') to see if this has been run already for this row
    if(mysheet.getRange(row, 5).getValues()[0][0] <= 0){ 

      fromLocation = mysheet.getRange(row, 1).getValues()[0][0];
      toLocation = mysheet.getRange(row, 2).getValues()[0][0];
      stringDate=mysheet.getRange(row, 4).getValues()[0][0];//RR
      customDate=new Date(stringDate);//RR
      Logger.log("row: " + row + " From: " + fromLocation + " To: " + toLocation);

     directions = Maps.newDirectionFinder()
        .setOrigin(fromLocation)
        .setDestination(toLocation)
        .setDepart(customDate)//RR
        .setMode(Maps.DirectionFinder.Mode.DRIVING)
        //.key=<API-key>      // this didn't work:  ReferenceError: "xxxxxxx" is not defined. (line xx, file "Code")
        //.key="<API-key>"  // this didn't work:  TypeError: Cannot find function getDirections in object <API-key>
        .getDirections();

      mysheet.getRange(row,6).setValue(directions.routes[0].legs[0].distance.value / 1000 * 0.621371);
      mysheet.getRange(row,7).setValue(directions.routes[0].legs[0].duration.value / 60);
      mysheet.getRange(row,8).setValue(directions.routes[0].legs[0].duration_in_traffic.value / 60);

      temp = directions;  // here to set a breakpoint to pause during debug 

    } 
    row++;
  } while (row < lastRow); 
}
...