SQLの窓

2020年03月25日


教室と一対一のフォルダより新しく登録されたフォルダの中にあるZoom動画ファイルを該当するClassroom の コース内の該当するトピックに登録する

起動はトリガで夜間バッチです。

▼ 時間割テーブル


// *******************************************
// 教室と一対一のフォルダより新しく登録された
// フォルダの中にある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) {
		}


	}

}





【Googleの最新記事】
posted by lightbox at 2020-03-25 23:02 | Google | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり