質問編集履歴

5

タイトルの改善

2018/01/15 08:37

投稿

poker
poker

スコア14

test CHANGED
@@ -1 +1 @@
1
- LINE Messaging APIにる多重ループの抜け方
1
+ 【Python】LINE Messaging APIにおける多重ループの抜け方
test CHANGED
File without changes

4

コードの追加

2018/01/15 08:37

投稿

poker
poker

スコア14

test CHANGED
File without changes
test CHANGED
@@ -148,6 +148,318 @@
148
148
 
149
149
  ```
150
150
 
151
+
152
+
151
153
  初歩的な質問で大変申し訳ありません。
152
154
 
153
155
  よろしくお願いします。
156
+
157
+
158
+
159
+ 追記:コード全文記載します。
160
+
161
+ 終了とした関数から抜け出せない状態です。
162
+
163
+ よろしくお願いします。
164
+
165
+ ```python
166
+
167
+ # -*- coding: utf-8 -*-
168
+
169
+
170
+
171
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may
172
+
173
+ # not use this file except in compliance with the License. You may obtain
174
+
175
+ # a copy of the License at
176
+
177
+ #
178
+
179
+ # http://www.apache.org/licenses/LICENSE-2.0
180
+
181
+ #
182
+
183
+ # Unless required by applicable law or agreed to in writing, software
184
+
185
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
186
+
187
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
188
+
189
+ # License for the specific language governing permissions and limitations
190
+
191
+ # under the License.
192
+
193
+
194
+
195
+ from __future__ import unicode_literals
196
+
197
+
198
+
199
+ import errno
200
+
201
+ import os
202
+
203
+ import sys
204
+
205
+ import tempfile
206
+
207
+ import requests
208
+
209
+ import random
210
+
211
+ import datetime
212
+
213
+ from argparse import ArgumentParser
214
+
215
+
216
+
217
+ from flask import Flask, request, abort
218
+
219
+
220
+
221
+ from linebot import (
222
+
223
+ LineBotApi, WebhookHandler
224
+
225
+ )
226
+
227
+ from linebot.exceptions import (
228
+
229
+ InvalidSignatureError
230
+
231
+ )
232
+
233
+ from linebot.models import (
234
+
235
+ MessageEvent, TextMessage, TextSendMessage,
236
+
237
+ SourceUser, SourceGroup, SourceRoom,
238
+
239
+ TemplateSendMessage, ConfirmTemplate, MessageTemplateAction,
240
+
241
+ ButtonsTemplate, ImageCarouselTemplate, ImageCarouselColumn, URITemplateAction,
242
+
243
+ PostbackTemplateAction, DatetimePickerTemplateAction,
244
+
245
+ CarouselTemplate, CarouselColumn, PostbackEvent,
246
+
247
+ StickerMessage, StickerSendMessage, LocationMessage, LocationSendMessage,
248
+
249
+ ImageMessage, VideoMessage, AudioMessage, FileMessage,
250
+
251
+ UnfollowEvent, FollowEvent, JoinEvent, LeaveEvent, BeaconEvent,
252
+
253
+ ImageSendMessage
254
+
255
+ )
256
+
257
+
258
+
259
+ app = Flask(__name__)
260
+
261
+
262
+
263
+ # get channel_secret and channel_access_token from your environment variable
264
+
265
+ channel_secret = os.getenv('LINE_CHANNEL_SECRET', '省略')
266
+
267
+ channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN', '省略')
268
+
269
+
270
+
271
+ line_bot_api = LineBotApi(channel_access_token)
272
+
273
+ handler = WebhookHandler(channel_secret)
274
+
275
+
276
+
277
+ static_tmp_path = os.path.join(os.path.dirname(__file__), 'static', 'tmp')
278
+
279
+
280
+
281
+ # function for create tmp dir for download content
282
+
283
+ def make_static_tmp_dir():
284
+
285
+ try:
286
+
287
+ os.makedirs(static_tmp_path)
288
+
289
+ except OSError as exc:
290
+
291
+ if exc.errno == errno.EEXIST and os.path.isdir(static_tmp_path):
292
+
293
+ pass
294
+
295
+ else:
296
+
297
+ raise
298
+
299
+
300
+
301
+
302
+
303
+ @app.route("/callback", methods=['POST'])
304
+
305
+ def callback():
306
+
307
+ # get X-Line-Signature header value
308
+
309
+ signature = request.headers['X-Line-Signature']
310
+
311
+
312
+
313
+ # get request body as text
314
+
315
+ body = request.get_data(as_text=True)
316
+
317
+ app.logger.info("Request body: " + body)
318
+
319
+
320
+
321
+ # handle webhook body
322
+
323
+ try:
324
+
325
+ handler.handle(body, signature)
326
+
327
+ except InvalidSignatureError:
328
+
329
+ abort(400)
330
+
331
+
332
+
333
+ return 'OK'
334
+
335
+
336
+
337
+ @handler.add(MessageEvent, message=TextMessage)
338
+
339
+ def handle_text_message(event):
340
+
341
+ text = event.message.text
342
+
343
+ if text == '占い':
344
+
345
+ line_bot_api.reply_message(
346
+
347
+ event.reply_token, TextSendMessage(text='占いスタート。\n性別を教えてください。'))
348
+
349
+ @handler.add(MessageEvent, message=TextMessage)
350
+
351
+ def handle_text_message(event):
352
+
353
+ text = event.message.text
354
+
355
+ if text in ["男","女"]:
356
+
357
+ line_bot_api.reply_message(
358
+
359
+ event.reply_token, TextSendMessage(text='誕生日を教えてください。\n(例:7月7日は「0707」と入力。)'))
360
+
361
+ @handler.add(MessageEvent, message=TextMessage)
362
+
363
+ def handle_text_message(event):
364
+
365
+ text = event.message.text
366
+
367
+ if 100 < int(text) < 1232:
368
+
369
+ line_bot_api.reply_message(
370
+
371
+ event.reply_token, TextSendMessage(text='血液型を教えてね。'))
372
+
373
+ @handler.add(MessageEvent, message=TextMessage)
374
+
375
+ def handle_text_message(event):
376
+
377
+ text = event.message.text
378
+
379
+ if text in ["A","B","AB","O"]:
380
+
381
+ line_bot_api.reply_message(
382
+
383
+ event.reply_token, TextSendMessage(text='あなたはタイプAだよ。'))
384
+
385
+ elif text == '終了':
386
+
387
+ line_bot_api.reply_message(
388
+
389
+ event.reply_token, TextSendMessage("終了します。"))
390
+
391
+ return
392
+
393
+ else:
394
+
395
+ line_bot_api.reply_message(
396
+
397
+ event.reply_token, TextSendMessage('血液型を教えて。'))
398
+
399
+ elif text == '終了':
400
+
401
+ line_bot_api.reply_message(
402
+
403
+ event.reply_token, TextSendMessage("終了します。"))
404
+
405
+ return
406
+
407
+ else:
408
+
409
+ line_bot_api.reply_message(
410
+
411
+ event.reply_token, TextSendMessage('誕生日を教えて。'))
412
+
413
+ elif text == '終了':
414
+
415
+ line_bot_api.reply_message(
416
+
417
+ event.reply_token, TextSendMessage("終了します。"))
418
+
419
+ return
420
+
421
+ else:
422
+
423
+ line_bot_api.reply_message(
424
+
425
+ event.reply_token, TextSendMessage('性別を教えてください。'))
426
+
427
+ else:
428
+
429
+ line_bot_api.reply_message(
430
+
431
+ event.reply_token, TextSendMessage('占いと入力してね。'))
432
+
433
+
434
+
435
+
436
+
437
+ if __name__ == "__main__":
438
+
439
+ arg_parser = ArgumentParser(
440
+
441
+ usage='Usage: python ' + __file__ + ' [--port <port>] [--help]'
442
+
443
+ )
444
+
445
+ arg_parser.add_argument('-p', '--port', type=int, default=5000, help='port')
446
+
447
+ arg_parser.add_argument('-d', '--debug', default=False, help='debug')
448
+
449
+ options = arg_parser.parse_args()
450
+
451
+
452
+
453
+ # create tmp dir for download content
454
+
455
+ make_static_tmp_dir()
456
+
457
+
458
+
459
+ app.run(debug=options.debug, port=options.port)
460
+
461
+
462
+
463
+
464
+
465
+ ```

3

誤字

2018/01/15 08:29

投稿

poker
poker

スコア14

test CHANGED
@@ -1 +1 @@
1
- LINE Messaging APIによる条件分岐プログラム
1
+ LINE Messaging APIによる多重ループ抜け方
test CHANGED
@@ -1,4 +1,4 @@
1
- LINE Messaging APIによる条件分岐のログラムを作成したいのですくいきません。
1
+ LINE Messaging APIによる多重ルーから抜ける方法わかりません。
2
2
 
3
3
 
4
4
 
@@ -46,9 +46,9 @@
46
46
 
47
47
  上記のようなものになります。
48
48
 
49
+ ②〜④において、『終了』と入力したら一気に①に戻るプログラムにしたいのですが、うまくいきません。
49
50
 
50
51
 
51
- ①に関しては
52
52
 
53
53
  ```python
