Google Apps Script Classroom API无法获取课程资料问题排查
问题:调用Google Classroom API获取课程资料返回空结果
我尝试用以下代码调用Google Classroom API获取课程资料,但始终提示“未找到资料”,但该课程里明明有已发布(Posted)和草稿(Draft)状态的多条资料。所有权限范围都配置好了,而且类似的CourseWork调用能成功执行。我知道CourseWork需要声明状态,但我以为Materials会返回所有状态(PUBLISHED或DRAFT)的内容,想问下是不是我的代码有问题?
function getMaterials() { ScriptApp.requireAllScopes(ScriptApp.AuthMode.FULL); var sourceCourseId = "696613911962"; // Replace with your course ID // 759489185424 TUC Bullying & 962 is Study Skills // Get materials (all) try { var destinationMaterialsResponse = Classroom.Courses.Materials.list(sourceCourseId); Logger.log("Raw Materials Response: " + JSON.stringify(destinationMaterialsResponse)); // Log the entire response if (destinationMaterialsResponse) { if (destinationMaterialsResponse.materials) { Logger.log("Materials: " + JSON.stringify(destinationMaterialsResponse.materials)); } else { Logger.log("Materials property is missing or empty."); } } else { Logger.log("Destination Materials Response is null or undefined."); } } catch (e) { Logger.log("Error getting materials: " + e); } }
问题分析与解决方案
你的代码本身没有语法错误,但对API接口的用途理解错了:
Classroom.Courses.Materials.list这个接口,只能获取「课程级资料」——也就是直接添加在课程主页「资料」板块、不属于任何作业/课程任务的独立资料,不是作业里附带的资料。- 你提到的已发布/草稿状态的资料,应该是依附在CourseWork(作业/课程任务)里的附属资料,这类内容必须通过CourseWork相关接口获取。
修正方案
如果要获取所有CourseWork里的附属资料,可以用下面的代码:
function getAllCourseWorkMaterials() { ScriptApp.requireAllScopes(ScriptApp.AuthMode.FULL); var sourceCourseId = "696613911962"; try { // 获取课程下所有状态的CourseWork(已发布+草稿) var courseWorkResponse = Classroom.Courses.CourseWork.list(sourceCourseId, { courseWorkStates: ["PUBLISHED", "DRAFT"] }); if (courseWorkResponse && courseWorkResponse.courseWork) { // 遍历每个课程任务,提取附属资料 courseWorkResponse.courseWork.forEach(courseWork => { if (courseWork.materials) { Logger.log(`课程任务【${courseWork.title}】的资料:${JSON.stringify(courseWork.materials)}`); } else { Logger.log(`课程任务【${courseWork.title}】没有附属资料`); } }); } else { Logger.log("未找到任何课程任务"); } } catch (e) { Logger.log("获取资料出错:" + e); } }
额外检查点
- 如果你确实要获取课程级资料,先确认课程主页的「资料」板块里有没有直接上传的内容,而不是仅存在于作业里的资料。
- 确认权限范围包含
https://www.googleapis.com/auth/classroom.courseworkmaterials.readonly(或读写权限),虽然你说权限已配置,但这个特定权限是访问课程级资料的必要条件。
内容的提问来源于stack exchange,提问作者Class Admin
相关产品推荐
相关产品推荐

