首页 > 解决方案 > 我的代码不再起作用,但我没有更改它

问题描述

几个月前我创建了一个脚本来为我的学生在谷歌课堂上发布作业。代码如下

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 链接,作业是这些视频之一,作为附加到材料的链接。脚本应在每天上午 9:00 以 3 种不同材料发布 3 个 youtube 视频

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

GoogleJsonResponseException:Chiamata API aclassic.courses.courseWork.create non riuscita con errore:'course_work.description'(TYPE_STRING)的值无效,883(riga 69,文件“Codice”)

我认为英文的翻译类似于

GoogleJsonResponseException:对教室.courses.courseWork.create 的 API 调用不起作用,出现错误:“course_work.description”(TYPE_STRING)的值无效,883(第 69 行,文件“代码”)

这个脚本一直运行到 8 月 13 日。我不知道谷歌课堂脚本是否有任何变化。

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

标签: google-apps-scriptgoogle-classroom

解决方案


回答:

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

解决步骤:

pubblicavideo()中,函数pubblica()在循环中调用,并contarighe传递了变量。k每次运行时都会输入 this 的值pubblica

这些是有问题的行:

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

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

根据资源上的文档CourseWork, 的值description应该是 type String

创建课程作业对象时:

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

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

参考:


推荐阅读