前提・実現したいこと
プログラミング初心者です。
先日、ヤフーの運行情報を使用したLINEBOTを作りました。
その際、平日の6:00-7:00の間にメッセージを自動送信できるようにトリガーを設定しました。
今回はその機能に加えて、特定の単語を入力すると遅延情報が返信されるようにしたいです。
下記のコードは自作のものにWEBで見つけたものを加えています。
発生している問題・エラーメッセージ
var reply = null; if(userMessage === '遅延情報'){ reply = replyData; }else{ reply ='返信できません'; }
にて、他の単語には「返信できません」と表示されるものの、reply = replyData;が実行されない。
"replyData"だとそのままreplyDataと出力される。
該当のソースコード
//アクセストークン var ACCESS_TOKEN = ****; function main() { //Yahoo路線情報のURLを設定 var yahoo_url = "https://transit.yahoo.co.jp/traininfo/area/4/"; //情報取得 var contents = UrlFetchApp.fetch(yahoo_url).getContentText(); //更新時刻が読み取れるように設定 var myRegexp = /<span class="subText">([\s\S]*?)</i; //null以外ならtimeに、nullなら""にする var time = (myRegexp.exec(contents)!= null)?myRegexp.exec(contents):["",""]; //路線が読み取れるように設定 var myRegexp = /<div class="elmTblLstLine trouble">([\s\S]*?)#mdStatusTroubleLine/i; //ざっくり抽出 var regexp = myRegexp.exec(contents); //成功した場合 if(regexp != null){ var result = []; var regexp2 = []; //路線情報が読み取れるよう設定 var myRegexp2 = /">([\s\S]*?)</g; //regexp2に路線情報を入れる while((regexp2 = myRegexp2.exec(regexp[1])) != null){ //遅延情報がある場合、情報取得後データを配列に追加 if(regexp2[1] != "[!]"){ result.push(regexp2[1]); } } } //配列にデータがある場合、件数カウント、表示用に切り替え if(result != null){ var counts = result.length/ 2; var postdate = ""; for(i = 0;i<counts ;i++){ postdate += result[i*2] + ":" + result[i*2+1] + "\n"; } }else{ //無かった場合 var postdate = "現在、事故・遅延に関する情報はありません"; } //送信するメッセージの設定 var message = { "to": "Uc36ca6a021cb29db02fb32a5fabc048a", "messages": [ { "type": "text", "text": "Yahoo路線情報" + "\n" + postdate + "\n" + time[1] + "\n" + "https://transit.yahoo.co.jp/traininfo/area/4/" } ] }; // 送信のための諸準備 const replyData = { "method": "post", "headers": { "Content-Type": "application/json", "Authorization": "Bearer " + ACCESS_TOKEN }, "payload":JSON.stringify(message) }; UrlFetchApp.fetch("https://api.line.me/v2/bot/message/push",replyData); doPost(replyData); } //単語に反応して返す function doPost(e,replyData){ var replyToken = JSON.parse(e.postData.contents).events[0].replyToken; var userMessage = JSON.parse(e.postData.contents).events[0].message.text; var url2 = 'https://api.line.me/v2/bot/message/reply'; var headers = { 'Content-Type': 'application/json; charset=UTF-8' , 'Authorization': 'Bearer ' +ACCESS_TOKEN }; var reply = null; if(userMessage === '遅延情報'){ reply = replyData; }else{ reply ='返信できません'; } var payload = JSON.stringify({ //メッセージ送信内容 'replyToken': replyToken , 'messages': [{ 'type': 'text' , 'text': reply }] } ) var options = { 'headers' : headers , 'method' : 'post' , 'payload' : payload }; // メッセージを応答 UrlFetchApp.fetch(url2 ,options) }
試したこと
・replyDataを"replyData"にする⇒replyDataと出力される。
・https://vba-gas.info/gas-function-function
を基に作成、修正(doPost(replyData); を追加)⇒変化なし
補足情報(FW/ツールのバージョンなど)
GAS(java script)を使用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。