前提・実現したいこと
LineのBotをGASを用いて作っています
参考にしているサイト http://yoshikii.com/entry/linebot-expense/#comment-24
発生している問題・エラーメッセージ
SyntaxError: Unexpected token ';'(行 36)
該当のソースコード
JavaScript
1var global; 2var ACCESS_TOKEN = '2. Messaging APIで発行したアクセストークンを入力'; 3var id = '3. スプレッドシート作成でコピーしたIDを入力'; 4var dateSheet = SpreadsheetApp.openById(id).getSheetByName('3. スプレッドシート作成で作成したスプレッドシートのシート名を入力'); 5var url = 'https://api.line.me/v2/bot/message/reply'; // 応答メッセージ用のAPI URL 6 7/** 8 * doPost 9 * ユーザーがLINEにメッセージ送信した時の処理 10 **/ 11global.doPost = function (e) { 12 var userMessage = JSON.parse(e.postData.contents).events[0].message.text; 13 var messageList = userMessage.split(' '); 14 var inputdate = ''; 15 if (messageList[2]) { 16 inputdate = messageList[2]; 17 } 18 var targetRow = getExpenseRow(dateSheet, messageList[0]); 19 var targetColumn = getDateColumn(dateSheet, inputdate); 20 setValue(dateSheet, targetRow, targetColumn, parseInt(messageList[1])); 21 22 // メッセージ返信 23 replyMessage(e); 24 return ContentService.createTextOutput(JSON.stringify({ content: 'post ok' })).setMimeType(ContentService.MimeType.JSON); 25}; 26/** 27 * getExpenseRow 28 * メッセージの支出項目が何行目かを返す 29 **/ 30var getExpenseRow = function (sheet, key) { 31 // 支出項目列取得 32 var expenseData = dateSheet.getRange(2, 1, sheet.getLastRow()).getValues(); 33 expenseData.pop(); // 末尾の不要な要素削除 34 35 // 入力された支出項目と一致する行数を返却 36 for (var index = 0; index < expenseData.length; index++) { 37 if (expenseData[index] == key) { 38 return index + 2; 39 } 40 } 41 return 0; 42}; 43/** 44 * getDateColumn 45 * 支出金額を入力する日付が何列目かを返す 46 **/ 47var getDateColumn = function (sheet, inputDay) { 48 var compareDay = Utilities.formatDate(new Date(), 'JST', 'yyyy/M/d'); 49 50 if (inputDay != '') { 51 var year = new Date().getFullYear(); 52 compareDay = year + "/" + inputDay; 53 } 54 // 日付行取得 55 var dateData = sheet.getRange(1, 2, 1, sheet.getLastColumn()).getValues(); 56 dateData[0].pop(); // 末尾の不要な要素削除 57 58 // 日付フォーマット変換 59 var afterDateData = []; 60 dateData[0].forEach(function (it) { 61 afterDateData.push(Utilities.formatDate(it, 'JST', 'yyyy/M/d')); 62 }); 63 64 for (var index = 0; index < afterDateData.length; index++) { 65 if (afterDateData[index] == compareDay) { 66 return index + 2; 67 } 68 } 69 return 0; 70}; 71/** 72 * setValue 73 * 支出金額を対象セルにセットする 74 **/ 75var setValue = function (sheet, row, column, key) { 76 var oldValue = 0; 77 var newValue = 0; 78 oldValue = sheet.getRange(row, column).getValue(); 79 newValue = key + oldValue; 80 sheet.getRange(row, column).setValue(newValue); 81}; 82/** 83 * replyMessage 84 * メッセージの返信 85 **/ 86var replyMessage = function (e) { 87 var userMessage = JSON.parse(e.postData.contents).events[0].message.text; 88 var replyToken = JSON.parse(e.postData.contents).events[0].replyToken; 89 90 UrlFetchApp.fetch(url, { 91 headers: { 92 'Content-Type': 'application/json; charset=UTF-8', 93 Authorization: 'Bearer ' + ACCESS_TOKEN 94 }, 95 method: 'post', 96 payload: JSON.stringify({ 97 replyToken: replyToken, 98 messages: [ 99 { 100 type: 'text', 101 text: `「${userMessage}」を記録したよ!` 102 } 103 ] 104 }) 105 }); 106};
試したこと
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
36行目で;でエラーなら、<が正しくないような?
あなたの回答
tips
プレビュー