设置和更新成绩

本指南提供了与 Classroom API 相关的评分代码示例。本文档重点介绍核心的 Classroom 评分流程:管理 StudentSubmission 状态和成绩。

请阅读成绩指南,熟悉 Google 课堂中的评分概念。

管理 StudentSubmission 状态

StudentSubmission 可能处于未提交、已提交或已发回状态。state 字段表示当前状态。分级通常在 StudentSubmission 处于 TURNED_IN 状态后进行。

如需使用 Classroom API 更改状态,请调用以下方法之一:

所有这些方法都接受空的 body 参数,如以下示例所示:

Python

service.courses().courseWork().studentSubmission().turnIn(
    courseId=course_id,
    courseWorkId=coursework_id,
    id=studentsubmission_id,
    body={}).execute()

Java

classroom/snippets/src/main/java/ReturnStudentSubmission.java
try {
  service
      .courses()
      .courseWork()
      .studentSubmissions()
      .classroomReturn(courseId, courseWorkId, id, null)
      .execute();
} catch (GoogleJsonResponseException e) {
  // TODO (developer) - handle error appropriately
  GoogleJsonError error = e.getDetails();
  if (error.getCode() == 404) {
    System.out.printf(
        "The courseId (%s), courseWorkId (%s), or studentSubmissionId (%s) does "
            + "not exist.\n",
        courseId, courseWorkId, id);
  } else {
    throw e;
  }
} catch (Exception e) {
  throw e;
}

为学生提交的作业设置成绩

StudentSubmission 资源有两个字段,用于存储已评分的 CourseWork 作业的总体成绩:

  • draftGrade 是仅教师可见的临时成绩。
  • assignedGrade 是向学生报告的成绩。

这些字段使用 courses.courseWork.studentSubmissions.patch 进行更新,如以下示例所示:

Python

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

service.courses().courseWork().studentSubmissions().patch(
    courseId=course_id,
    courseWorkId=coursework_id,
    id=studentsubmission_id,
    updateMask='assignedGrade,draftGrade',
    body=studentSubmission).execute()

Java

classroom/snippets/src/main/java/PatchStudentSubmission.java
StudentSubmission studentSubmission = null;
try {
  // Updating the draftGrade and assignedGrade fields for the specific student submission.
  StudentSubmission content =
      service
          .courses()
          .courseWork()
          .studentSubmissions()
          .get(courseId, courseWorkId, id)
          .execute();
  content.setAssignedGrade(90.00);
  content.setDraftGrade(80.00);

  // The updated studentSubmission object is returned with the new draftGrade and assignedGrade.
  studentSubmission =
      service
          .courses()
          .courseWork()
          .studentSubmissions()
          .patch(courseId, courseWorkId, id, content)
          .set("updateMask", "draftGrade,assignedGrade")
          .execute();

  /* Prints the updated student submission. */
  System.out.printf(
      "Updated student submission draft grade (%s) and assigned grade (%s).\n",
      studentSubmission.getDraftGrade(), studentSubmission.getAssignedGrade());
} catch (GoogleJsonResponseException e) {
  // TODO (developer) - handle error appropriately
  GoogleJsonError error = e.getDetails();
  if (error.getCode() == 404) {
    System.out.printf(
        "The courseId (%s), courseWorkId (%s), or studentSubmissionId (%s) does "
            + "not exist.\n",
        courseId, courseWorkId, id);
  } else {
    throw e;
  }
} catch (Exception e) {
  throw e;
}
return studentSubmission;

使用 Google 课堂界面时,教师必须先保存 draftGrade,然后才能设置 assignedGrade。然后,您可以将 assignedGrade 发回给学生。您的应用可以通过以下两种方式之一为学生的作业评分:

  • 仅分配 draftGrade。例如,这有助于教师在最终确定成绩之前手动检查成绩。学生无法查看草稿成绩。

  • 同时分配 draftGradeassignedGrade,以便为作业评出完整的分数。

使用 updateMask 实参可配置要设置的字段。

如需了解修改 StudentSubmissions 所需的范围和权限,请参阅向学生回答添加附件

读取分配的成绩

您可以使用 courses.courseWork.studentSubmissions.list 方法检索所有相应的 StudentSubmissions,并检查相应的 assignedGradedraftGrade 字段,从而访问特定 CourseWork 的所有成绩:

Python

response = coursework.studentSubmissions().list(
    courseId=course_id,
    courseWorkId=coursework_id,
    # optionally include `pageSize` to restrict the number of student
    # submissions included in the response.
    pageSize=10
).execute()
submissions.extend(response.get('studentSubmissions', []))

if not submissions:
    print('No student submissions found.')

print('Student Submissions:')

for submission in submissions:
    print(f"Submitted at:"
          f"{(submission.get('userId'), submission.get('assignedGrade'))}")

Java

classroom/snippets/src/main/java/ListStudentSubmissions.java
  ListStudentSubmissionsResponse response =
      service
          .courses()
          .courseWork()
          .studentSubmissions()
          .list(courseId, courseWorkId)
          .setPageToken(pageToken)
          .execute();

  /* Ensure that the response is not null before retrieving data from it to avoid errors. */
  if (response.getStudentSubmissions() != null) {
    studentSubmissions.addAll(response.getStudentSubmissions());
    pageToken = response.getNextPageToken();
  }
} while (pageToken != null);

if (studentSubmissions.isEmpty()) {
  System.out.println("No student submissions found.");
} else {
  for (StudentSubmission submission : studentSubmissions) {
    System.out.printf(
        "User ID %s, Assigned grade: %s\n",
        submission.getUserId(), submission.getAssignedGrade());
  }
}

请参阅检索学生回答,了解读取 StudentSubmissions 所需的范围和权限。

确定课程总成绩

Classroom API 不允许开发者读取或写入课程总成绩,但您可以通过编程方式计算该成绩。如果您想计算总成绩,请阅读成绩指南,了解缺席CourseWork、评分周期和不同的评分系统等重要概念。

为插件附件评分

如果您是 Google 课堂插件开发者,可以为各个插件附件设置成绩,并配置该成绩在教师查看学生作业时显示。如需了解详情,请参阅活动类型附件成绩回传演练。

评分准则成绩

StudentSubmissions 具有表示根据 Rubrics 给出的得分的字段:

  • draftRubricGrade 是一组仅对教师可见的临时 Criterion 分数。
  • assignedRubricGrade 是向学生报告的一组 Criterion 分数。

无法使用 Google Classroom API 设置评分标准得分,但可以读取。如需了解详情,请参阅评分标准指南限制