Могу ли я оценивать задания «зарегистрирован как ученик» с помощью Google Classroom API?

#google-classroom

#google-classroom

Вопрос:

У меня есть приложение, использующее 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

Есть идеи о том, как автоматизировать выставление оценок за отправленные материалы?

Ответ №1:

Я думаю, что это невозможно: вы не можете обновить draftGrade с правами учащегося.

Что вы можете сделать:

  1. Из сеанса «ученик» вы сохраняете черновую оценку в базе данных приложения, связанную с идентификатором отправки.
  2. Из сеанса «учитель» и, следовательно, разрешений «учитель» вы получаете оценку из базы данных приложения, и я вызываю запрос Path для установки draftGrade.

Некоторый код (Swift, с использованием GoogleAPIClientForREST) для шага 2:

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