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

質問編集履歴

5

タイトルの改善

2018/01/15 08:37

投稿

poker
poker

スコア14

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

4

コードの追加

2018/01/15 08:37

投稿

poker
poker

スコア14

title CHANGED
File without changes
body CHANGED
@@ -73,5 +73,161 @@
73
73
  ^
74
74
  SyntaxError: 'break' outside loop
75
75
  ```
76
+
76
77
  初歩的な質問で大変申し訳ありません。
77
- よろしくお願いします。
78
+ よろしくお願いします。
79
+
80
+ 追記:コード全文記載します。
81
+ 終了とした関数から抜け出せない状態です。
82
+ よろしくお願いします。
83
+ ```python
84
+ # -*- coding: utf-8 -*-
85
+
86
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may
87
+ # not use this file except in compliance with the License. You may obtain
88
+ # a copy of the License at
89
+ #
90
+ # http://www.apache.org/licenses/LICENSE-2.0
91
+ #
92
+ # Unless required by applicable law or agreed to in writing, software
93
+ # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
94
+ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
95
+ # License for the specific language governing permissions and limitations
96
+ # under the License.
97
+
98
+ from __future__ import unicode_literals
99
+
100
+ import errno
101
+ import os
102
+ import sys
103
+ import tempfile
104
+ import requests
105
+ import random
106
+ import datetime
107
+ from argparse import ArgumentParser
108
+
109
+ from flask import Flask, request, abort
110
+
111
+ from linebot import (
112
+ LineBotApi, WebhookHandler
113
+ )
114
+ from linebot.exceptions import (
115
+ InvalidSignatureError
116
+ )
117
+ from linebot.models import (
118
+ MessageEvent, TextMessage, TextSendMessage,
119
+ SourceUser, SourceGroup, SourceRoom,
120
+ TemplateSendMessage, ConfirmTemplate, MessageTemplateAction,
121
+ ButtonsTemplate, ImageCarouselTemplate, ImageCarouselColumn, URITemplateAction,
122
+ PostbackTemplateAction, DatetimePickerTemplateAction,
123
+ CarouselTemplate, CarouselColumn, PostbackEvent,
124
+ StickerMessage, StickerSendMessage, LocationMessage, LocationSendMessage,
125
+ ImageMessage, VideoMessage, AudioMessage, FileMessage,
126
+ UnfollowEvent, FollowEvent, JoinEvent, LeaveEvent, BeaconEvent,
127
+ ImageSendMessage
128
+ )
129
+
130
+ app = Flask(__name__)
131
+
132
+ # get channel_secret and channel_access_token from your environment variable
133
+ channel_secret = os.getenv('LINE_CHANNEL_SECRET', '省略')
134
+ channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN', '省略')
135
+
136
+ line_bot_api = LineBotApi(channel_access_token)
137
+ handler = WebhookHandler(channel_secret)
138
+
139
+ static_tmp_path = os.path.join(os.path.dirname(__file__), 'static', 'tmp')
140
+
141
+ # function for create tmp dir for download content
142
+ def make_static_tmp_dir():
143
+ try:
144
+ os.makedirs(static_tmp_path)
145
+ except OSError as exc:
146
+ if exc.errno == errno.EEXIST and os.path.isdir(static_tmp_path):
147
+ pass
148
+ else:
149
+ raise
150
+
151
+
152
+ @app.route("/callback", methods=['POST'])
153
+ def callback():
154
+ # get X-Line-Signature header value
155
+ signature = request.headers['X-Line-Signature']
156
+
157
+ # get request body as text
158
+ body = request.get_data(as_text=True)
159
+ app.logger.info("Request body: " + body)
160
+
161
+ # handle webhook body
162
+ try:
163
+ handler.handle(body, signature)
164
+ except InvalidSignatureError:
165
+ abort(400)
166
+
167
+ return 'OK'
168
+
169
+ @handler.add(MessageEvent, message=TextMessage)
170
+ def handle_text_message(event):
171
+ text = event.message.text
172
+ if text == '占い':
173
+ line_bot_api.reply_message(
174
+ event.reply_token, TextSendMessage(text='占いスタート。\n性別を教えてください。'))
175
+ @handler.add(MessageEvent, message=TextMessage)
176
+ def handle_text_message(event):
177
+ text = event.message.text
178
+ if text in ["男","女"]:
179
+ line_bot_api.reply_message(
180
+ event.reply_token, TextSendMessage(text='誕生日を教えてください。\n(例:7月7日は「0707」と入力。)'))
181
+ @handler.add(MessageEvent, message=TextMessage)
182
+ def handle_text_message(event):
183
+ text = event.message.text
184
+ if 100 < int(text) < 1232:
185
+ line_bot_api.reply_message(
186
+ event.reply_token, TextSendMessage(text='血液型を教えてね。'))
187
+ @handler.add(MessageEvent, message=TextMessage)
188
+ def handle_text_message(event):
189
+ text = event.message.text
190
+ if text in ["A","B","AB","O"]:
191
+ line_bot_api.reply_message(
192
+ event.reply_token, TextSendMessage(text='あなたはタイプAだよ。'))
193
+ elif text == '終了':
194
+ line_bot_api.reply_message(
195
+ event.reply_token, TextSendMessage("終了します。"))
196
+ return
197
+ else:
198
+ line_bot_api.reply_message(
199
+ event.reply_token, TextSendMessage('血液型を教えて。'))
200
+ elif text == '終了':
201
+ line_bot_api.reply_message(
202
+ event.reply_token, TextSendMessage("終了します。"))
203
+ return
204
+ else:
205
+ line_bot_api.reply_message(
206
+ event.reply_token, TextSendMessage('誕生日を教えて。'))
207
+ elif text == '終了':
208
+ line_bot_api.reply_message(
209
+ event.reply_token, TextSendMessage("終了します。"))
210
+ return
211
+ else:
212
+ line_bot_api.reply_message(
213
+ event.reply_token, TextSendMessage('性別を教えてください。'))
214
+ else:
215
+ line_bot_api.reply_message(
216
+ event.reply_token, TextSendMessage('占いと入力してね。'))
217
+
218
+
219
+ if __name__ == "__main__":
220
+ arg_parser = ArgumentParser(
221
+ usage='Usage: python ' + __file__ + ' [--port <port>] [--help]'
222
+ )
223
+ arg_parser.add_argument('-p', '--port', type=int, default=5000, help='port')
224
+ arg_parser.add_argument('-d', '--debug', default=False, help='debug')
225
+ options = arg_parser.parse_args()
226
+
227
+ # create tmp dir for download content
228
+ make_static_tmp_dir()
229
+
230
+ app.run(debug=options.debug, port=options.port)
231
+
232
+
233
+ ```

3

誤字

2018/01/15 08:29

投稿

poker
poker

スコア14

title CHANGED
@@ -1,1 +1,1 @@
1
- LINE Messaging APIによる条件分岐のログラム
1
+ LINE Messaging APIによる多重ルーの抜け方
body CHANGED
@@ -1,4 +1,4 @@
1
- LINE Messaging APIによる条件分岐のログラムを作成したいのですくいきません。
1
+ LINE Messaging APIによる多重ルーから抜ける方法わかりません。
2
2
 
3
3
  作りたいものは占いbotのようなものです。
4
4
  流れは
@@ -22,8 +22,8 @@
22
22
  ⑤「bot:あなたはタイプAです。」
23
23
 
24
24
  上記のようなものになります。
25
+ ②〜④において、『終了』と入力したら一気に①に戻るプログラムにしたいのですが、うまくいきません。
25
26
 
26
- ①に関しては
27
27
  ```python
