【问题标题】:Google Apps Script to turn in, grade, and return a Google Classroom Assignment用于上交、评分和发回 Google 课堂作业的 Google Apps 脚本
【发布时间】:2018-01-27 20:09:33
【问题描述】:

正如下面的 cmets 所述,如果只有学生可以上交,那么即使作业尚未上交,我也需要能够评分和发回作业。澄清一下,作业是使用 API 完成的,我可以控制班级和学生。

如下面的附加 cmets 所述,即使您不发回作业,学生仍会看到分配的成绩,这实现了本题的目标。因此,使用 Classroom API 对作业进行评分不需要上交和返还。

有几个问题与这个问题类似,但并不完整,而且似乎都没有具体的答案,所以我会尽量具体。我需要能够强制上交学生的作业,即使他们还没有这样做,然后打分,然后发回。使用下面的脚本,我收到两个错误。

一,“收到无效的 JSON 有效负载。未知名称“assignment_submission”:找不到字段。(第 15 行,文件“GRADES CLASSROOM”)”,尽管这在课堂参考 (https://developers.google.com/classroom/reference/rest/v1/courses.courseWork.studentSubmissions) 中。

二,当我尝试使用“return”方法时,(代码的倒数第二行)当我尝试保存时,它返回错误“Missing name after . operator.(第 17 行,文件“GRADES CLASSROOM”)”代码,迫使我在保存之前将其注释掉。我想很多人一直在寻找如何设置此流程的答案。

function returnGrade () {
 var submit ={assignedGrade: 80}; 
 var upDate = {updateMask: 'assignedGrade'};

 var resource1 = {
   assignmentSubmission: {
     addAttachments: [{
       link:{
         url: "URL"
            },
     }],
   },
};

// Classroom.Courses.CourseWork.StudentSubmissions.turnIn(resource1, COURSE ID, WORK ID, "EMAIL"); 
 Classroom.Courses.CourseWork.StudentSubmissions.patch(submit, COURSE ID, WORK ID, "EMAIL", upDate);
 // Classroom.Courses.CourseWork.StudentSubmissions.return(resource1, COURSE ID, WORK ID, "EMAIL"); 
} 

在下面的 cmets 中,设置等级的代码已解决。我们只需要看看如何返回成绩。

【问题讨论】:

  • @Rubén 是的。由于几个月前的最后一次经历,我对将东西放在 cmets 中非常谨慎。那些 100% 有效的我把它们放在了 github (gist.github.com/jasonjurotich) 中。如果您能告诉我“有效”的方式来表明 Stackoverflow 中的某些内容有效,我会很乐意这样做。
  • 关于您所指的经验,我不确定我是否看到/参与了相关线程,如果是这样,您感到被冒犯或发现我的 cmets 粗鲁,我深表歉意。我尽量做到简洁和友善,但有时我会失败。
  • @Rubén 你在这里的工作是需要和赞赏的,作为新手,我们必须适应这里存在的任何规范,以便每个人都能找到他们正在寻找的东西。我将按照您在之前评论中留下的说明进行操作。

标签: google-apps-script google-classroom


【解决方案1】:

简答

  1. 课程作业提交(作业、问题)只能由学生或使用他们的凭据完成。我们可以为此使用 OAuth,但如果您不想使用 OAuth,则使用学生帐户上交课程作业,换句话说,使用学生帐户创建一个函数并创建另一个函数使用教师/域管理员帐户的补丁/返回操作。

  2. 即使未使用patch 提交,也可以对学生提交的课程作业进行评分。

  3. 课程作业提交只有在学生首先被转身的情况下才能退还给学生

代码

以下代码“成功”为一名学生添加了成绩。此时,我能够验证 drafGrade 已在 Web UI 上正确注册。

function doPatch(){
  var courseId = '6915813348';
  var courseWorkId = '11297534926';
  var studentSubmissions = Classroom.Courses.CourseWork.StudentSubmissions.list(courseId, courseWorkId,{'userId':'someone@gmail.com'});
  var id = studentSubmissions['studentSubmissions'][0].id;

  var studentSubmission = {  
    'assignedGrade': 99,  
    'draftGrade': 80  
  }  

  Classroom.Courses.CourseWork.StudentSubmissions.patch(  
    studentSubmission,
    courseId,
    courseWorkId,
    id,
    {
      'updateMask':'assignedGrade,draftGrade'  
    }
  );
}

assignedGrade 在学生作业视图中对教师和学生可见

draftGrade 在提交视图中对教师可见

注意事项

我做了一些研究和测试,发现了一些“有趣的东西”

错误信息

“. 运算符后缺少名称。(第 17 行,文件“GRADES CLASSROOM”)”

看起来是由于在

中使用return引起的

Classroom.Courses.CourseWork.StudentSubmissions.return(resource1, COURSE ID, WORK ID, "EMAIL");

参考:Google App Script

因为return 是一个JavaScript 关键字而发生错误。替代语法是

Classroom.Courses.CourseWork.StudentSubmissions["return"](resource1, COURSE ID, WORK ID, "EMAIL")

但这需要相关学生提交课程作业,否则 Classroom API 将抛出 Failed Precondition 错误。


我还没有完整的答案,但重要的是要记住,某些任务取决于用户类角色,可能是教师或学生,但不能同时用于同一门课程。

因此,为了提交作业,应该以某种方式代表相应的学生调用相应的方法,并且为了返回作业,应该以某种方式代表班主任调用该方法。

参考文献

来自Method: courses.courseWork.studentSubmissions.turnIn

这只能由拥有指定学生提交的学生调用。

来自Method: courses.courseWork.studentSubmiss.return

只有包含所请求学生提交的课程的教师才能调用此方法。

【讨论】:

  • 那么我需要重新表述我的问题以摆脱“转入”方法。我需要能够为作业评分,即使它还没有上交。
  • 我们还是有问题,因为只是把:function updateGrade1 () { var submit = {assignedGrade: 80}; var upDate = {updateMask: 'assignedGrade'}; Classroom.Courses.CourseWork.StudentSubmissions.patch(提交, COURSEID, WORKID, "EMAIL", upDate);返回错误:“未找到请求的实体。(第 26 行,文件“GRADES CLASSROOM”)”但我不知道它在寻找什么“实体”,因为我知道的 ID 和电子邮件都是正确的。
  • Classroom.Courses.CourseWork.StudentSubmissions.patch(提交,“11294031082”,“11295224004”,“student@school.edu.mx”,upDate);还返回未找到请求的实体。 (第 26 行,文件“GRADES CLASSROOM”)
  • @JasonJurotich 请查看我刚刚添加到答案中的代码示例。
  • 是的,我刚刚检查过,你是对的。成绩出来了。对我来说,这就足够了。最后一步是将其与您之前回答的问题(我勾选 -stackoverflow.com/questions/47982868/…)结合起来,以完成我正在设置的自动评分系统。在提出另一个问题之前,我会先处理它。我会勾选这个并再次修改问题以强调它就足够了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多