起動はトリガで夜間バッチです。 ▼ 時間割テーブル
// ******************************************* // 教室と一対一のフォルダより新しく登録された // フォルダの中にある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の最新記事】
- Google 共有ドライブの容量の上限について
- Google Classroom は無料の G Suite for Education アカウントが必要
- Google Apps Script : 動画を添付して Classroom の指定のトピックへ課題として投稿する
- Google Classroom のテーマ画像のサイズと既存画像をテーマ画像として使用してみた手順
- Google Chrome でスマホのソースコードをごく普通に表示して利用する
- Gmail に 実行可能なファイルの拡張子を持つファイルを格納した zip 書庫は送れません
- Gmail で添付できないファイルをエクスプローラで検索する為の文字列
- jQuery で既存 table より Firebase Database のデータを作成する
- jQuery + Bootstrap(css) + mmenu : Firebase Database 参照と更新サンプル( 新規登録テンプレートより )
- jQuery + Bootstrap(css) + mmenu : Firebase Database 新規登録テンプレート
- jQuery + Bootstrap(css) + mmenu : Firebase ログインテンプレート
- Google ドライブの WEBホスティングが無くなったので、Google の Firebase をとりあえず使う方法
- Google サイト内検索の FORM 要素による設置
- ブラウザの geolocation で Google MAP に現在地を表示。ライブラリでさらに詳細情報。API の geocoder で名称・住所から Google MAP を表示して、ライブラリで..
- Google+ に投稿するテキスト内の文字列を太字(ボールド)にしたりイタリックにしたりする方法
- Google の Plus API を使って Google+ 投稿データを jQuery UI のアコーディオン(accordion)で表示する
- Google の タスク API(ToDoリスト) を使ってタスクリストとタスクのタイトルを jQuery のプラグインでメニュー化する
- Google API の中でも単純な Task API を使って、アクセストークン取得のテンプレートを整備しました
- GitHub の google-api-php-client( PHP ) を使って、Gmail でメールを送る( 添付ファイル付き )
- GitHub の google-api-php-client( PHP ) を使って、Gmail でメールを送る