54
54
 
@@ -64,49 +64,89 @@
64
64
 
65
65
  line_bot_api.reply_message(
66
66
 
67
- event.reply_token, [
67
+ event.reply_token, TextSendMessage(text='占いスタート。\n性別を教えてください。'))
68
68
 
69
- TextSendMessage(
69
+ @handler.add(MessageEvent, message=TextMessage)
70
70
 
71
- text='占いスタート。\n性別を教えてください。\n【男,女,その他】'
71
+ def handle_text_message(event):
72
72
 
73
- ),
73
+ text = event.message.text
74
74
 
75
- ]
75
+ if text in ["男","女"]:
76
76
 
77
+ line_bot_api.reply_message(
78
+
79
+ event.reply_token, TextSendMessage(text='誕生日を教えてください。\n(例:7月7日は「0707」と入力。)'))
80
+
81
+ @handler.add(MessageEvent, message=TextMessage)
82
+
83
+ def handle_text_message(event):
84
+
85
+ text = event.message.text
86
+
87
+ if 0100 < int(text) < 1232:
88
+
89
+ line_bot_api.reply_message(
90
+
91
+ event.reply_token, TextSendMessage(text='血液型を教えてね。'))
92
+
93
+ elif text == '終了':
94
+
95
+ line_bot_api.reply_message(
96
+
97
+ event.reply_token, TextSendMessage("終了します。"))
98
+
99
+ break #ここがエラーの出ている箇所です。
100
+
77
- )
101
+ else:
102
+
103
+ line_bot_api.reply_message(
104
+
105
+ event.reply_token, TextSendMessage('誕生日を教えて。'))
106
+
107
+ elif text == '終了':
108
+
109
+ line_bot_api.reply_message(
110
+
111
+ event.reply_token, TextSendMessage("終了します。"))
112
+
113
+ break
114
+
115
+ else:
116
+
117
+ line_bot_api.reply_message(
118
+
119
+ event.reply_token, TextSendMessage('性別を教えてください。'))
78
120
 
