我的代码不再有效,但我没有更改它

my code doesn't work anymore but i haven't changed it

几个月前我创建了一个脚本来为我的学生发布作业 google classroom.the 代码如下

function createTrigger() { 
  // Trigger every day at 9
  ScriptApp.newTrigger('pubblicavideo')
      .timeBased()
      .atHour(9)
      .everyDays(1) // Frequency is required if you are using atHour() or nearMinute()
      .create();
}

function onOpen() { 
  //aggiunge il bottone autotrigger con run e stop all'apertura del documento spreadsheet
  var ui = SpreadsheetApp.getUi();
  
  ui.createMenu("Auto Trigger")
    .addItem("Run","runAuto")
    .addItem("Stop","deleteTrigger")
    .addToUi();
}

function runAuto() { 
  
  // resets the loop counter if it's not 0
  refreshUserProps(); 
   // clear out the sheet
  clearData();  
  // create trigger to run program automatically
  createTrigger();
}

function refreshUserProps() {
  var userProperties = PropertiesService.getUserProperties();
  userProperties.setProperty('loopCounter', 0);
  userProperties.setProperty('contarighe', 1);
}



function deleteTrigger() {
  
  // Loop over all triggers and delete them
  var allTriggers = ScriptApp.getProjectTriggers();
  for (var i = 0; i < allTriggers.length; i++) {
    ScriptApp.deleteTrigger(allTriggers[i]);
  }
}

function pubblica(k)
{
  var corso = Classroom.Courses.get(XXXXXXXXXXXXXX);
  var foglio = SpreadsheetApp.getActive();
  var linkini = foglio.getRange("C709:C3014");
  var titolini = foglio.getRange("B709:B3014");
  var autorini = foglio.getRange("A709:A3014");
  var cell = linkini.getCell(k, 1);
  var cella = titolini.getCell(k, 1);
  var cello = autorini.getCell(k, 1);
  var link = cell.getValue();
  var titolo = cella.getValue();
  var autore = cello.getValue();
  var courseWork = {
  'title': titolo,
  'description': autore,
  'materials': [
     {'link': { "url": link}}    
],
  'workType': 'ASSIGNMENT',
  'state': 'PUBLISHED',
}
Classroom.Courses.CourseWork.create(courseWork,XXXXXXXXXXXXXX);
}

function clearData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Data');
  
  // clear out the matches and output sheets
  var lastRow = sheet.getLastRow();
  if (lastRow > 1) {
    sheet.getRange(2,1,lastRow-1,1).clearContent();
  }
}



function pubblicavideo()
{
  var pezzialgiorno = 3;   //numero di pezzi da pubblicare ogni giorno
   var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Data');
  
  
   var userProperties = PropertiesService.getUserProperties();
  var loopCounter = Number(userProperties.getProperty('loopCounter'));
  var contarighe = Number(userProperties.getProperty('contarighe'));
  // put some limit on the number of loops
  // could be based on a calculation or user input
  // using a static number in this example
  var limit = 2301;
  
  // if loop counter < limit number, run the repeatable action
  if (loopCounter < limit) {
    
    // see what the counter value is at the start of the loop
    Logger.log(loopCounter);
    
    // do stuff
   for (var i=0; i<pezzialgiorno; i++)
   {
     pubblica(contarighe);
     contarighe++;
   }
     // increment the properties service counter for the loop
    loopCounter +=1;
    userProperties.setProperty('loopCounter', loopCounter);
    userProperties.setProperty('contarighe', contarighe);
    
    // see what the counter value is at the end of the loop
    Logger.log(loopCounter);
    Logger.log(contarighe);
  }
  
  // if the loop counter is no longer smaller than the limit number
  // run this finishing code instead of the repeatable action block
  else {
    
    // Log message to confirm loop is finished
    sheet.getRange(sheet.getLastRow()+1,1).setValue("Finished");
    Logger.log("Finished");
    
     // delete trigger because we've reached the end of the loop
    // this will end the program
    deleteTrigger();  
  }
}

我放 XXXXXXXXXXX 的地方就是课程 ID。 该脚本附在一个电子表格上,该电子表格有 3 列,标题、作者和 youtube link,作业是这些视频之一,作为 link 附在 material 上。该脚本应每天在 9:00 a.m 发布。 3 个不同的 3 个 YouTube 视频 material 运行 在电子表格中的列表

当我尝试执行名为 pubblicavideo 的函数时,它说

GoogleJsonResponseException: Chiamata API a classroom.courses.courseWork.create non riuscita con errore: 'course_work.description' (TYPE_STRING), 883 (riga 69, file "Codice") 值无效

我觉得英文翻译是这样的

GoogleJsonResponseException:API 对 classroom.courses.courseWork.create 的调用无效,出现错误:'course_work.description' (TYPE_STRING) 处的值无效,883(第 69 行,文件“代码")

这个脚本在 8 月 13 日之前一直运行良好。我不知道 google 课堂脚本是否有任何变化。

你们中有人知道如何让它再次工作吗?

答案:

问题似乎是在某些时候,从 autorini.getCell(k, 1).getValue() 获得的值的类型不是导致错误的字符串。

解决步骤:

pubblicavideo()中,函数pubblica()在循环内被调用,并传递了变量contarighe。对于 pubblica 的每个 运行,此值被放入 k

这些是有问题的行:

var autorini = foglio.getRange("A709:A3014");
var cello = autorini.getCell(k, 1);
var autore = cello.getValue();

在向 Classroom.Courses.CourseWork.create() 发出请求之前,您需要检查 autore 的值。

As per the documentationCourseWork 资源上,description 的值应该是 String.

类型

创建课程作业对象时:

var courseWork = {
    'title': titolo,
    'description': autore,
    'materials': [
      {'link': { "url": link}}    
    ],
    'workType': 'ASSIGNMENT',
    'state': 'PUBLISHED',
  }

autore 的值必须反映这一点。确保在循环中的任何一点你的代码停止,你的 sheet 值都是字符串类型,并且被正确检索。

参考文献: