如何在 Google 课堂中按标题删除课程作业(作业)

How to delete CourseWork (Assignments) by title in Google Classroom

我有几门课程都有相同的主题集,课程作业(作业)在每个主题中都有相同的标题。我正在尝试使用 Apps Script 从每门课程的几个主题中删除这些作业。我希望能够使用 Classroom.Courses.CourseWork.delete(),但是到目前为止,我的代码什么也没做。没有错误 - 只是作业没有变化。我认为我的权限等是有序的,因为这些是我使用相同 account/permissions.

创建的作业

我的问题可能是我无法从作业名称中获取课程作业 ID。我不确定该怎么做,但我认为我的代码中可能缺少它。

这是我尝试过的:

function deleteAssignments() {
  var courseIds = ['100000000000','100000000001','100000000002'];
  var topicNames = ['topic3','topic2','topic1'];
  for (var i = 0; i < courseIds.length; i++) {

    var topics = Classroom.Courses.Topics.list(courseIds[i]).topic;
    var topicObj = topics.reduce((o, e) => Object.assign(o, {[e.name]: e.topicId}), {});
    for (var j = 0; j < topicNames.length; j++) {

      var topicId = topicObj[topicNames[j]];

      var exec = Classroom.Courses.CourseWork.delete({
        title: "Example Assignment",
        topicId: topicId,
        workType: "ASSIGNMENT",
      }, courseIds[i]);
    }
  }
} 

我查看了 Google 课堂 courses.courseWork docs,但我认为我不太了解如何构建我的代码作为一个整体来利用那里的信息,因为我不知道没有背景 knowledge/training.

我用 编写了我的代码,但我的代码不工作,我不知道哪里出错了。

我也查看了 Using Google Apps Script to list assignments through Google Classroom API using course.coursework.list,但是当我 运行 答案中的代码时,我的日志显示它正在加载,但似乎从未完成。

在此示例脚本中,通过搜索课程作业名称删除课程作业。

示例脚本:

在您使用此脚本之前,please confirm Classroom API is enabled at Advanced Google services, again

function deleteCourseworks() {
  var courseIds = ['###courseId1###', '###courseId2###',,,];
  var courseworkNames = ["###coursework name1###", "###coursework name2###",,,];

  for (var i = 0; i < courseIds.length; i++) {
    var courseWorks = Classroom.Courses.CourseWork.list(courseIds[i], {courseWorkStates: "PUBLISHED"}).courseWork;
    var courseWorkObj = courseWorks.reduce((o, e) => Object.assign(o, {[e.title]: e.id}), {});
    for (var j = 0; j < courseworkNames.length; j++) {
      var courseWorkId = courseWorkObj[courseworkNames[j]];
      console.log(courseIds[i])
      console.log(courseWorkId)
      var exec = Classroom.Courses.CourseWork.remove(courseIds[i], courseWorkId);
    }
  }
}
  • 这种情况下,如果要删除状态为“DRAFT”的课件,请将courseWorkStates: "PUBLISHED"修改为courseWorkStates: "DRAFT"

注:

  • "status" : "PERMISSION_DENIED"The Developer Console project is not permitted to make this request.等错误发生在Classroom.Courses.CourseWork.remove时,问题原因可在this thread处查看。请注意这一点。
    • 那样的话,比如说,好像可以删除用GAS项目创建的courseworks。好像这是目前的规范。

参考文献:

已添加:

以下示例脚本通过搜索课程作业名称来删除课程作业。但是在这种情况下,当存在相同的课程作业名称时,它们的所有课程作业都会被删除。所以大家在使用的时候,请注意这一点。

示例脚本:

function deleteCourseworks() {
  var courseIds = ['###courseId1###', '###courseId2###',,,];
  var courseworkNames = ["###coursework name1###", "###coursework name2###",,,];

  for (var i = 0; i < courseIds.length; i++) {
    var courseWorks = Classroom.Courses.CourseWork.list(courseIds[i], {courseWorkStates: "PUBLISHED"}).courseWork;
    var courseWorkObj = courseWorks.reduce((o, e) => Object.assign(o, {[e.title]: o[e.title] ? o[e.title].concat(e.id) : [e.id]}), {});
    for (var j = 0; j < courseworkNames.length; j++) {
      var courseWorkIds = courseWorkObj[courseworkNames[j]];
      if (courseWorkIds) {
        courseWorkIds.forEach(id => {
          var exec = Classroom.Courses.CourseWork.remove(courseIds[i], id);
        });
      }
    }
  }
}