質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

1回答

830閲覧

GoogleClassroomとLINEの連携のGASのプログラムが動きません。

RClaic

総合スコア0

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2022/07/13 12:12

前提

GoogleClassroomとLINEを連携させてクラスルームで投稿された内容をLINEに転送するGASのプログラムなのですが動きません。原因を教えてください。

下記サイトの全角”の部分は半角の"に訂正しました。'も同様です。
しかし動きません。

▲参考にしたサイト:https://takaremonn.ml/blog/2020/10/30/google-classroom%E3%81%AE%E6%8A%95%E7%A8%BF%E3%82%92line%E3%81%AB%E8%BB%A2%E9%80%81%E3%81%99%E3%82%8B%E3%83%9C%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F/?unapproved=28&moderation-hash=12627480ea90c04da704981e7480d4cd#comment-28

実現したいこと

上記のサイトを参考にLINEに転送する。

発生している問題・エラーメッセージ

構文エラー: SyntaxError: Unexpected token ')' 行: 44 ファイル: コード.gs

該当のソースコード

GAS

1function myFunction() { 2 var lock = LockService.getUserLock(); //多重実行防止のためのロック 3 try { 4 lock.waitLock(25); 5 //****0時から6時まで処理スキップ****** 6 var day = new Date(); 7 var hour = day.getHours(); 8 Logger.log("day_hour:" + day + "_" + hour); 9 if(hour >=25 && hour <=26){ 10 //return; 11 } 12 //******************************* 13 var optionalArgs = { //最大取得コース数 14 pageSize: 10 15 }; 16 var courses = Classroom.Courses.list(optionalArgs).courses; //コースの取得 17 Logger.log(courses); 18 var i = 0; 19 for (var i = 0; i < courses.length; i++) { //コース別繰り返し処理 20 Logger.log("i:" + i); 21 var course = courses[i]; 22 var sheet = SpreadsheetApp.getActiveSheet();//シートOpen 23 var announcements = Classroom.Courses.Announcements.list(course.id).announcements; 24 var sheet_array = sheet.getDataRange().getValues(); //シートの配列への格納 25 Logger.log("sheet_array:" + sheet_array); 26 if (announcements && announcements.length > 0) { //投稿件数>0のときの処理 27 Logger.log("announcements.length:" + announcements.length); 28 if(announcements.length < 5){ 29 var an_length = announcements.length; //投稿件数<5のとき取得は投稿件数 30 } 31 else { 32 var an_length = 5; //投稿件数>5のとき取得は5件まで 33 } 34 Classroom繰り返し処理: 35 for (var j = 0; j < an_length; j++) { //取得件数まで繰り返し(配列のため初期値0) 36 var announcemessage = []; //取得物格納用1次元配列の定義 37 var announcement = announcements[j];//投稿内容(JSON) 38 Logger.log(announcement); 39 var announcement_updateTimesheet = announcement.updateTime;//投稿(更新)時刻 40 var announcement_creatoruserId = creatoruId(announcement);//UserIdを名前に変換 41 var message_announcement = announcement.text;//投稿メッセージ 42 Logger.log("sheet_array.length:" + sheet_array.length); 43 if(sheet_array.length != 1){ 44 for (var sheet_j = sheet_array.length; sheet_j > 0; sheet_j-){//シートでの一致検索 45 Logger.log("sheet_array[sheet_j – 1][2]:" + sheet_array[sheet_j – 1][2]); 46 if(sheet_array[sheet_j – 1][2] == message_announcement){//投稿メッセージがシートで発見したら次の投稿へContinue 47 continue Classroom繰り返し処理; 48 } 49 } 50 } 51 var message_announcement_attachment = ""; 52 if (announcement.materials != undefined){ //添付物があるときの処理 53 if(announcement.materials[0].driveFile != undefined){ 54 message_announcement_attachment = String.fromCharCode(10) + String.fromCharCode(10) +"*添付ファイル*" + String.fromCharCode(10) + announcement.materials[0].driveFile.driveFile.alternateLink; 55 } else 56 if(announcement.materials[0].link != undefined){ 57 message_announcement_attachment = String.fromCharCode(10) + "*リンク*" + String.fromCharCode(10) + announcement.materials[0].link.url; 58 } else if(announcement.materials[0].youtubeVideo != undefined){ 59 message_announcement_attachment = String.fromCharCode(10) +"*YouTubeVideo*" + String.fromCharCode(10) + announcement.materials[0].youtubeVideo.alternateLink; 60 } else if(announcement.materials[0].form != undefined){ 61 message_announcement_attachment = String.fromCharCode(10) +"*フォーム*" + String.fromCharCode(10) + announcement.materials[0].form.formUrl; 62 } 63 if(announcement.materials.length >= 2){ //添付物が2以上のとき 64 for(var k = 1; k < announcement.materials.length; k++){ 65 if(announcement.materials[k].driveFile != undefined){ 66 message_announcement_attachment = String.fromCharCode(10) + announcement.materials[k].driveFile.driveFile.alternateLink; 67 } else 68 if(announcement.materials[k].link != undefined){ 69 message_announcement_attachment = String.fromCharCode(10) + announcement.materials[k].link.url; 70 } else if(announcement.materials[k].youtubeVideo != undefined){ 71 message_announcement_attachment = String.fromCharCode(10) + announcement.materials[k].youtubeVideo.alternateLink; 72 } else if(announcement.materials[k].form != undefined){ 73 message_announcement_attachment = String.fromCharCode(10) + announcement.materials[k].form.formUrl; 74 } 75 } 76 } 77 } 78 //***各項目の1次元配列の作成*** 79 announcemessage.push(announcement_updateTimesheet);//投稿の作成(更新)時刻 80 announcemessage.push(announcement_creatoruserId);//投稿者 81 announcemessage.push(message_announcement);//投稿メッセージ 82 announcemessage.push(message_announcement_attachment);//投稿メッセージの添付 83 announcemessage.push("sent");//送信済フラグ 84 Logger.log("j_announcemessage:" + j +"_" + announcemessage); 85 //******* 86 var message = announcemessage[1] + String.fromCharCode(10) + String.fromCharCode(10) + announcemessage[2] + announcemessage[3];//送信メッセージの作成 87 sheet_sent(message)//送信処理 88 sheet.appendRow(announcemessage);//シート配列への追加 89 } 90 //—————- 91 Logger.log("j_sheet_array:" + j +"_" + sheet_array); 92 sheet.sort(1);//シートの並び替え 93 } 94 } 95 } 96 catch(e) { 97 Logger.log(e); 98} finally { 99 lock.releaseLock();//ロック解除 100} 101return; 102} 103function creatoruId(announcement){ 104 var announcement_creatoruserId; 105 switch (announcement.creatorUserId){ 106 case announcement.creatorUserId = "{ユーザーID1}"://?それぞれcaseで処理 107 announcement_creatoruserId = "{1さんの表示名}"; 108 break; 109 } 110 if (announcement_creatoruserId == undefined){ 111 announcement_creatoruserId = "名無しさん"; 112 } 113 return(announcement_creatoruserId); 114} 115function sheet_sent(message){ 116 var CHANNEL_ACCESS_TOKEN = '{**投稿用に伏せています**}'; //?チャンネルアクセストークンを入力する 117 var group_ID = '{**投稿用に伏せています**}'; //?グループIDを入力 118 var postData = { 119 "to" : group_ID, 120 "messages": [{ 121 "type": "text", 122 "text": message, 123 }], 124 "notificationDisabled" : "false", 125 }; 126 var url = "https://api.line.me/v2/bot/message/push"; 127 var headers = { 128 "Content-Type": "application/json", 129 'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN, 130 }; 131 var options = { 132 "method": "post", 133 "headers": headers, 134 "payload": JSON.stringify(postData) 135 }; 136 var response = UrlFetchApp.fetch(url, options); 137 return; 138 // 実際のフォルダとスプレッドシート情報を比較。 139 var updateFolderMap = []; 140 for (key in lastUpdateMap) { 141 if( UPDATE_SHEET_ID == lastUpdateMap[key].fileId ){ 142 continue; 143 } 144 if(key in sheetData) { 145 // フォルダ名がシートに存在する場合。 146 if(lastUpdateMap[key].lastUpdate > sheetData[key].lastUpdate) { 147 // フォルダが更新されている場合。 148 sheet.getRange(sheetData[key].rowNo, 2).setValue(lastUpdateMap[key].lastUpdate); 149 sheet.getRange(sheetData[key].rowNo, 3).setValue(lastUpdateMap[key].fileId); 150 updateFolderMap.push({filename:key, lastUpdate:lastUpdateMap[key].lastUpdate, fileId:lastUpdateMap[key].fileId}); 151 } 152 } else { 153 // フォルダ名がシートに存在しない場合。 154 var newRow = sheet.getLastRow() + 1; 155 sheet.getRange(newRow, 1).setValue(key); 156 sheet.getRange(newRow, 2).setValue(lastUpdateMap[key].lastUpdate); 157 sheet.getRange(newRow, 3).setValue(lastUpdateMap[key].fileId); 158 updateFolderMap.push({filename:key, lastUpdate:lastUpdateMap[key].lastUpdate, fileId:lastUpdateMap[key].fileId}); 159 } 160 } 161}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2022/07/13 12:43

エラーの出ている行を見ましょう 変な「–」があります。(45、46行目も同様) このスクリプトが正常に動作するかについては分かりかねます。
guest

回答1

0

構文エラー: SyntaxError: Unexpected token ')' 行: 44 ファイル: コード.gs

SyntaxErrorってのはコードと認識できない記述ってことです。
エラーの出てる行、その手前の行をよく見直そう

#そんでもダメダメですが

投稿2022/07/14 00:06

編集2022/07/14 00:07
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問