使用Classroom.Courses.CourseWork.StudentSubmissions.list(4140802199,4801051201);

时间:2017-03-15 00:27:06

标签: google-apps-script google-api google-classroom

我已经能够使用谷歌脚本将一些数据从谷歌教室移动到电子表格。特别是在课堂课程或课程中的任何内容。当我尝试访问课程中的东西时,我收到了权限错误。

(方法listAssigments工作正常需要细化工作缓慢) (方法listGrades给出var提交的权限错误)

我在开始时已经设置了API,但没有添加任何其他授权。

我最初认为这是因为我在Google教室中创建了它,但是当我使用网站https://developers.google.com/classroom/reference/rest/v1/courses.courseWork.studentSubmissions/list时尝试这很好。当我将请求直接发送到网络时,我再次收到错误。

我知道它可以使用几个附加组件获取信息,但我找不到任何不是python的示例代码。我正在尝试制作一个简单的电子表格,根据我的成绩簿对我的成绩进行排序。任何工作都可以。虽然我希望能够将成绩推回谷歌。在课堂上添加参与点的速度非常慢,我宁愿复制并更改任何异常或粘贴另一个电子表格的等级。

我会添加代码以防它有用,但我相信它必须是某种额外的身份验证或提供或添加所需的权限。

function listGrades(courseWorkId, course) {
   var courseId = course.id
   var ss = SpreadsheetApp.getActive().getSheetByName(course.name);
   var submissions = Classroom.Courses.CourseWork.StudentSubmissions.list(4140802199, 4801051201);
   var grade = submissions.studentSubmissions[0].assignedGrade
}

function listAssigments(course) {
   var courseId = course.id
   var courseWork = Classroom.Courses.CourseWork.list(courseId).courseWork
   var ss = SpreadsheetApp.getActive().getSheetByName(course.name);

   for(var i = 0; i < courseWork.length; i++)    {
       var tittle = courseWork[i].title
       var points = courseWork[i].creationTime
       var id = courseWork[i].id
       var id = courseWork[i]   
       ss.getRange(2, i+5).setValue(tittle);
       ss.getRange(3, i+5).setValue(points);
       ss.getRange(1, i+5).setValue(id);
  }

2 个答案:

答案 0 :(得分:0)

好的,我认为这是Google Apps脚本的错误。

Google Apps脚本应该通过在执行代码之前扫描代码来自动确定正确的权限。使用Classroom.Courses.CourseWork.list获取学生的课程需要https://www.googleapis.com/auth/classroom.coursework.student‌​s范围。

但是,如果您将此请求添加到您的代码中,然后转到文件项目属性范围,那么您就可以了看到只授予https://www.googleapis.com/auth/classroom.coursework.me

我能够通过在我的代码中添加对Classroom.Courses.CourseWork.remove(courseId, id)的随机调用来解决此问题(您可以将其注释掉,以便它实际上 调用... Google Apps脚本会检查已注释掉的代码,以确定正确的范围。 Google Apps脚本正确地检测到了此请求,并授予了正确的权限。

我会向Google报告错误,看看他们是否可以重现我们遇到的同样问题...

答案 1 :(得分:0)

我从另一篇文章中找到了解决方法。我没有足够高的分数来发布那里。

function createCoursework (id) {
  Classroom.Courses.CourseWork.create(id,
    { // doesn't work but triggers permissions correctly
  "courseId": id,
  "title": 'foo',
  "description": 'desc',
    });
}

正如Tom Hinkle所说。它不起作用,但它确实触发了访问数据所需的授权。