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

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

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

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Python 3.x

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

Q&A

解決済

1回答

494閲覧

main.pyが実行できません。

rama-rama_

総合スコア3

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Python 3.x

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

0グッド

0クリップ

投稿2022/08/10 05:07

前提

chrome OSのlinuxコンテナでpythonを実行しています。

実現したいこと

以下のようなエラーが発生しbotを立ち上げることができません。
ファイルに問題があるということはわかったのですがどこにファイルが有るのか、どう改善すればよいのかがわかりません。

発生している問題・エラーメッセージ

File "/usr/lib/python3.9/os.py", line 679, in __getitem__ raise KeyError(key) from None

該当のソースコード

python

1from flask import Flask, request, abort 2 3from linebot import ( 4 LineBotApi, WebhookHandler 5) 6from linebot.exceptions import ( 7 InvalidSignatureError 8) 9from linebot.models import ( 10 MessageEvent, TextMessage, TextSendMessage, 11) 12import os 13 14app = Flask(__name__) 15 16#環境変数取得 17YOUR_CHANNEL_ACCESS_TOKEN = os.environ["アクセストークンを記述しています"] 18YOUR_CHANNEL_SECRET = os.environ["チャンネルシークレットを記述しています"] 19 20line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN) 21handler = WebhookHandler(YOUR_CHANNEL_SECRET) 22 23@app.route("/callback", methods=['POST']) 24def callback(): 25 # get X-Line-Signature header value 26 signature = request.headers['X-Line-Signature'] 27 28 # get request body as text 29 body = request.get_data(as_text=True) 30 app.logger.info("Request body: " + body) 31 32 # handle webhook body 33 try: 34 handler.handle(body, signature) 35 except InvalidSignatureError: 36 abort(400) 37 38 return 'OK' 39 40 41@handler.add(MessageEvent, message=TextMessage) 42def handle_message(event): 43 line_bot_api.reply_message( 44 event.reply_token, 45 TextSendMessage(text=event.message.text)) 46 47 48if __name__ == "__main__": 49# app.run() 50 port = int(os.getenv("PORT", 5000)) 51 app.run(host="0.0.0.0", port=port)

補足情報(FW/ツールのバージョンなど)

python3.9.2
chromium OS linuxコンテナ

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

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

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

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

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

guest

回答1

0

ベストアンサー

「os.environ」で指定した名前の環境変数が存在していないです。
環境変数を確認してください。

投稿2022/08/10 05:16

Matsumon0104

総合スコア1005

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

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

rama-rama_

2022/08/10 05:32

ソースコード内の #環境変数の取得 の記述が間違っていますか? どのように修正したら良いでしょうか。 おそらくYOUR_CHANNEL_ACCESS_TOKENとYOUR_CHANNEL_SECRETを環境変数にするのだと思います。
Matsumon0104

2022/08/10 05:36

「os.environ」で指定されているキーがプログラムを実行するPC上の環境変数として登録されていることを確認してください。 また、登録されているという認識の下でも、誤字等で取得できない場合もありますので、一文字ずつ確認してみてください。
rama-rama_

2022/08/10 06:09

何度もすみません。 自分は知識があまりないのでソースコードにどんな誤りがあるのかわかりません。 環境変数が存在しないことはわかったのですが、どう修正したら良いですか?
Matsumon0104

2022/08/10 06:25 編集

おそらく、何らかのプログラムサンプルをそのままコピーしてきたものと推測しますが、 下記の「””」に囲まれている部分は、プログラム実行前に環境変数を登録しないといけません。 YOUR_CHANNEL_ACCESS_TOKEN = os.environ["アクセストークンを記述しています"] YOUR_CHANNEL_SECRET = os.environ["チャンネルシークレットを記述しています"] どういった値が必要なのかは、そのサンプルプログラムの記事にかいてあるともいます。 正しい名前で正しい環境変数を登録すると、プログラムの修正は必要ない可能性もあります。 サンプルプログラムがテストされたソースをそのまま掲載している場合は、おそらく動くかと思います。
rama-rama_

2022/08/10 06:48

ありがとうございます、解決しました(まだ違う課題が残っていましたが...)!
Matsumon0104

2022/08/10 06:50

それは、よかったです。 初心者のうちで記事を参考にする際は、億劫にならず手順を上から順になぞっていった方がよいです。
rama-rama_

2022/08/10 07:03

はい、親切にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問