【问题标题】:Google Apps Script to find out if a Student turned in an assignment late in Google Classroom用于查明学生是否在 Google 课堂中迟交作业的 Google Apps 脚本
【发布时间】:2018-07-11 15:05:31
【问题描述】:

对于我正在开发的 Google Apps 脚本,我需要过滤掉迟交的学生提交以降低他们的成绩。

来自 Google 的文档 herehere 我假设这是通过使用 Classroom.Courses.CourseWork.StudentSubmissions.list 获得的,但我不知道如何将 late 参数应用于出现的列表,例如只得到那些迟交作业的人。

function onlyLate(){
   var courseId = ID;
   var courseWorkId = ID;
   var la = {"late":"LATE_ONLY"};
   var lat = Classroom.Courses.CourseWork.StudentSubmissions.list(courseId, courseWorkId, la);
   Logger.log(lat);

   for (i = 0; i < lat.length; i++) {
      // lower grades here
   }
} 

【问题讨论】:

  • 看起来您需要传递 Enum 值,但似乎没有办法从 Apps 脚本 Classroom 高级服务中访问 Enum 值(例如,没有不是Classroom.Courses.CourseWork.Late.LATE_ONLY)。所以如果传递字符串不起作用,那么你需要过滤集合

标签: google-apps-script google-classroom


【解决方案1】:

根据API spec,您需要提供适当的Enum 值(不一定是String 值)。如果将可选参数传递给{late: 'LATE_ONLY'}list 不起作用,那么您将需要过滤输出(可能有几页长)。

注意:您可以尝试late: "true",因为Python client library's Google Classroom documentation 表示该参数是所需延迟的字符串:

latestring,请求的延迟值。如果指定,则返回的学生提交受请求值的限制。如果未指定,则无论late 值如何,都将返回提交。

function getAllLateSubmissionsByFiltering_(courseId, assignmentId) {
  const options = {
    // late: "LATE_ONLY"
    // or perhaps
    // late: "true"
  };
  const results = [];

  // Collect all results, not just those from the first page.
  do {
    var search = Classroom.Courses.CourseWork.StudentSubmissions.list(courseId, assignmentId, options);
    options.pageToken = search.nextPageToken;
    if (search.studentSubmissions && search.studentSubmissions.length)
      Array.prototype.push.apply(results, search.studentSubmissions);
  } while(options.pageToken);

  // Return only the results that were actually submitted late.
  return results.filter(function (studentSub) {
    studentSub.late === true;
  });
}

参考资料:

【讨论】:

  • 我在 var 搜索中输入了准确的信息( var search = Classroom.Courses.CourseWork.StudentSubmissions.list(8322717457, 18556522095, options); ),当我迟迟未注释时:“true”错误无效'late'(TYPE_ENUM)的值,“true”出来了。取消注释迟到:“LATE_ONLY”没有给出错误,但数组结果仍然为空。我也试过 studentSub.late === false;只是想看看相反的情况是否可行,但数组仍然是空的。
  • @JasonJurotich 看起来是客户端库的问题 - 我无法在其实现的任何地方找到枚举(与 SpreadsheetApp.Direction 相比)。也许尝试各种 int 值来查看是否有任何效果 - 例如0 可能就像省略它一样,1 可能是“LATE_ONLY”,……也可以试试 true/false。如果您请求"NOT_LATE_ONLY" 或未指定的版本,您是否在搜索中获得值?如果没有,请确保您拥有正确的课程和课程作业 ID - 我们之前都曾遇到过这种情况(尽管我希望 API 在这种情况下会抛出 401/403/500/其他错误)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-21
  • 2020-08-11
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
相关资源
最近更新 更多