// *******************************************
// 教室と一対一のフォルダより新しく登録された
// フォルダの中にあるZoom動画ファイルを該当する
// Classroom の コース内の該当するトピック
// に登録する
// *******************************************
function myFunction() {
// 教室用のフォルダ / 共有ドライブ に作成済
// ( id は、表示されている URL より取得 )
var folder = DriveApp.getFolderById("1o-C4Vn-2zBYn8ENOAvVwd3g8BNp9xS-E");
var Iterator = folder.getFolders();
// フォルダ内の一覧
while (Iterator.hasNext()) {
var folder = Iterator.next();
// デバッグ用
// GmailApp.sendEmail("メールアドレス", "Zoom 動画 フォルダ名", folder.getName());
// 動画が格納されているフォルダ名( Zoom が自動作成したもの )
var target = folder.getName();
// Zoom フォルダ名より曜日番号を取得
var youbiNum = getYoubi(target);
var spreadsheet = SpreadsheetApp.getActive();
var timeNum = getTime(spreadsheet, target);
if (timeNum == -1) {
continue;
}
var i = 1;
var exist = false;
while (true) {
// 登録済のフォルダを排除する為に順に比較していく
var targetRange = spreadsheet.getRange('A' + i);
var cellWork = targetRange.getValue().toString();
if (cellWork == '') {
// 新規なので、スプレッドシートの A 列の最後に追加する
targetRange.setValue(target);
// MIME で絞ってファイル一覧を取得
var files = folder.getFilesByType("video/mp4");
// フォルダ内の動画ファイルをチェック
while (files.hasNext()) {
var file = files.next();
// 拡張子 .mp4 のみを取得
var work = file.getName();
var exts = work.split(".");
if (exts[1] != "mp4") {
continue;
}
// Google ドライブ上の 動画の ID
var fileId = file.getId();
var courseId = getCourseId(spreadsheet, youbiNum, timeNum);
// 本来は条件を元に決定する
var topicId = getTopicId(spreadsheet, youbiNum, timeNum);
// 課題作成用の JSON
var json = {
"materials": [
{
"driveFile": {
"driveFile": {
"id": fileId
},
"shareMode": "VIEW"
}
}
],
"description": "動画の補足説明",
"assigneeMode": "ALL_STUDENTS",
"state": "PUBLISHED",
"title": target,
"topicId": topicId,
"workType": "ASSIGNMENT"
};
// デバッグ用
// GmailApp.sendEmail("メールアドレス", "JSON", JSON.stringify(json));
// 課題を投稿
try {
Classroom.Courses.CourseWork.create(json, courseId);
}
catch(e) {
targetRange.setValue("");
GmailApp.sendEmail("メールアドレス", "Classroom 投稿エラー", target);
}
}
break;
}
else {
if (cellWork == target) {
exist = true;
break;
}
else {
i++;
}
}
}
}
}
// *******************************************
// Zoom フォルダ名より曜日番号を取得
// *******************************************
function getYoubi(folderName) {
var ymdString = folderName.substr(0, 10);
var dateData = new Date(ymdString);
var youbiNum = dateData.getDay();
return youbiNum;
}
// *******************************************
// Zoom フォルダ名より時間割テーブル上の
// 時限番号を取得
// *******************************************
function getTime(spreadsheet, folderName) {
var timeNum = -1;
var rangeData1 = [];
var rangeData2 = [];
// C 列にある時限の時間範囲を配列で取得
for (var i = 1; i < 10; i++) {
rangeData1.push(spreadsheet.getRange("C" + (4 + 4 * (i - 1))).getValue().toString());
rangeData2.push(spreadsheet.getRange("C" + (5 + 4 * (i - 1))).getValue().toString());
}
// var rangeData1 = ["09:20:00", "11:00:00", "13:30:00", "15:10:00"];
// var rangeData2 = ["10:59:00", "12:40:00", "15:09:00", "16:50:00"];
// 対象の時刻部分を取得
var ymdString = folderName.substr(0, 19);
ymdString = ymdString.replace(/\./g, ":")
var dateData = new Date(ymdString);
// 範囲を持つ配列より時限を決定
for (var i = 0; i < 9; i++) {
if (rangeData1[i] != "") {
var rangeWork1 = new Date(folderName.substr(0, 10) + " " + rangeData1[i]);
var rangeWork2 = new Date(folderName.substr(0, 10) + " " + rangeData2[i]);
if (rangeWork1 <= dateData && dateData <= rangeWork2) {
timeNum = i + 1;
}
}
}
return timeNum;
}
// *******************************************
// 曜日と時限よりコースを取得
// *******************************************
function getCourseId(spreadsheet, youbiNum, timeNum) {
var youbiRange = ["", "D", "E", "F", "G", "H", "I"]
var targetRange = spreadsheet.getRange(youbiRange[youbiNum] + (2 + 4 * (timeNum - 1)));
var courseId = targetRange.getValue().toString();
return courseId;
}
// *******************************************
// 曜日と時限よりトピックを取得
// *******************************************
function getTopicId(spreadsheet, youbiNum, timeNum) {
var youbiRange = ["", "D", "E", "F", "G", "H", "I"]
var targetRange = spreadsheet.getRange(youbiRange[youbiNum] + (3 + 4 * (timeNum - 1)));
var topicId = targetRange.getValue().toString();
return topicId;
}
// *******************************************
// 作業用のコースID 一覧( 日本語名も ) を K・L
// 列に作成
// トピック一覧も N・O 列に作成
// *******************************************
function setCourseId() {
var spreadsheet = SpreadsheetApp.getActive();
var json = Classroom.Courses.list();
var cnt = json.courses.length;
for (var i = 0; i < cnt; i++) {
var targetRange = spreadsheet.getRange('K' + (i + 1));
targetRange.setValue(json.courses[i].id);
targetRange = spreadsheet.getRange('L' + (i + 1));
targetRange.setValue(json.courses[i].name);
}
var jsonTopic = null;
var l = 0;
for (var i = 0; i < cnt; i++) {
jsonTopic = Classroom.Courses.Topics.list(json.courses[i].id);
try {
for (var j = 0; j < jsonTopic.topic.length; j++) {
var targetRange = spreadsheet.getRange('N' + (l + 1));
targetRange.setValue(jsonTopic.topic[j].topicId);
targetRange = spreadsheet.getRange('O' + (l + 1));
targetRange.setValue(jsonTopic.topic[j].name);
l++;
}
}
catch(e) {
}
}
}