使用Google Apps Script调用People API时的信息缺失问题排查
解决Google Apps Script调用People API的两个问题
问题1:仅能获取85人数据——分页处理
People API的listDirectoryPeople方法默认分页返回结果,单次请求有数量限制。要获取全部330人数据,必须通过nextPageToken循环发起请求,直到没有下一页数据为止。
问题2:无法获取姓名、昵称——修正参数配置
- 确保
readMask明确包含names、nicknames字段(你当前代码仅指定了names,emailAddresses,需补充nicknames) - 调整
sources参数,同时包含域配置文件和联系人数据源,确保能拉取到姓名类信息
修改后的完整代码
function obtenerDirectorioCompleto() { let allPeople = []; let pageToken = null; do { var directorio = People.People.listDirectoryPeople({ readMask: 'names,emailAddresses,nicknames,phoneNumbers,resourceName', sources: 'DIRECTORY_SOURCE_TYPE_DOMAIN_PROFILE,DIRECTORY_SOURCE_TYPE_CONTACT', mergeSources: 'DIRECTORY_MERGE_SOURCE_TYPE_CONTACT', pageToken: pageToken }); if (directorio.people && directorio.people.length > 0) { allPeople = allPeople.concat(directorio.people); } pageToken = directorio.nextPageToken; } while (pageToken); // 写入Google表格(示例:创建新表格,可替换为已有表格ID) const sheet = SpreadsheetApp.create('企业通讯录').getActiveSheet(); sheet.appendRow(['姓名', '昵称', '邮箱', '手机号', 'ID']); allPeople.forEach(person => { const name = person.names ? person.names[0].displayName : '无'; const nickname = person.nicknames ? person.nicknames[0].value : '无'; const email = person.emailAddresses ? person.emailAddresses[0].value : '无'; const phone = person.phoneNumbers ? person.phoneNumbers[0].value : '无'; const id = person.resourceName ? person.resourceName.split('/').pop() : '无'; sheet.appendRow([name, nickname, email, phone, id]); }); Logger.log(`共获取${allPeople.length}条联系人数据`); }
关键说明
- 分页逻辑:通过
do-while循环,每次请求带上上一页的pageToken,直到nextPageToken为空,确保拉取全部数据 - 字段读取:判断字段是否存在(避免部分用户无昵称/手机号导致报错),提取对应信息
- 表格写入:自动创建新表格并写入表头,若需写入已有表格,可替换
SpreadsheetApp.create为SpreadsheetApp.openById("你的表格ID")
内容的提问来源于stack exchange,提问作者P CP
相关产品推荐
相关产品推荐

