Google Apps 脚本 - 联系人 - 查询多个字符串

Google Apps Script - Contacts - Query on multiple strings

我正在编写一个脚本来删除和重新添加大约 100 个联系人。我有 12 个不同的 ContactsApp.getContactsByEmailAddress 搜索条件,启动者知道 运行 需要 30 多秒。有什么方法可以让我只 运行 一次并搜索我的所有条件吗?我找过其他人尝试做同样的事情但没有成功。

下面是我的函数的搜索之一(重复 12 次,将各种搜索词传递给 ContactsApp.getContactsByEmailAddress)。我添加了 try-catch 块,因为脚本在各种删除循环中似乎无缘无故地抛出错误。

非常感谢任何和所有建议。

var apa = ContactsApp.getContactsByEmailAddress('apa.')
  try{
for (var i in apa) {
apa[i].deleteContact()
}
  } catch(e){
      Logger.log(e)
}

使用 Contacts Service,您只能使用一个搜索条件。因此,搜索多个模式的唯一方法是使用每个搜索参数调用一次该方法。值得庆幸的是,您可以使用标准编程实践来最大程度地减少重复代码的数量:

function getContactsWithEmails(emailSearchCriteria) {
  if (!emailSearchCriteria || !emailSearchCriteria.length)
    throw new Error("No search inputs given");

  // Collect the results of each search into a single Array.
  const matches = [];
  emailSearchCriteria.forEach(function (email) {
    var results = ContactsApp.getContactsByEmailAddress(email);
    if (results.length)
      Array.prototype.push.apply(matches, results);
    else
      console.log({message: "No results for search query '" + email + "'", query: email, resultsSoFar: matches});
  });

  return matches;
}

function deleteContacts(arrayOfContacts) {
  if (!arrayOfContacts || !arrayOfContacts.length)
    throw new Error("No contacts to delete");

  arrayOfContacts.forEach(function (contact) {
    ContactsApp.deleteContact(contact);
  });
}

// Our function that uses the above helper methods to do what we want.
function doSomething() {
  // Define all email searches to be performed.
  const emailFragmentsToSearchWith = [
    "email1",
    ...
    "emailN"
  ];
  const matchingContacts = getContactsWithEmails(emailFragmentsToSearchWith);
  if (matchingContacts.length) {
    /** do something with the contacts that matched the search.
     * someMethodThatSavesContacts(matchingContacts);
     * someMethodThatModifiesContacts(matchingContacts);
     * deleteContacts(matchingContacts);
     * ...
     */
  }
  /** do other stuff that doesn't need those contacts. */
}

Google Calendar v3 GData API,如 this SO question, does support multiple query parameters 中所述。但是,没有与此 API 的简单集成 - 您将需要编写适当的 URL 请求并使用 UrlFetchApp.

执行它们

除了 Google 联系人 API,您还可以使用 Google People REST API, specifically the people.connections#list 端点。

这两个 API 都要求您将 Apps 脚本项目与启用了相应 API 的 Google 云项目相关联,并且可能需要您手动设置您的 Apps 脚本项目在其清单文件中需要的范围,以及为您向 API 端点发出的关联 HTTP 请求提供 OAuth2 授权。

参考资料