回答編集履歴

1

コードの追加

2021/08/04 01:32

投稿

umaretate_sika
umaretate_sika

スコア1

test CHANGED
@@ -1 +1,211 @@
1
1
  スプレッドシートを利用して、新たな関数でスプレッドシートに記載できるようにし、その関数を呼び出すことで解決。数分のラグがあり、今後訂正予定。
2
+
3
+ 以下、変更部分。
4
+
5
+
6
+
7
+ ```
8
+
9
+ function koushin(){
10
+
11
+ //Yahoo路線情報のURLを設定
12
+
13
+ var yahoo_url = "https://transit.yahoo.co.jp/traininfo/area/4/";
14
+
15
+ //情報取得
16
+
17
+ var contents = UrlFetchApp.fetch(yahoo_url).getContentText();
18
+
19
+
20
+
21
+ //更新時刻が読み取れるように設定
22
+
23
+ var myRegexp = /<span class="subText">([\s\S]*?)</i;
24
+
25
+
26
+
27
+  //null以外ならtimeに、nullなら""にする
28
+
29
+ var time = (myRegexp.exec(contents)!= null)?myRegexp.exec(contents):["",""];
30
+
31
+
32
+
33
+  //路線が読み取れるように設定
34
+
35
+ var myRegexp = /<div class="elmTblLstLine trouble">([\s\S]*?)#mdStatusTroubleLine/i;
36
+
37
+  //ざっくり抽出
38
+
39
+ var regexp = myRegexp.exec(contents);
40
+
41
+
42
+
43
+ //成功した場合
44
+
45
+ if(regexp != null){
46
+
47
+ var result = [];
48
+
49
+ var regexp2 = [];
50
+
51
+
52
+
53
+   //路線情報が読み取れるよう設定
54
+
55
+ var myRegexp2 = /">([\s\S]*?)</g;
56
+
57
+
58
+
59
+   //regexp2に路線情報を入れる
60
+
61
+ while((regexp2 = myRegexp2.exec(regexp[1])) != null){
62
+
63
+     //遅延情報がある場合、情報取得後データを配列に追加
64
+
65
+ if(regexp2[1] != "[!]"){
66
+
67
+      result.push(regexp2[1]);
68
+
69
+ }
70
+
71
+ }
72
+
73
+ }
74
+
75
+
76
+
77
+  //配列にデータがある場合、件数カウント、表示用に切り替え
78
+
79
+ if(result != null){
80
+
81
+
82
+
83
+ var counts = result.length/ 2;
84
+
85
+
86
+
87
+ var postdate = "";
88
+
89
+ for(i = 0;i<counts ;i++){
90
+
91
+ postdate += result[i*2] + ":" + result[i*2+1] + "\n";
92
+
93
+ }
94
+
95
+ }else{
96
+
97
+ //無かった場合
98
+
99
+ var postdate = "現在、事故・遅延に関する情報はありません";
100
+
101
+ }
102
+
103
+
104
+
105
+ //スプレッドシートのデータを取得
106
+
107
+ SpreadsheetApp.getActiveSheet().getRange('A2').setValue(postdate);
108
+
109
+ SpreadsheetApp.getActiveSheet().getRange('A3').setValue(time[1]);
110
+
111
+ }
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+ //単語に反応して返す
122
+
123
+ function doPost(e){
124
+
125
+ koushin();
126
+
127
+
128
+
129
+ var replyToken = JSON.parse(e.postData.contents).events[0].replyToken;
130
+
131
+ var userMessage = JSON.parse(e.postData.contents).events[0].message.text;
132
+
133
+ var url2 = 'https://api.line.me/v2/bot/message/reply';
134
+
135
+ var headers = {
136
+
137
+ 'Content-Type': 'application/json; charset=UTF-8' ,
138
+
139
+ 'Authorization': 'Bearer ' + ACCESS_TOKEN
140
+
141
+ };
142
+
143
+
144
+
145
+ const values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
146
+
147
+ //書き出し、本文、締めを連結
148
+
149
+ let body = '';
150
+
151
+ body += values[0][0] + "\n";
152
+
153
+ body += values[1][0] + "\n";
154
+
155
+ body += values[2][0] + "\n";
156
+
157
+ body += values[3][0] ;
158
+
159
+
160
+
161
+
162
+
163
+ var reply = null;
164
+
165
+ if(userMessage === '遅延情報'){
166
+
167
+ reply = body;
168
+
169
+ }
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+ var payload = JSON.stringify({ //メッセージ送信内容
178
+
179
+ 'replyToken': replyToken ,
180
+
181
+ 'messages': [{
182
+
183
+ 'type': 'text' ,
184
+
185
+ 'text': reply
186
+
187
+ }]
188
+
189
+ } )
190
+
191
+
192
+
193
+ var options = {
194
+
195
+ 'headers' : headers ,
196
+
197
+ 'method' : 'post' ,
198
+
199
+ 'payload' : payload };
200
+
201
+
202
+
203
+
204
+
205
+ // メッセージを応答
206
+
207
+ UrlFetchApp.fetch(url2 ,options)
208
+
209
+ }
210
+
211
+ ```