google-apps-script - 我的代码不再起作用,但我没有更改它
问题描述
几个月前我创建了一个脚本来为我的学生在谷歌课堂上发布作业。代码如下
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 日。我不知道谷歌课堂脚本是否有任何变化。
你们中的任何人都知道如何让它再次工作吗?
解决方案
回答:
问题似乎是在某些时候,从中获得的值的类型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
必须反映这一点。确保在循环中的任何点您的代码停止,您的工作表值都是字符串类型,并且被正确检索。
参考:
推荐阅读
- asp.net - 将文件从 Angular 5/6 上传到 WebApi c#
- android - 机器学习套件 - Android - 文本识别 - 文本方向
- php - Is it possible to replace a word before a phrase using regular expression in php?
- javascript - Javascript includes() is not a function
- json - Flutter 构建多张卡片
- java - 我在下面收到空指针异常
- php - php从数组中一一获取值
- python - 如果它们没有一个接一个地去,则更改重复的列表项
- udp - MQTT-SN 有效负载大小
- lync - 如何使用 UCMA 可信应用程序监控域中所有用户的通话活动并加入通话