首页 > 解决方案 > 我可以使用 Google Classroom API 为“以学生身份登录”的作业评分吗?

问题描述

我有一个使用 Google Classroom API 的应用程序。当以教师身份连接时,我可以创建课程作业和作业。以学生身份连接时,我可以列出我的作业,并且可以上交特定作业。

我正在使用 REST API: https ://developers.google.com/classroom/reference/rest

当(以学生身份登录)我上交作业时,但我想包括草稿成绩。

我知道如果我以老师的身份登录,我可以设置成绩,但我想要的是应用程序根据一些特定的内置逻辑计算草稿成绩,这样老师就不必为每个人自己做学生。

根据文档,“draftGrade”和“assignedGrade”都只能由老师更新。 https://developers.google.com/classroom/reference/rest/v1/courses.courseWork.studentSubmissions#StudentSubmission

关于如何自动设置提交成绩的任何想法?

标签: google-classroom

解决方案


我认为这是不可能的:您不能使用学生权限更新 DraftGrade。

你可以做什么:

  1. 在“学生”会话中,您将草稿成绩保存在应用程序数据库中,与提交 ID 相关联。
  2. 从“教师”会话以及“教师”权限中,您可以从应用程序数据库中获得成绩,我调用路径查询来设置 DraftGrade。

第 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
                    }
                }
            }
        }
    }


推荐阅读