teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コードの追加

2021/08/04 01:32

投稿

umaretate_sika
umaretate_sika

スコア1

answer CHANGED
@@ -1,1 +1,106 @@
1
- スプレッドシートを利用して、新たな関数でスプレッドシートに記載できるようにし、その関数を呼び出すことで解決。数分のラグがあり、今後訂正予定。
1
+ スプレッドシートを利用して、新たな関数でスプレッドシートに記載できるようにし、その関数を呼び出すことで解決。数分のラグがあり、今後訂正予定。
2
+ 以下、変更部分。
3
+
4
+ ```
5
+ function koushin(){
6
+ //Yahoo路線情報のURLを設定
7
+ var yahoo_url = "https://transit.yahoo.co.jp/traininfo/area/4/";
8
+ //情報取得
9
+ var contents = UrlFetchApp.fetch(yahoo_url).getContentText();
10
+
11
+ //更新時刻が読み取れるように設定
12
+ var myRegexp = /<span class="subText">([\s\S]*?)</i;
13
+
14
+  //null以外ならtimeに、nullなら""にする
15
+ var time = (myRegexp.exec(contents)!= null)?myRegexp.exec(contents):["",""];
16
+
17
+  //路線が読み取れるように設定
18
+ var myRegexp = /<div class="elmTblLstLine trouble">([\s\S]*?)#mdStatusTroubleLine/i;
19
+  //ざっくり抽出
20
+ var regexp = myRegexp.exec(contents);
21
+
22
+ //成功した場合
23
+ if(regexp != null){
24
+ var result = [];
25
+ var regexp2 = [];
26
+
27
+   //路線情報が読み取れるよう設定
28
+ var myRegexp2 = /">([\s\S]*?)</g;
29
+
30
+   //regexp2に路線情報を入れる
31
+ while((regexp2 = myRegexp2.exec(regexp[1])) != null){
32
+     //遅延情報がある場合、情報取得後データを配列に追加
33
+ if(regexp2[1] != "[!]"){
34
+      result.push(regexp2[1]);
35
+ }
36
+ }
37
+ }
38
+
39
+  //配列にデータがある場合、件数カウント、表示用に切り替え
40
+ if(result != null){
41
+
42
+ var counts = result.length/ 2;
43
+
44
+ var postdate = "";
45
+ for(i = 0;i<counts ;i++){
46
+ postdate += result[i*2] + ":" + result[i*2+1] + "\n";
47
+ }
48
+ }else{
49
+ //無かった場合
50
+ var postdate = "現在、事故・遅延に関する情報はありません";
51
+ }
52
+
53
+ //スプレッドシートのデータを取得
54
+ SpreadsheetApp.getActiveSheet().getRange('A2').setValue(postdate);
55
+ SpreadsheetApp.getActiveSheet().getRange('A3').setValue(time[1]);
56
+ }
57
+
58
+
59
+
60
+
61
+ //単語に反応して返す
62
+ function doPost(e){
63
+ koushin();
64
+
65
+ var replyToken = JSON.parse(e.postData.contents).events[0].replyToken;
66
+ var userMessage = JSON.parse(e.postData.contents).events[0].message.text;
67
+ var url2 = 'https://api.line.me/v2/bot/message/reply';
68
+ var headers = {
69
+ 'Content-Type': 'application/json; charset=UTF-8' ,
70
+ 'Authorization': 'Bearer ' + ACCESS_TOKEN
71
+ };
72
+
73
+ const values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
74
+ //書き出し、本文、締めを連結
75
+ let body = '';
76
+ body += values[0][0] + "\n";
77
+ body += values[1][0] + "\n";
78
+ body += values[2][0] + "\n";
79
+ body += values[3][0] ;
80
+
81
+
82
+ var reply = null;
83
+ if(userMessage === '遅延情報'){
84
+ reply = body;
85
+ }
86
+
87
+
88
+
89
+ var payload = JSON.stringify({ //メッセージ送信内容
90
+ 'replyToken': replyToken ,
91
+ 'messages': [{
92
+ 'type': 'text' ,
93
+ 'text': reply
94
+ }]
95
+ } )
96
+
97
+ var options = {
98
+ 'headers' : headers ,
99
+ 'method' : 'post' ,
100
+ 'payload' : payload };
101
+
102
+
103
+ // メッセージを応答
104
+ UrlFetchApp.fetch(url2 ,options)
105
+ }
106
+ ```