Сценарий Google Контакты работает медленно - PullRequest
0 голосов
/ 24 февраля 2020

Моя цель очень проста: добавить контакты в Google Contacts App из диапазона данных и пометить их как «Сотрудники» и «Мои контакты», чтобы я мог использовать их на своем телефоне. Ниже приведены рабочие коды, которые я просто придумал.

function myFunction() {

  //deletecontacts();
  var gn=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Leader Directory (Read only)');
  var systemcon=ContactsApp.getContactGroup('System Group: My Contacts');
  var systemmy=ContactsApp.getContactGroup('System Group: Coworkers');
  var valuerng=gn.getRange("A2:H138").getValues();

  for (var i=0;i<=gn.getLastRow()-2;i++){
    var newcontact=ContactsApp.createContact(valuerng[i][0],'' , valuerng[i][1]);
    newcontact.addPhone('MOBILE_PHONE',valuerng[i][2]);
    newcontact.addAddress('Chapel', valuerng[i][6]);
    newcontact.addAddress('Mailing', valuerng[i][4]);
    newcontact.addCompany(valuerng[i][7],'');
    systemmy.addContact(newcontact);
    systemcon.addContact(newcontact)
          }

      }

Может ли кто-нибудь изменить их, чтобы они работали быстрее? Если я просто загружу весь CSV в приложение Контакты, это займет всего 3 секунды, но мои коды займет около 3 минут Другой вопрос заключается в том, почему коды для добавления вновь созданных контактов могут выполняться только в конце или чаще, чем нет,

 systemmy.addContact(newcontact);
    systemcon.addContact(newcontact)

вернет ноль при случайных контактах и ​​выйдет из функции, если они были выполнены сразу после новый контакт создан?

1 Ответ

3 голосов
/ 27 февраля 2020

Причина, по которой ваш скрипт медленный, заключается в том, что каждая инструкция в вашем for l oop фактически выполняет запрос update, что приводит к четырем запросам update и одному запросу post (при создании контакта) .

К сожалению, нет способа уменьшить это до одного update запроса, так как все методы, которые вы использовали - addPhone(), addAddress(), addCompany() - ожидают Contact, но возвращают поэтому другой тип, что делает невозможным называть их один за другим.

Поскольку этот вариант не подходит для вас, вы можете взглянуть на People API.

* 1016. * Вы можете отправить этот POST запрос:
POST https://people.googleapis.com/v1/people:createContact

Со следующим телом запроса:

{
  "names": [],
  "emailAddresses": [],
  "phoneNumbers": [],
  "addresses": [],
  "organizations": []
}

Ссылка

...