質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1733閲覧

LINEBOT作成時のKeyerrorがわかりません

tokairyu

総合スコア2

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/10/19 10:03

前提・実現したいこと

こんにちは、私は今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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

下記に書き換えるとどうでしょうか?"の中はご自身の値に置き換えてください。

Python

1YOUR_CHANNEL_ACCESS_TOKEN = "YOUR_CHANNEL_ACCESS_TOKEN" 2YOUR_CHANNEL_SECRET = "YOUR_CHANNEL_SECRET"

投稿2020/10/19 11:08

takutakuya

総合スコア979

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tokairyu

2020/10/19 11:57

ご回答ありがとうございます! 成功しました、すごく早く回答して下さってめちゃくちゃ有り難かったです。 ありがとうございました!!!
takutakuya

2020/10/19 12:06

herokuなどにデプロイする際は、環境変数にこの2つの値を登録し、Pythonのコードでは環境変数から持ってきたほう(もとのos.environを使って)がセキュリティ的には良いと思います。 環境変数として登録されていなかったので、KeyErrorになっていたと思われます。
tokairyu

2020/10/19 12:32

ありがとうございます! herokuに登録はできたと思いますので、環境変数の方も調べてやってみます、圧倒的感謝です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問