【发布时间】:2021-11-11 02:45:49
【问题描述】:
我正在按照 Google 的要求从 Contacts API 过渡到 People API。我对网上缺少示例感到非常惊讶,但我现在可以创建、删除和修改/更新(感谢@Tanaike 对 Omar F 的回复:Cannot update contactusgin People api using Google Apps Script)一个联系人,通过迭代删除和修改通过 People.People.Connections.List(),最多 100 个结果(来自此处的 Appscript 示例:https://developers.google.com/people/quickstart/apps-script)。
但我有大约 12,000 个联系人,需要使用(我假设)People.People.searchContacts()。我还没有找到任何 Appscript 示例,文档都是 Java 的,我不知道如何翻译成 Appscript:
...
// Send search request
SearchResponse response = peopleService.people().searchContacts()
.setQuery("query")
.setReadMask("names,emailAddresses")
.execute();
或同样没用的“协议”(对我来说 - 我试过了!):
...
// Send search request after several seconds
GET /v1/people:searchContacts?query=query&readMask=names,emailAddresses HTTP/1.1
Host: people.googleapis.com
我迄今为止最好的猜测是使用 Google Drive Query Parameter 样式,因为此页面中的 People API 链接 (https://developers.google.com/people/v1/query-parameters) 似乎没有帮助:
let searchResp = People.People.searchContacts(
"phoneNumbers contains 5632",
{ readMask: "names,phoneNumbers,addresses,emailAddresses" }
);
let personBob = searchResp.results.find(p =>
p.names[0].displayName.includes("Bob Q22222")
);
因此,在花费了令人尴尬的时间到达这一点之后,我认输了,希望有人可以举例说明通过 People.People.searchContacts() 获取 searchResponse 以显示什么
- 搜索查询看起来像和
- readMask 是什么样的。
我知道 searchResponse.results 只是一个 People 数组,从那里应该没问题。
谢谢你,我希望这不是太荒谬(对于我们的小夫妻生意感到困惑的非程序员)。 ~
编辑:差不多了
根据 Rafi 的回复修改,这适用于表单附加的 Appscript 文件,这是我想要的但它没有检索所有结果,请参见下文):
function run() {
let query = "Q12755";
let found = People.People.searchContacts({
"query": query,
"readMask": "names,addresses,emailAddresses,phoneNumbers"
});
if (found.results) {
for (i = 0; i < found.results.length; i++) {
let thisResult = found.results[i];
Logger.log(`Result ${i}: ${thisResult.person.names[0].displayName}`);
}
} else {
Logger.log(`No results for ${query}`);
}
}
...但是,它并没有获取所有结果。
知道为什么不是所有结果都被检索到了吗?我已经测试了几个查询,但始终没有找到结果。所有(我相信)测试的联系人都是通过 Appscript 脚本通过已弃用的联系人 API 创建的。
附:我可能会补充一点,它只检索一个结果不是问题。在其他“应该”有 20 个结果的情况下,in 已检索到大约 6 个。
附言建议/要求对缓存进行“预热”,我假设下面的更新脚本可以做到这一点。结果没有区别:
function run() {
let blankQueryForWarmUp = "";
let found = People.People.searchContacts({
"query": blankQueryForWarmUp,
"readMask": "names,addresses,emailAddresses,phoneNumbers"
});
Utilities.sleep(5000);
let query = "Q12755";
found = People.People.searchContacts({
"query": query,
"readMask": "names,addresses,emailAddresses,phoneNumbers"
});
if (found.results) {
for (i = 0; i < found.results.length; i++) {
let thisResult = found.results[i];
Logger.log(`Result ${i}: ${thisResult.person.names[0].displayName}`);
}
} else {
Logger.log(`No results for ${query}`);
}
}
【问题讨论】:
标签: javascript google-apps-script google-people-api