前提・実現したいこと
こんにちは、私は今pythonでlinebotを作っているpython初心者です。
現在、flask runを実行するとkeyerrorが出て、webページを立ち上げることができません。
"YOUR_CHANNEL_ACCESS_TOKEN"、"YOUR_CHANNEL_SECRET"のところはLINEディベロッパーに表示されているものに変えてみたりしましたが、同じエラーが発生しました。
これをうまく処理して、LINEBOTを完成させたいです。どうかお力添えよろしくお願いします。
発生している問題・エラーメッセージ
(line) kidoryuunosukenoMacBook-Air:line_bot_app kidoryuunosuke$ flask run * Serving Flask app "/Users/kidoryuunosuke/Desktop/pythoon/line_bot_app/line_bot/app.py" * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off Traceback (most recent call last): File "/Users/kidoryuunosuke/.pyenv/versions/anaconda3-5.0.1/envs/line/bin/flask", line 8, in <module> sys.exit(main()) File "/Users/kidoryuunosuke/.pyenv/versions/anaconda3-5.0.1/envs/line/lib/python3.6/site-packages/flask/cli.py", line 967, in main cli.main(args=sys.argv[1:], prog_name="python -m flask" if as_module else None) File "/Users/kidoryuunosuke/.pyenv/versions/anaconda3-5.0.1/envs/line/lib/python3.6/site-packages/flask/cli.py", line 586, in main return super(FlaskGroup, self).main(*args, **kwargs) File "/Users/kidoryuunosuke/.pyenv/versions/anaconda3-5.0.1/envs/line/lib/python3.6/site-packages/click/core.py", line 782, in main rv = self.invoke(ctx) File "/Users/kidoryuunosuke/.pyenv/versions/anaconda3-5.0.1/envs/line/lib/python3.6/site-packages/click/core.py", line 1259, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/Users/kidoryuunosuke/.pyenv/versions/anaconda3-5.0.1/envs/line/lib/python3.6/site-packages/click/core.py", line 1066, in invoke return ctx.invoke(self.callback, **ctx.params) File "/Users/kidoryuunosuke/.pyenv/versions/anaconda3-5.0.1/envs/line/lib/python3.6/site-packages/click/core.py", line 610, in invoke return callback(*args, **kwargs) File "/Users/kidoryuunosuke/.pyenv/versions/anaconda3-5.0.1/envs/line/lib/python3.6/site-packages/click/decorators.py", line 73, in new_func return ctx.invoke(f, obj, *args, **kwargs) File "/Users/kidoryuunosuke/.pyenv/versions/anaconda3-5.0.1/envs/line/lib/python3.6/site-packages/click/core.py", line 610, in invoke return callback(*args, **kwargs) File "/Users/kidoryuunosuke/.pyenv/versions/anaconda3-5.0.1/envs/line/lib/python3.6/site-packages/flask/cli.py", line 848, in run_command app = DispatchingApp(info.load_app, use_eager_loading=eager_loading) File "/Users/kidoryuunosuke/.pyenv/versions/anaconda3-5.0.1/envs/line/lib/python3.6/site-packages/flask/cli.py", line 305, in __init__ self._load_unlocked() File "/Users/kidoryuunosuke/.pyenv/versions/anaconda3-5.0.1/envs/line/lib/python3.6/site-packages/flask/cli.py", line 330, in _load_unlocked self._app = rv = self.loader() File "/Users/kidoryuunosuke/.pyenv/versions/anaconda3-5.0.1/envs/line/lib/python3.6/site-packages/flask/cli.py", line 388, in load_app app = locate_app(self, import_name, name) File "/Users/kidoryuunosuke/.pyenv/versions/anaconda3-5.0.1/envs/line/lib/python3.6/site-packages/flask/cli.py", line 240, in locate_app __import__(module_name) File "/Users/kidoryuunosuke/Desktop/pythoon/line_bot_app/line_bot/app.py", line 17, in <module> YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"] File "/Users/kidoryuunosuke/.pyenv/versions/anaconda3-5.0.1/envs/line/lib/python3.6/os.py", line 669, in __getitem__ raise KeyError(key) from None KeyError: 'YOUR_CHANNEL_ACCESS_TOKEN'
該当のソースコード
python
1from flask import Flask, request, abort 2import os 3 4from linebot import ( 5 LineBotApi, WebhookHandler 6) 7from linebot.exceptions import ( 8 InvalidSignatureError 9) 10from linebot.models import ( 11 MessageEvent, TextMessage, TextSendMessage, 12) 13 14app = Flask(__name__) 15 16#環境変数取得 17YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"] 18YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"] 19 20line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN) 21handler = WebhookHandler(YOUR_CHANNEL_SECRET) 22 23@app.route("/") 24def hello_world(): 25 return "hello world!" 26 27@app.route("/callback", methods=['POST']) 28def callback(): 29 # get X-Line-Signature header value 30 signature = request.headers['X-Line-Signature'] 31 32 # get request body as text 33 body = request.get_data(as_text=True) 34 app.logger.info("Request body: " + body) 35 36 # handle webhook body 37 try: 38 handler.handle(body, signature) 39 except InvalidSignatureError: 40 abort(400) 41 42 return 'OK' 43 44@handler.add(MessageEvent, message=TextMessage) 45def handle_message(event): 46 line_bot_api.reply_message( 47 event.reply_token, 48 TextSendMessage(text=event.message.text)) 49 50if __name__ == "__main__": 51# app.run() 52 port = int(os.getenv("PORT")) 53 app.run(host="0.0.0.0", port=port)
試したこと
似たような事をやっているサイトやYouTubeをみましたがわかりませんでした。
他のファイルではflask run は成功しました。
flaskのチュートリアルに従ってターミナルを操作しましたがうまくいきませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/19 11:57
2020/10/19 12:06
2020/10/19 12:32