You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
  }
}

额外检查点

  1. 如果你确实要获取课程级资料,先确认课程主页的「资料」板块里有没有直接上传的内容,而不是仅存在于作业里的资料。
  2. 确认权限范围包含https://www.googleapis.com/auth/classroom.courseworkmaterials.readonly(或读写权限),虽然你说权限已配置,但这个特定权限是访问课程级资料的必要条件。

内容的提问来源于stack exchange,提问作者Class Admin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:05:10