Google 通讯录脚本慢
Google Contacts script slow
我的目标很简单,就是从数据范围将联系人添加到 Google 联系人应用程序并将它们标记为 "Coworkers' and "我的联系人”,这样我就可以在我的 phone.下面是我刚刚想出的工作代码
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)
如果在创建新联系人后立即执行它们,是否会 return 随机联系人为 null 并退出该功能?
你的脚本之所以慢是因为你的 for
循环中的每条指令实际上都在发出一个 update
请求,导致四个 update
请求和一个 post
请求(创建联系人时)。
不幸的是,由于您使用的所有方法 - addPhone()
、addAddress()
、addCompany()
- expect,无法将其减少到只有一个 update
请求Contact
但 return 是不同的类型,因此,不可能一个接一个地调用它们。
由于这对您来说不是一个可行的选择,您可能需要查看 People API
。
您可以发送此 POST
请求:
POST https://people.googleapis.com/v1/people:createContact
具有以下请求正文:
{
"names": [],
"emailAddresses": [],
"phoneNumbers": [],
"addresses": [],
"organizations": []
}
参考
我的目标很简单,就是从数据范围将联系人添加到 Google 联系人应用程序并将它们标记为 "Coworkers' and "我的联系人”,这样我就可以在我的 phone.下面是我刚刚想出的工作代码
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)
如果在创建新联系人后立即执行它们,是否会 return 随机联系人为 null 并退出该功能?
你的脚本之所以慢是因为你的 for
循环中的每条指令实际上都在发出一个 update
请求,导致四个 update
请求和一个 post
请求(创建联系人时)。
不幸的是,由于您使用的所有方法 - addPhone()
、addAddress()
、addCompany()
- expect,无法将其减少到只有一个 update
请求Contact
但 return 是不同的类型,因此,不可能一个接一个地调用它们。
由于这对您来说不是一个可行的选择,您可能需要查看 People API
。
您可以发送此 POST
请求:
POST https://people.googleapis.com/v1/people:createContact
具有以下请求正文:
{
"names": [],
"emailAddresses": [],
"phoneNumbers": [],
"addresses": [],
"organizations": []
}
参考