28
28
  (途中からです。)
29
29
  @handler.add(MessageEvent, message=TextMessage)
@@ -31,27 +31,47 @@
31
31
  text = event.message.text
32
32
  if text == '占い':
33
33
  line_bot_api.reply_message(
34
+ event.reply_token, TextSendMessage(text='占いスタート。\n性別を教えてください。'))
35
+ @handler.add(MessageEvent, message=TextMessage)
34
- event.reply_token, [
36
+ def handle_text_message(event):
35
- TextSendMessage(
37
+ text = event.message.text
38
+ if text in ["男","女"]:
39
+ line_bot_api.reply_message(
40
+ event.reply_token, TextSendMessage(text='誕生日を教えてください。\n(例:7月7日は「0707」と入力。)'))
41
+ @handler.add(MessageEvent, message=TextMessage)
42
+ def handle_text_message(event):
43
+ text = event.message.text
44
+ if 0100 < int(text) < 1232:
45
+ line_bot_api.reply_message(
46
+ event.reply_token, TextSendMessage(text='血液型を教えてね。'))
47
+ elif text == '終了':
48
+ line_bot_api.reply_message(
49
+ event.reply_token, TextSendMessage("終了します。"))
50
+ break #ここがエラーの出ている箇所です。
51
+ else:
52
+ line_bot_api.reply_message(
36
- text='占いスタート。\n性別を教えてください\n【男,女,その他】'
53
+ event.reply_token, TextSendMessage('誕生日を教えて。'))
54
+ elif text == '終了':
55
+ line_bot_api.reply_message(
56
+ event.reply_token, TextSendMessage("終了します。"))
37
- ),
57
+ break
38
- ]
58
+ else:
39
- )
59
+ line_bot_api.reply_message(
60
+ event.reply_token, TextSendMessage('性別を教えてください。'))
40
61
  else:
