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

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

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

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

Q&A

解決済

1回答

702閲覧

GASとLINE BOTを組み合わせてJRの運行状況

s.20

総合スコア10

Google Apps Script

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

1グッド

0クリップ

投稿2022/11/18 15:46

前提

LINE公式で、越後線と、信越本線のどちらかを送信すると、運行状況が確認できるシステム

実現したいこと

ここに実現したいことを箇条書きで書いてください。
LINEでの返信が来るようにしたい

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

ただただと「失敗しました」

該当のソースコード

GAS

1function doPost(){ 2 var url = "https://transit.yahoo.co.jp/diainfo/477/0" 3 var options = { 4 'method' : 'GET', 5 'muteHttpExceptions' : true, 6 } 7 var content = UrlFetchApp.fetch(url, options).getContentText('UTF-8'); 8 var parsere1 = Parser.data(content).from('<dt><span class="icnNormalLarge">').to('</dt>').iterate(); 9 var parsere2 = Parser.data(content).from('</dt><dd class="normal"><p>').to('</p>').iterate(); 10 for (var i = 0; i < parsere1.length; i++){ 11 parsere1[i] = parsere1[i].replace('[○]</span>',""); 12 parsere1[i] = parsere1[i].replace('\n',""); 13 parsere1[i] = parsere1[i].replace('\n',""); 14 } 15 var stid = "1Y55Qw6RvkSvq3VP8AjNVr_a3ho1AQK4pemfnJ1VfJ8w"; 16 var st = SpreadsheetApp.openById(stid).getSheetByName("test"); 17 for (i = 0 ; i < parsere1.length ; i ++){ 18 console.log(parsere1[i]); 19 console.log(parsere2[i]); 20 var url = "https://transit.yahoo.co.jp/diainfo/474/0" 21 var options = { 22 'method' : 'GET', 23 'muteHttpExceptions' : true, 24 } 25 var content = UrlFetchApp.fetch(url, options).getContentText('UTF-8'); 26 var parsers1 = Parser.data(content).from('<dt><span class="icnNormalLarge">').to('</dt>').iterate(); 27 var parsers2 = Parser.data(content).from('</dt><dd class="normal"><p>').to('</p>').iterate(); 28 for (var i = 0; i < parsers1.length; i++){ 29 parsers1[i] = parsers1[i].replace('[○]</span>',""); 30 parsers1[i] = parsers1[i].replace('\n',""); 31 parsers1[i] = parsers1[i].replace('\n',""); 32 } 33 var stid = "1Y55Qw6RvkSvq3VP8AjNVr_a3ho1AQK4pemfnJ1VfJ8w"; 34 var st = SpreadsheetApp.openById(stid).getSheetByName("test"); 35 for (i = 0 ; i < parsers1.length ; i ++){ 36 console.log(parsers1[i]); 37 console.log(parsers2[i]); 38} 39 40 var reply_token = data.events[0].replyToken; //reply token 41 var usertext = data.events[0].message.text; 42 var channel_token = "LINE TOKEN" 43var url = "https://api.line.me/v2/bot/message/reply" 44 if (usertext == "越後線" ) { 45 var message = { 46 "replyToken" : event.replyToken, 47 "messages" : [{"type": "text","text" : "越後線は、" + Parsere1 + "です。" + "\n" + Parsere1 }] 48 }; 49 50 var options = { 51 "method" : "post", 52 "headers" : { 53 "Content-Type" : "application/json", 54 "Authorization" : "Bearer " + channel_token 55 }, 56 "payload" : JSON.stringify(message) 57 }; 58 59 60 UrlFetchApp.fetch(url, options); 61 } 62 63 else { 64 var message ={ 65"replyToken" : event.replyToken, 66 "messages" : [{"type": "text","text" : "信越本線は、" + Parsers1 + "です。" + "\n" + Parsers2 }] 67 }; 68 69 var options = { 70 "method" : "post", 71 "headers" : { 72 "Content-Type" : "application/json", 73 "Authorization" : "Bearer " + channel_token 74 }, 75 "payload" : JSON.stringify(message) 76 }; 77 78 79 UrlFetchApp.fetch(url, options); 80 81 } 82 } 83 }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

退会済みユーザー👍を押しています

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

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

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

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

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

s.20

2022/11/18 15:53

スプレッドシートIDがわかるようになっていますが、公開にしていないのと、実際のプログラムで不必要だと思ったため、そのままにしています。
guest

回答1

0

ベストアンサー

45~46行目と64~65行目あたり

js

1 var message = { 2 "replyToken" : event.replyToken,

event という変数はどこにも定義されていません。
リプライトークンは、直前の reply_token に格納されてるはずですので、それを使用してください。

(修正後)

js

1 var message = { 2 "replyToken" : reply_token,

LINE Developers画面で正常にWebhookの設定が完了しており、発行したチャンネルトークン(コード中「"LINE TOKEN"」となっている部分)もGAS側に正常に書かれており、かつGASのWEBアプリがLINEからアクセスできるように正常にデプロイされているならば、
設定したチャンネルにLINEのアプリから「越後線」と入力投稿すれば、情報が返ってくるはずです。
(さすがに大丈夫とは思いますが、このコードはGASのエディタ上で「実行」ボタンを押しても動きません。あくまでも正常に設定済みのLINEチャンネルに対してLINEのアプリ上からメッセージを投稿することで動作します)

他にもエラーがあるのかもしれませんが、webアプリでデプロイしているGASはdoPost内のエラーメッセージが取得できないので、エラーの内容を把握するのが難しくなります。
https://zenn.dev/uma1100/articles/2695d1d93e238a
を参考にGCP経由でエラーログを見られるようにすると、デバッグが楽になると思います。

投稿2022/11/18 22:27

編集2022/11/18 22:36
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

s.20

2022/11/19 12:34

ありがとうございます! ご指摘いただいた通り修正したら動作しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問