People API的Connections.list()返回数组长度与totalItems不匹配问题
Google People API 获取联系人不全的问题解决
问题原因
Google People API 的 People.People.Connections.list() 方法默认采用分页机制,单次请求最多返回100条联系人数据,这是API的内置限制。所以你看到totalItems显示总共有155条,但首次请求只能拿到前100条,剩余数据需要通过分页参数获取。
解决方案
通过分页参数pageToken实现循环请求,每次请求携带上一次返回的nextPageToken,直到没有更多数据为止,最后合并所有返回的联系人数据。
修改后的完整代码:
function getAllConnections() { try { let allConnections = []; let pageToken = null; do { // 每次请求携带pageToken,首次请求为null const response = People.People.Connections.list('people/me', { personFields: 'names', pageToken: pageToken }); // 将当前页的联系人合并到总数组 if (response.connections) { allConnections = [...allConnections, ...response.connections]; } // 更新pageToken为下一页的标识,没有则为null,循环结束 pageToken = response.nextPageToken; } while (pageToken); // 打印总条数和实际获取到的联系人数量 Logger.log(`totalItems: ${allConnections.length}`); Logger.log(`length of allConnections: ${allConnections.length}`); // 遍历输出所有联系人姓名 allConnections.forEach((contact, index) => { if (contact?.names) { Logger.log(`${index} ${contact.names[0].displayName}`); } else { Logger.log(`${index} 该联系人数据异常`); } }); } catch (err) { Logger.log('获取联系人失败,错误信息:%s', err.message); } }
代码说明
- 初始化
allConnections数组用于存储所有联系人数据 - 使用
do-while循环发起请求:首次请求不带pageToken,后续请求携带上一次返回的nextPageToken - 每次请求后将当前页的
connections合并到总数组 - 当
nextPageToken为null时,说明已获取全部数据,退出循环 - 最后遍历总数组输出所有联系人信息
内容的提问来源于stack exchange,提问作者Robert M.
相关产品推荐
相关产品推荐

