Google apps script 查找Google Meet特定开始时间以参加会议
我试着用“谷歌应用脚本快速启动”来参加会议。这很有效,但它不能确定会面的开始时间或结束时间的具体范围,所以我添加了开始时间。 在stackoverflow用户的大力支持下,所开发的代码允许教师和其他教育工作人员在特定的时间范围内参加特定的会议,以获得特定的会议代码集。 Chrome extensions需要向您的计算机中添加内容,需要时间来管理所获取的数据,并且只能在实际会话期间访问这些内容Google apps script 查找Google Meet特定开始时间以参加会议,google-apps-script,Google Apps Script,我试着用“谷歌应用脚本快速启动”来参加会议。这很有效,但它不能确定会面的开始时间或结束时间的具体范围,所以我添加了开始时间。 在stackoverflow用户的大力支持下,所开发的代码允许教师和其他教育工作人员在特定的时间范围内参加特定的会议,以获得特定的会议代码集。 Chrome extensions需要向您的计算机中添加内容,需要时间来管理所获取的数据,并且只能在实际会话期间访问这些内容 var emailAddress = sheet[i+1][1] var
var emailAddress = sheet[i+1][1]
var optionalArgs = {
startTime: formatStartDate(),
event_name: "call_ended",
filters: "identifier==" + emailAddress + ",meeting_code==" + meetCode
};
function formatStartDate(){
let date = new Date();
const offset = date.getTimezoneOffset();
let offsetDate = new Date(date.getTime() - (offset*60*1000));
return offsetDate.toISOString();
}
…完整的“谷歌应用脚本快速启动”代码加上上面的数据如下所示:
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Asistencia')
.addItem("Cursos", 'importCourses')
.addItem('Asistencia', 'checkAll')
.addToUi();
}
function importCourses() {
var optionalArgs = {
teacherId: 'me',
pageSize: 5
};
var response = Classroom.Courses.list(optionalArgs);
var courses = response.courses;
for (var i = 0; i < 2; 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])
if (meetCode == null) {
break;
}
else {
checkMeet(meetCode, i+1);
}
}
}
function checkMeet(meetCode, index) {
var userKey = 'all';
var applicationName = 'meet';
var ss = SpreadsheetApp.getActiveSheet();
var sheet = ss.getDataRange().getValues();
var DateValue = ss.getRange(1, 1).getValues();
for (var i = 0; i < sheet.length-1; i++) {
var emailAddress = sheet[i+1][1]
var optionalArgs = {
startTime: formatStartDate(),
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 == undefined) {
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("A");
}
function markPresent(sheet, i, j) {
var cell = sheet.getRange(i, j);
cell.setValue("");
}
function formatStartDate(){
let date = new Date();
const offset = date.getTimezoneOffset();
let offsetDate = new Date(date.getTime() - (offset*145*1000));
return offsetDate.toISOString();
}
函数onOpen(){
var ui=SpreadsheetApp.getUi();
ui.createMenu('Asistencia')
.addItem(“Cursos”,“importCourses”)
.addItem('Asistencia','checkAll')
.addToUi();
}
函数importCourses(){
变量optionalArgs={
老师:“我”,
页面大小:5
};
var响应=教室.课程.列表(可选参数);
var课程=响应课程;
对于(变量i=0;i<2;i++){
var courseName=courses[i]。名称;
var courseId=courses[i].id;
insertCourse(courseName,courseId)
}
}
函数insertCourse(courseName,courseId){
变量spreadsheetName=courseName+“(+courseId+”)
var activeSpreadsheet=SpreadsheetApp.getActiveSpreadsheet();
var yourNewSheet=activeSpreadsheet.getSheetByName(电子表格名称);
如果(您的新闻纸!=null){
返回
}
yourNewSheet=activeSpreadsheet.insertSheet();
yourNewSheet.setName(电子表格名称);
yourNewSheet.appendRow(['Nombre','Email','Asistencia']))
yourNewSheet.setFrozenRows(1)
var studentNames=get花名册(courseId)[“studentNames”]
var studentEmails=get花名册(courseId)[“studentEmails”]
对于(var i=0;i