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

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

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1359閲覧

Line bot作成について

daichi-onoue

総合スコア53

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/03/30 05:27

編集2020/03/30 05:39

前提・実現したいこと

Lineでのbotを作成したいです。
基本的な部分は作成できたのですが、Webスクレイピングがうまくいきません。
下記のソースですと、
待ち時間
と入力すると、
表示します
と帰ってきますが、
表示します ではなく、https://example.comのソースコード(191行目~535行目)を表示させたいです。
下記ソースを少し編集しました。

発生している問題

webスクレイピングができない

ソース

JavaScript

1 2function doPost(e) { 3 var replyToken= JSON.parse(e.postData.contents).events[0].replyToken; 4 if (typeof replyToken === 'undefined') { 5 return; 6 } 7 8 var url = 'https://api.line.me/v2/bot/message/reply'; 9 var channelToken = 'ここにアクセストークン(ロングターム)を貼り付け'; 10 11 var input = JSON.parse(e.postData.contents).events[0].message; 12 13 var message = 'こんにちは'; 14 var options = { 15 method : "GET" 16}; 17 18//アクセス先URLにGETリクエストを送信し、レスポンスを取得 19var response = UrlFetchApp.fetch("http://cfabond2020.php.xdomain.jp/ma.php",options); 20 21//レスポンスからページソース(内容)を取得 22var content = response.getContentText("UTF-8"); 23 24var regex = /<div>(.*)</div>/g; 25 26var match; 27var ct = 0; 28var data = []; 29 30while((match = regex.exec(content)) !== null){ 31 Logger.log(match); 32 data[ct] = match[1]; 33 ct++; 34} 35var plain = content.replace(/</?[^>]+>/ig, ""); 36 37var message1 = encodeURIComponent(data); 38 39 40 41 if(input.type == 'text') { 42 if(input.text.match('待ち時間')) { 43 message = message1; 44 } 45 } 46 47 var messages = [{ 48 'type': 'text', 49 'text': message, 50 }]; 51 52 UrlFetchApp.fetch(url, { 53 'headers': { 54 'Content-Type': 'application/json; charset=UTF-8', 55 'Authorization': 'Bearer ' + channelToken, 56 }, 57 'method': 'post', 58 'payload': JSON.stringify({ 59 'replyToken': replyToken, 60 'messages': messages, 61 }), 62 }); 63 return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON); 64} 65

試したこと

色々と調べたのですが、webスクレイピングの方法を書いているサイトがありませんでした。一つだけ見つけたのですが、(https://for-ne.info/gas)少しやりたいことが違って、、でもソースは使えると思います。

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

Google apps script を使用しています。

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

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

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

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

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

tsubaki961

2020/03/30 06:02 編集

Postman等HTTPリクエストを簡易的に行うツールで、 `http://cfabond2020.php.xdomain.jp/ma.php` にGETリクエストを送った際のレスポンスは確認しましたか?
daichi-onoue

2020/03/31 00:12

確認してません。 どのように確認すれば良いのでしょうか?
papinianus

2020/03/31 16:36

いまわたしが http://cfabond2020.php.xdomain.jp/ma.php を開くと 193 行目はテーブルの途中ですし全体で478行しかなく、どこを取りたいか不明です。 また、cfabond2020 のサイト自体質問者様の管理するサイトだと思いますが(そうでない場合、スクレイプが利用規約に反しているか確認が必要です)、であれば、bot に読み出させるページは別ページで作ったほうがよいです。どのみちlineではhtmlタグがそのままは使えないと思うので、加工の手間がかかり、思ったところが抜き出せないレベルでは、そうした処理でまた苦労することが強く予想されます。
guest

回答1

0

自己解決

他の質問に移動しました。
プロフィールから、次の質問を確認してください。

投稿2020/04/01 04:42

daichi-onoue

総合スコア53

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問