我可以在 Google 课堂 API 中给作业 "logged as student" 评分吗?
Can I grade assignments "logged as student" with Google Classroom API?
我有一个使用 Google 课堂 API 的应用程序。当作为老师连接时,我可以创建课程作业和作业。当作为学生连接时,我可以列出我的作业,并且可以上交特定作业。
我正在使用 REST API:
https://developers.google.com/classroom/reference/rest
当(以学生身份登录)我交了作业但我想包括草稿成绩。
我知道如果我以老师的身份登录我可以设置成绩,但我想要的是应用程序根据一些特定的内置逻辑计算草稿成绩,这样老师就不必这样做了每个学生自己。
根据文档,“draftGrade”和“assignedGrade”都只能由教师更新。
https://developers.google.com/classroom/reference/rest/v1/courses.courseWork.studentSubmissions#StudentSubmission
关于如何自动设置提交的评分有什么想法吗?
我认为这是不可能的:您不能使用学生权限更新 draftGrade。
你可以做什么:
- 在“学生”会话中,您将草稿成绩保存在申请数据库中,并与提交 ID 相关联。
- 从“教师”会话,因此获得“教师”权限,您从应用程序数据库中获得成绩,我调用路径查询来设置草稿成绩。
步骤 2 的一些代码(Swift,使用 GoogleAPIClientForREST):
func executeQuery_GradeSubmission(studentSubmission: GTLRClassroom_StudentSubmission) -> GTLRServiceTicket? {
guard let courseID = self.myClassroom?.courseID,
let courseWorkID = self.selectedCourseWorkID else { return nil }
if let grade = self.gradesForSelectedWorkID?[studentSubmission.identifier!] {
studentSubmission.draftGrade = NSNumber(floatLiteral: Double(grade))
}
let query = GTLRClassroomQuery_CoursesCourseWorkStudentSubmissionsPatch.query(withObject: studentSubmission,
courseId: courseID,
courseWorkId: courseWorkID,
identifier: studentSubmission.identifier!)
query.updateMask = "draftGrade"
return self.myClassroom?.service.executeQuery(query,
delegate: self,
didFinish: #selector(displayGradeSubmissionResult(ticket:finishedWithObject:error:)))
}
@objc func displayGradeSubmissionResult(ticket: GTLRServiceTicket, finishedWithObject: GTLRObject, error: Any?){
let classroomSubmissionResponse = finishedWithObject as? GTLRClassroom_StudentSubmission
if let classroomError = error as? NSError {
print("displayGradeSubmissionResult. ERROR: \(classroomError.description)")
// TODO: inform something went wrong
} else {
if let submissionItems = self.classroomSubmissionsResponse?.studentSubmissions {
for submissionItem in submissionItems {
if submissionItem.identifier == classroomSubmissionResponse?.identifier {
submissionItem.draftGrade = classroomSubmissionResponse?.draftGrade
}
}
}
}
}
我有一个使用 Google 课堂 API 的应用程序。当作为老师连接时,我可以创建课程作业和作业。当作为学生连接时,我可以列出我的作业,并且可以上交特定作业。
我正在使用 REST API: https://developers.google.com/classroom/reference/rest
当(以学生身份登录)我交了作业但我想包括草稿成绩。
我知道如果我以老师的身份登录我可以设置成绩,但我想要的是应用程序根据一些特定的内置逻辑计算草稿成绩,这样老师就不必这样做了每个学生自己。
根据文档,“draftGrade”和“assignedGrade”都只能由教师更新。 https://developers.google.com/classroom/reference/rest/v1/courses.courseWork.studentSubmissions#StudentSubmission
关于如何自动设置提交的评分有什么想法吗?
我认为这是不可能的:您不能使用学生权限更新 draftGrade。
你可以做什么:
- 在“学生”会话中,您将草稿成绩保存在申请数据库中,并与提交 ID 相关联。
- 从“教师”会话,因此获得“教师”权限,您从应用程序数据库中获得成绩,我调用路径查询来设置草稿成绩。
步骤 2 的一些代码(Swift,使用 GoogleAPIClientForREST):
func executeQuery_GradeSubmission(studentSubmission: GTLRClassroom_StudentSubmission) -> GTLRServiceTicket? {
guard let courseID = self.myClassroom?.courseID,
let courseWorkID = self.selectedCourseWorkID else { return nil }
if let grade = self.gradesForSelectedWorkID?[studentSubmission.identifier!] {
studentSubmission.draftGrade = NSNumber(floatLiteral: Double(grade))
}
let query = GTLRClassroomQuery_CoursesCourseWorkStudentSubmissionsPatch.query(withObject: studentSubmission,
courseId: courseID,
courseWorkId: courseWorkID,
identifier: studentSubmission.identifier!)
query.updateMask = "draftGrade"
return self.myClassroom?.service.executeQuery(query,
delegate: self,
didFinish: #selector(displayGradeSubmissionResult(ticket:finishedWithObject:error:)))
}
@objc func displayGradeSubmissionResult(ticket: GTLRServiceTicket, finishedWithObject: GTLRObject, error: Any?){
let classroomSubmissionResponse = finishedWithObject as? GTLRClassroom_StudentSubmission
if let classroomError = error as? NSError {
print("displayGradeSubmissionResult. ERROR: \(classroomError.description)")
// TODO: inform something went wrong
} else {
if let submissionItems = self.classroomSubmissionsResponse?.studentSubmissions {
for submissionItem in submissionItems {
if submissionItem.identifier == classroomSubmissionResponse?.identifier {
submissionItem.draftGrade = classroomSubmissionResponse?.draftGrade
}
}
}
}
}