Google Apps Script调用Tasks.Tasklists.list仅返回20条,设置maxResults无效求助
解决Google Apps Script调用Tasks API仅返回20个任务列表的问题
我之前也碰到过一模一样的问题,这其实是Google Tasks API的分页机制在起作用,下面给你拆解问题并提供完整解决方案:
问题根源
Google Tasks API的Tasklists.list()接口默认仅返回20条结果,而且maxResults参数有上限——最多只能设为100。哪怕你把maxResults设成100,如果任务列表总数超过100,接口也只会返回第一页的100条,剩余结果需要通过**分页令牌(nextPageToken)**循环获取。你之前的代码只调用了一次接口,没处理分页逻辑,所以不管怎么调整maxResults,最多只能拿到第一页的内容。
完整解决方案代码
要获取所有任务列表,你需要循环调用接口,直到响应中不再返回nextPageToken为止:
function listAllTaskLists() { var allTaskLists = []; var requestParams = { maxResults: 100 // 这是API允许的单页最大返回数 }; do { // 调用接口获取当前页的任务列表 var response = Tasks.Tasklists.list(requestParams); // 如果当前页有结果,合并到总列表中 if (response.items) { allTaskLists = allTaskLists.concat(response.items); } // 更新请求参数,带上下一页的令牌 requestParams.pageToken = response.nextPageToken; } while (requestParams.pageToken); // 直到没有下一页令牌,停止循环 // 输出总数量和所有列表信息 Logger.log('总任务列表数量: ' + allTaskLists.length); allTaskLists.forEach(function(list, index) { Logger.log('%d. 列表名称: %s | 列表ID: %s', index + 1, list.title, list.id); }); }
关键要点说明
- 分页令牌的作用:每次调用接口后,如果还有未返回的结果,API会在响应里生成
nextPageToken,把这个令牌作为参数传入下一次调用,就能拿到下一页的内容 - maxResults上限:Google Tasks API明确规定
maxResults的最大值是100,无法设置更大的数值,所以超过100条的任务列表必须通过分页获取 - 权限确认:确保你的脚本已经获得正确授权,需要包含
https://www.googleapis.com/auth/tasks(读写权限)或https://www.googleapis.com/auth/tasks.readonly(只读权限)的授权范围
内容的提问来源于stack exchange,提问作者Alain
相关产品推荐
相关产品推荐

