如何通过Google Classroom API获取studentSubmissionId以更新成绩?
嘿,我来帮你搞定从Classroom API响应里提取studentSubmissionId的事儿!你已经把基础信息都准备好了,就差解析那一步,很简单的,我给你拆解清楚:
首先,先修正一个小错误
你代码里的userId:'stdEmail'是把字符串"stdEmail"传给API了,这会导致API找不到对应学生——应该直接用变量stdEmail,去掉引号,不然白忙活啦!
完整的解析代码示例
我把你的函数补全,加上响应解析和后续的成绩更新逻辑,每一步都标清楚:
function getSubmissionId(stdEmail) { gapi.client.classroom.courses.courseWork.studentSubmissions.list({ courseId: gCourseId, courseWorkId: gCourseWorkId, userId: stdEmail // 这里去掉引号,用变量本身! }).then(function(response) { // 从API响应里取出学生提交的数组 const studentSubmissions = response.result.studentSubmissions; // 检查有没有提交记录 if (studentSubmissions && studentSubmissions.length > 0) { // 一般一个学生对应一个提交,直接取第一个的id就是你要的studentSubmissionId const targetSubmissionId = studentSubmissions[0].id; console.log("拿到studentSubmissionId啦:", targetSubmissionId); // 接下来就可以调用patch接口更新成绩了,我给你写个示例函数 updateStudentGrade(targetSubmissionId); } else { console.log("糟了,这个学生还没有提交作业哦"); } }, function(error) { // 别忘了加错误处理,方便排查问题 console.error("调用API时出错了:", error.result.error.message); }); } // 示例:更新学生成绩的patch函数 function updateStudentGrade(submissionId) { gapi.client.classroom.courses.courseWork.studentSubmissions.patch({ courseId: gCourseId, courseWorkId: gCourseWorkId, id: submissionId, updateMask: "assignedGrade" // 告诉API你要更新哪个字段,多个字段用逗号分隔,比如"assignedGrade,gradedTimestamp" }, { assignedGrade: 90 // 这里设置你要给的分数 }).then(function(updateResponse) { console.log("成绩更新成功!", updateResponse.result); }, function(updateError) { console.error("更新成绩时出错:", updateError.result.error.message); }); }
关键解析逻辑说明
Classroom API返回的响应结构里,response.result.studentSubmissions是一个数组,每个元素都是学生的提交记录,其中的id字段就是你要的studentSubmissionId。如果学生有多次提交(比如重新提交),你可以根据updateTime字段筛选最新的一条,比如:
// 筛选最新的提交记录 const latestSubmission = studentSubmissions.sort((a, b) => new Date(b.updateTime) - new Date(a.updateTime))[0]; const targetSubmissionId = latestSubmission.id;
这样就能确保拿到的是学生最后一次提交的ID啦!
内容的提问来源于stack exchange,提问作者David Jones
相关产品推荐
相关产品推荐

