google-apps-script - 如何在 Google 课堂中按标题删除课程作业(作业)
问题描述
我有几门课程都有相同的主题集,课程作业(作业)在每个主题中都有相同的标题。我正在尝试使用 Apps 脚本从每门课程的几个主题中删除这些作业。我希望能够使用 Classroom.Courses.CourseWork.delete(),但是到目前为止,我的代码什么也没做。没有错误 - 只是作业没有变化。我认为我的权限等是有序的,因为这些是我使用相同帐户/权限创建的分配。
我的问题可能是我无法从作业名称中获取课程作业 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 Classroom courses.courseWork docs,但我认为我不太了解如何将我的代码作为一个整体来构建以利用那里的信息,因为我没有任何背景知识/培训。
我在 Google Classroom 中使用了一个学生的问题列表作业来编写我的代码,但我的代码不起作用,我不知道我哪里出错了。
我还查看了Using Google Apps Script to list assignments through Google Classroom API using course.coursework.list,但是当我在答案中运行代码时,我的日志说它正在加载,但它似乎永远不会完成。
解决方案
在此示例脚本中,通过搜索课程作业名称来删除课程作业。
示例脚本:
在您使用此脚本之前,请再次确认已在高级 Google 服务中启用 Classroom API。
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);
}
}
}
- 在这种情况下,如果您想删除“草稿”状态的课程,请修改
courseWorkStates: "PUBLISHED"
为courseWorkStates: "DRAFT"
.
笔记:
"status" : "PERMISSION_DENIED"
当出现和之类的错误The Developer Console project is not permitted to make this request.
时Classroom.Courses.CourseWork.remove
,可以在此线程中看到问题的原因。请注意这一点。- 例如,在这种情况下,似乎可以删除使用 GAS 项目创建的课程。这似乎是当前的规范。
参考:
添加:
以下示例脚本通过搜索课程作业名称来删除课程作业。但是在这种情况下,当存在相同的课程作业名称时,它们的所有课程作业都将被删除。因此,当您使用它时,请注意这一点。
示例脚本:
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);
});
}
}
}
}
推荐阅读
- javascript - Switch 语句 Java 脚本
- ios - 如何向 viewWillTransitionToSize 添加过渡
- python - Python将小部件框转换为熊猫数据框
- bash - 如何连接 SFTP 服务器以获取自动化 shell 脚本
- python - 两个变量合并为 1 个变量
- r - 在 R 中自动下载 Dropbox
- php - Laravel 将不同的控制器赋予相同的 Get 路由
- javascript - 使用 React Native 在 iphone x 上使图像适合全屏
- python-3.x - 在列表中追加许多字符串,由 split() 分隔
- powershell - PowerShell - 将文本添加到 ProgressBar (GUI)