停留在G Suite开发者快速入门上,以“检查学生在Google Meet课程中的出勤率”

问题描述 投票:1回答:1

我将非常感谢您的任何投入。谢谢;我正在使用G Suite开发人员快速入门来参加会议出席脚本https://developers.google.com/gsuite/add-ons/editors/sheets/quickstart/attendance不幸的是,在使用提供的代码并进行了调整之后,我总是为所有学生获得“缺席”或“出席”(无论他们是否在场),具体取决于我是否在其中使用了“ false”的“ null”用于applicationName'meet'的活动的if语句。这是我作为超级用户使用的代码:

...

    function onOpen() {
      var ui = SpreadsheetApp.getUi();
  ui.createMenu('Opciones SG')
      .addItem("Importar Curso", 'importCourses')
      .addItem('Verificar Asistencia', 'checkAll')
      .addToUi();
} 

    function importCourses() {
  var optionalArgs = {
    teacherId: 'me',
    pageSize: 5
  };
  var response = Classroom.Courses.list();
  var courses = response.courses;
  for (var i = 0; i < 1; i++) {
    var courseName = courses[i].name;
    var courseId = courses[i].id;
    insertCourse(courseName, courseId)
  }
}

function insertCourse(courseName, courseId) {
    var spreadsheetName = courseName + "(" + courseId + ")"
    var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    var yourNewSheet = activeSpreadsheet.getSheetByName(spreadsheetName);

    if (yourNewSheet != null) {
        return
    }
    yourNewSheet = activeSpreadsheet.insertSheet();
    yourNewSheet.setName(spreadsheetName);
    yourNewSheet.appendRow(['Nombre', 'Email', 'Asistencia'])
    yourNewSheet.setFrozenRows(1)
    var studentNames = getRoster(courseId)["studentNames"]
    var studentEmails = getRoster(courseId)["studentEmails"]
    for (var i = 0; i < studentNames.length; i++) {
      yourNewSheet.appendRow([studentNames[i],studentEmails[i]])
    }
    yourNewSheet.autoResizeColumns(1, 2)
    yourNewSheet.setFrozenColumns(2)
  }

function getRoster(courseId) {
  var studentNames = []
  var studentEmails = []
  var optionalArgs = {
      pageSize: 100
  };
  var response = Classroom.Courses.Students.list(courseId, optionalArgs)
  var students = response.students

  for (var i = 0; i < 100; i++) {
    try {
      studentNames.push(students[i].profile.name.fullName)
      studentEmails.push(students[i].profile.emailAddress)
    } catch (err) {
       return { "studentNames":studentNames, "studentEmails":studentEmails }
   }
 }
}

function checkAll() {
  var ss = SpreadsheetApp.getActiveSheet();
  var sheet = ss.getDataRange().getValues();
  for (var i = 2; i < sheet.length * 100; i++){
    var meetCode = getCleanCode(sheet[0][i])
    // No Meet code given
    if (meetCode == null) {
      break;
    }
    else {
      // check whether each student was present in Meet
      checkMeet(meetCode, i+1);
    }
  }
}

function checkMeet(meetCode, index) {
  // universal settings - static
  var userKey = 'all';
  var applicationName = 'meet';
  var ss = SpreadsheetApp.getActiveSheet();
  var sheet = ss.getDataRange().getValues();
  for (var i = 0; i < sheet.length-1; i++) {
    var emailAddress = sheet[i+1][1]
    var optionalArgs = {
      event_name: "call_ended",
      filters: "identifier==" + emailAddress + ",meeting_code==" + meetCode
    };
    try {
      var response = AdminReports.Activities.list(userKey, applicationName, optionalArgs);
      var activities = response.items;
      if (activities == false) {
        markAbsent(ss,i+2,index)
      }
      else {
        markPresent(ss,i+2,index)
      }
    } catch (err) {
        continue
     }
  }
}

function getCleanCode(meetCode) {
  try{
    return meetCode.replace("/-/g","")
  } catch (err) { return meetCode; }
}

function markAbsent(sheet, i, j) {
    var cell = sheet.getRange(i, j);
    cell.setValue("Absent");
}

function markPresent(sheet, i, j) {
    var cell = sheet.getRange(i, j);
    cell.setValue("Present");
}

...

google-apps-script google-classroom google-hangouts
1个回答
0
投票

为了获得正确的代码功能,请检查if (activities == null)if (activities == undefined)-不是if (activities == false)

  • 如果没有响应项(即没有找到给定用户和会议代码的项,则-activities将是undefined,而不是false
  • [if (activities == false)将永远无法实现,如果您使用它,所有参与者将被标记为出席者
  • [另一方面,如果activities == undefined由于其他原因-例如由于您输入了错误的会议代码(请不要忘记通过有效的会议代码替换'Asistencia'),则所有参与者都将被标记为absent
  • 请注意,Reports API会有一些延迟,因此不要期望实时获取参与数据。
  • 如果所有参与者都标记为absent-可能数据尚未传播,请等待一段时间,然后重试。
  • 请确保将正确的见面代码传递给脚本。您的见面代码应类似于xxx-xxxx-xxx
  • 为了获得正确的功能,脚本需要删除-。为此,请在function getCleanCode(meetCode)行中将return meetCode.replace("/-/g","")更改为return meetCode.replace(/-/g, "");
  • 关于注释中的问题:here,您可以看到可用于过滤的所有可用Hangouts Meet Audit Activity Events,而不是meeting_code。不幸的是,时间戳记不是可能的查询参数之一。
© www.soinside.com 2019 - 2024. All rights reserved.