求助:使用Guilded预发布API批量导出用户及ID到Google表格
解决Guilded API批量导出用户列表到Google Sheets的问题
1. 先排查API返回的数据结构
Guilded预发布API的成员列表接口返回的响应通常是嵌套结构,比如:
{ "data": [ { "user": { "id": "abc123", "name": "UserName" } } ] }
如果你直接把整个响应对象赋值给data变量,然后用data.length判断循环条件,会因为对象没有length属性导致循环根本不执行——这就是循环内Logger.log无输出的核心原因。
正确的做法是提取响应里的用户数组:
var response = UrlFetchApp.fetch('GUILDED_API_SERVER_MEMBERS_URL', options); var apiResponse = JSON.parse(response.getContentText()); var userList = apiResponse.data; // 若API返回的数组字段是members,则改为apiResponse.members
之后用userList.length作为循环的判断条件。
2. 修复循环与日志输出
基于正确的用户数组调整循环逻辑:
for (var i = 0; i < userList.length; i++) { var user = userList[i].user; // 若API返回的用户对象直接在数组元素中,改为userList[i] Logger.log('用户名:%s,ID:%s', user.name, user.id); }
如果仍无日志输出,先打印数组本身确认结构:
Logger.log(JSON.stringify(userList));
检查数组是否包含多个元素,以及用户对象的字段名是否匹配(比如部分场景下用户名字段是username而非name)。
3. 批量写入Google Sheets到A10:B区域
先整理数据为二维数组,再一次性写入表格,避免逐个写入的低效问题:
// 整理成[用户名, 用户ID]的二维数组 var sheetData = []; for (var i = 0; i < userList.length; i++) { var user = userList[i].user; sheetData.push([user.name, user.id]); } // 写入目标表格区域 var spreadsheet = SpreadsheetApp.openById('1ZUZ6utQO6cW_BAy6cMACxX2H1_zrZAIE0CTtTmdN9nc'); var sheet = spreadsheet.getActiveSheet(); // 或指定工作表:getSheetByName('Sheet1') var targetRange = sheet.getRange(10, 1, sheetData.length, 2); targetRange.setValues(sheetData);
4. 排查Payload/请求问题
若怀疑请求参数有问题,开启异常捕获并打印响应内容:
var options = { 'method': 'get', 'headers': { 'Authorization': 'Bearer YOUR_GUILDED_AUTH_TOKEN' // 确保令牌有效 }, 'muteHttpExceptions': true // 开启后可捕获错误响应 }; // 打印响应内容排查问题 Logger.log(response.getContentText());
确认API返回200状态码,且响应体包含正确的用户数据。
内容的提问来源于stack exchange,提问作者Aaron Raven
相关产品推荐
相关产品推荐

