在 Google 课堂 API 中使用学生副本发布课程作业时出现内部错误 可能的错误?

Posted

技术标签:

【中文标题】在 Google 课堂 API 中使用学生副本发布课程作业时出现内部错误 可能的错误?【英文标题】:Internal error when publishing coursework with student copies in google clas-s-room API Possible bug? 【发布时间】:2020-03-01 14:03:59 【问题描述】:

当我使用 Clas-s-room API 发布带有学生副本的作业时。我得到API call to clas-s-room.courses.courseWork failed with error: Internal error encountered

当我成功发布草稿,然后尝试使用 API 发布作业,或者当我尝试直接发布新作业时,会发生这种情况。

将作业更改为“仅查看”可以解决这两种情况下的发布问题,但是您不会获得学生副本,并且在发布后您无法将其更改回来,并且几乎总是需要学生副本。

我可以在发布草稿后在谷歌课堂中手动发布,没有任何问题。我认为这与您在发布作业后无法制作学生副本的原因有关。

我在发布前进行了调查,学生文件夹 id 可用但尚未创建。

var assignment =  
  title: "Test File",    
  materials: [
    
      driveFile:
        driveFile: 
          id: "11klBA-80IQPaJHrpSyJHqVsK7BUWWAtoLFdwG0uJGfo", 
          title: "Sample Document"
        ,
        shareMode: "STUDENT_COPY"
        
    
  ],
  state: "PUBLISH",
  workType: "ASSIGNMENT"
;

var id = Clas-s-room.Courses.CourseWork.create(assignment, 24551294261)
Logger.log(id);

Clas-s-room.Courses.CourseWork.patch( "state": "PUBLISHED",24551294261,46981225150,updateMask:'state');

API call to clas-s-room.courses.courseWork.patch failed with error 与任一程序代码一起返回。如果将 Student_COPY 更改为查看,则代码可以正常工作。我相信这是一个错误,API 没有手动点击发布的一些发布协议。所以它失败了。我的猜测是创建 google 文件夹来存储文档。

我教 8 个班级手动发布每个作业需要很长时间,如果我犯了错误,学生可能会错过作业。

希望有解决方法或错误修复。我使用 API 发布部分是为了节省评分时间,部分是为了保持所有 8 个类相同。我可以更新到期日期或说明,而不会意外遗漏任何人。我需要 API 来发布作业,以便它可以访问作业以进行更改。

【问题讨论】:

【参考方案1】:

我找到了解决方法。您不能使用 API 发布带有学生副本的作业。 您可以使用scheduledTime: 5分钟后,系统会为您发布。

除了修补状态来发布现有作业外,您还可以修补计划以在 5 分钟内将其打开。我有点痛苦,但为 8 节课发布 3 份作业需要我半个小时。 5 分钟的等待不是一个糟糕的交易。我还没有测试过你可以设置时间有多近。我使用 5 分钟来考虑任何延迟。

顺便说一下,patch 仅适用于 title、description、state、dueDate、dueTime、maxPoints、scheduledTime、submissionModificationMode、topicId。材料不在清单上。您不能更改与作业关联的链接或文档。

【讨论】:

【参考方案2】:

由于我没有足够的声望点,Travis 是正确的。

UTC 祖鲁时间遵循以下格式: “预定时间”:“2020-06-08T01:34:55Z”,

要打印时间戳,请使用以下代码...确保在您的 Clas-s-room 函数中调用以下函数。

function schedulePost()
var now = new Date();
var extra = now.getMinutes()+5;//change the numeric time for the spread
console.log(Utilities.formatDate(now, 'Etc/GMT', 'yyyy-MM-dd\'T\'HH:'+extra+':ss.SSS\'Z\''));
;

【讨论】:

【参考方案3】:

如果我打算为将来安排它,那么我将其包含在资源中:

resource = 
    ...
    state: "DRAFT";
    ...
    ;

要立即发布,只需将状态设置为已发布:

resource = 
    ...
    state: "PUBLISHED";
    ...
;

任务会立即结束。然后无论哪种方式:

var creq = gapi.client.clas-s-room.courses.courseWork.create(courseId: 
    smeCourseId,resource: resource);
creq.execute(function(courseWork) 
    if (courseWork.error) 
        window.alert(courseWork.error.message);
    
);

【讨论】:

以上是关于在 Google 课堂 API 中使用学生副本发布课程作业时出现内部错误 可能的错误?的主要内容,如果未能解决你的问题,请参考以下文章

使用谷歌课堂 api 将成绩返回给学生

Google课堂:我看不到任何学生成绩

如何使用 Google Apps 脚本在电子表格中查找按钮的位置?

使用 Google 登录通过 Firebase 签名后如何访问课堂 API

如何在不使用API 的情况下访问Google课堂?

通过 Drive API 自动执行 Google Sheet 操作(制作副本、Google App 脚本、触发器)