41
62
  line_bot_api.reply_message(
42
- event.reply_token, TextSendMessage('占いと入力すれば占いをスタート。'))
63
+ event.reply_token, TextSendMessage('占いと入力してね。'))
64
+
43
65
  (省略)
44
66
  ```
45
- と書きしたが、②以降を色々と試したのすが下記のような流れなってしまってうまくいきません
67
+ まで記のようにきました
46
68
 
69
+ 下記のようなエラーメッセージがでます。
70
+ ```ここに言語を入力
47
- ①「bot:「占い」と入力してください。」←ーーーーー
71
+ File "〜main.py", line 108
72
+ break
73
+ ^
48
- |      ↓   ↑      |
74
+ SyntaxError: 'break' outside loop
49
- |      ユーザーが占い以外の言葉を入力。 |
50
- ↓            |
51
- ②「bot:性別を入力してください。」        |
75
+ ```
52
- ↓                         |                          
53
- ユーザーが男・女・その他を入力しても、以外の言葉を入力しても。
54
-
55
-
56
76
  初歩的な質問で大変申し訳ありません。
57
77
  よろしくお願いします。

2

誤字

2018/01/15 03:27

投稿

poker
poker

スコア14

title CHANGED
File without changes
body CHANGED
@@ -39,7 +39,7 @@
39
39
  )
40
40
  else:
41
41
  line_bot_api.reply_message(
42
- event.reply_token, TextSendMessage('『姓名判断』と入力していただければ姓名判断開始します。'))
42
+ event.reply_token, TextSendMessage('『占い』と入力れば占いスタート。'))
43
43
  (省略)
44
44
  ```
45
45
  と書きましたが、②以降を色々と試したのですが下記のような流れになってしまってうまくいきません。

1

誤字

2018/01/13 14:12

投稿

poker
poker

スコア14

title CHANGED
File without changes
body CHANGED
@@ -50,7 +50,7 @@
50
50
  ↓            |
51
51
  ②「bot:性別を入力してください。」        |
52
52
  ↓                         |                          
53
- ユーザーが男・女・そのを入力しても、以外の言葉を入力しても。
53
+ ユーザーが男・女・そのを入力しても、以外の言葉を入力しても。
54
54
 
55
55
 
56
56
  初歩的な質問で大変申し訳ありません。