如何获取Google Classroom中CourseWorkSubmission对应的学生userId?
嘿,这个问题我之前在开发Classroom相关插件时也碰到过,给你几个实用的解决方向:
1. 从Drive文档的关联元数据挖信息
当学生通过Classroom提交作业时,生成的Docs副本其实会携带和Classroom绑定的元数据。你可以调用Drive API的files.get方法,请求时指定fields='appProperties'参数,这里面大概率藏着你需要的submissionId、courseId这类关键ID。举个调用示例:
GET https://www.googleapis.com/drive/v3/files/{你的文档FILE_ID}?fields=appProperties
返回的appProperties里通常会有类似classroom.submissionId的键值对,这就是你要找的提交ID。
2. 用Classroom API反向匹配提交记录
如果你已经拿到了当前文档的fileId,可以调用Classroom API的courses.courseWork.studentSubmissions.list接口,传入对应的courseId和courseWorkId,然后遍历返回的所有提交记录,检查每个提交的attachments字段,找到包含该fileId的条目——这样就能同时拿到submissionId和userId了。
3. 检查插件的权限和触发场景
别漏掉权限这块!你的插件必须申请对应的OAuth权限:
- 至少要有
https://www.googleapis.com/auth/classroom.student-submissions.students.readonly(或者更高的Classroom权限) - 同时需要
https://www.googleapis.com/auth/drive.metadata.readonly来读取文档元数据
另外要确认插件是在学生提交的作业副本页面触发的——教师自己创建的原始作业文档是不带提交关联信息的,只有学生提交后生成的副本才会绑定这些上下文。
4. 切换到Classroom侧边栏插件(如果可行)
如果你的插件可以改成Classroom的侧边栏插件,那事情就简单多了!Classroom会直接在插件启动时传入courseId、courseWorkId、submissionId这些上下文参数,你通过插件的客户端API就能直接拿到,根本不用从文档里费劲提取。
小提醒:如果试了上面的方法还是拿不到数据,先确认这个文档确实是通过Classroom的提交流程生成的——如果是教师手动分享的文档,是不会带有这些关联元数据的哦。
内容的提问来源于stack exchange,提问作者ro͢binmckenzie