79
121
  else:
80
122
 
81
123
  line_bot_api.reply_message(
82
124
 
83
- event.reply_token, TextSendMessage('占いと入力すれば占いをスタート。'))
125
+ event.reply_token, TextSendMessage('占いと入力してね。'))
126
+
127
+
84
128
 
85
129
  (省略)
86
130
 
87
131
  ```
88
132
 
89
- と書きしたが、②以降を色々と試したのすが下記のような流れなってしまってうまくいきません
133
+ まで記のようにきました
90
134
 
91
135
 
92
136
 
93
- ①「bot:「占い」と入力してください。」←ーーーーー
137
+ 下記のようなエラメッセジがでます。
94
138
 
95
- |      ↓   ↑      |
139
+ ```ここに言語を入力
96
140
 
97
-      ユーザーが占い以外の言葉を入力。
141
+ File "〜main.py", line 108
98
142
 
99
-            |
143
+ break
100
144
 
101
- ②「bot:性別を入力してください。」       
145
+ ^
102
146
 
103
-                         |                          
147
+ SyntaxError: 'break' outside loop
104
148
 
105
- ユーザーが男・女・その他を入力しても、以外の言葉を入力しても。
149
+ ```
106
-
107
-
108
-
109
-
110
150
 
111
151
  初歩的な質問で大変申し訳ありません。
112
152
 

2

誤字

2018/01/15 03:27

投稿

poker
poker

スコア14

test CHANGED
File without changes
test CHANGED
@@ -80,7 +80,7 @@
80
80
 
81
81
  line_bot_api.reply_message(
82
82
 
83
- event.reply_token, TextSendMessage('『姓名判断』と入力していただければ姓名判断開始します。'))
83
+ event.reply_token, TextSendMessage('『占い』と入力れば占いスタート。'))
84
84
 
85
85
  (省略)
86
86
 

1

誤字

2018/01/13 14:12

投稿

poker
poker

スコア14

test CHANGED
File without changes
test CHANGED
@@ -102,7 +102,7 @@
102
102
 
103
103
  ↓                         |                          
104
104
 
105
- ユーザーが男・女・そのを入力しても、以外の言葉を入力しても。
105
+ ユーザーが男・女・そのを入力しても、以外の言葉を入力しても。
106
106
 
107
107
 
108
108