Google Apps Script稳定获取activities.list指定查询参数方法
解决方案
Google Admin SDK的activities.list接口返回的parameters数组不保证元素顺序固定,使用固定数组索引(比如parameters[2])取值的写法本身就不可靠,会因为响应结构的顺序波动拿到错误结果。
要稳定获取organizer_email参数,核心逻辑是放弃索引定位,遍历数组匹配每个元素的name属性,找到name为目标值的元素后再读取对应的值。
可直接复用的实现代码(适配Apps Script环境)
首先新增一个通用的参数提取工具方法,自动适配接口不同类型参数的存储字段(字符串值存在value字段、整数值存在intValue字段、布尔值存在boolValue字段),同时做了空值兜底避免异常报错:
/** * 从事件参数数组中提取指定名称的参数值 * @param {Array} parameters - 对应activity.events[n].parameters数组 * @param {string} targetParamName - 要提取的参数名称 * @returns 匹配到的参数值,无匹配返回null */ function getParameterValue(parameters, targetParamName) { if (!Array.isArray(parameters)) return null; for (const param of parameters) { if (param.name === targetParamName) { return param.value ?? param.intValue ?? param.boolValue ?? null; } } return null; }
修改原有代码中遍历活动记录的逻辑,替换固定索引取值的部分:
Logger.log('MEET LOGS:'); for (const activity of activities) { // 跳过无事件数据的异常条目 if (!activity.events || activity.events.length === 0) continue; const eventParams = activity.events[0].parameters; // 按名称提取organizer_email,不受数组顺序影响 const organizerEmail = getParameterValue(eventParams, 'organizer_email'); Logger.log('组织者邮箱:%s,事件发生时间:%s', organizerEmail, activity.id.time); }
补充说明
- 该写法完全不受
parameters数组内元素的排列顺序影响,只要响应中携带organizer_email字段就能精准匹配 - 工具方法可通用,后续需要提取
meeting_code、conference_id、is_external等其他任意事件参数时,直接传入对应参数名即可 - 内置的空值校验逻辑可以兼容个别异常响应(比如事件无参数、目标字段缺失),不会导致脚本运行中断
内容的提问来源于stack exchange,提问作者user2860896
相关产品推荐
相关产品推荐

