4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

python anywhereでline botをデプロイする

Last updated at Posted at 2023-03-12

はじめに

  • チーム開発でAWSにデプロイしようとしたら,クレカ登録で弾かれた。
  • 別のデプロイ先を調べてたらPythonAnywhereを見つけたので試すことに。意外と記事が少なかったので一通り流れだけまとめてみた。

ターゲット

  • AWSやAzure,GCP,Herokuなどに登録をしてない人
  • line botのデプロイを比較的に簡単にやりたい人

前提スキル

  • Python及びFlaskの基礎が分かる人

開発環境

  • Windows10
  • Python 3.10.7
フレームワーク バージョン
flask 2.2.2
line-bot-sdk 2.3.0

環境の下準備

LINE Messaging APIの登録

  • line messaging apiの登録にline business idの発行が必要です。
    参考記事は以下に

LINE Messaging APIの利用登録方法~LINEアカウント開発に必要なAPIキー発行申請

  • 参考記事通りに進めていくと,プロバイダーが作成され,チャンネルアクセストークンとチャンネルシークレットが発行されるので控えてください。

PythonAnywhereの登録

デプロイ先としてPythonAnywhereを利用するので登録をします。
参考記事を以下に

PythonAnywhereの初心者アカウント(無料)へ登録する

フレームワークのインストール

  • フレームワークとして,line-bot-sdkとflaskを使うのでインストールします。
    ターミナルで以下のコマンドを実行してください。
>pip install line-bot-sdk
>pip install flask
  • インストールを確認する際は以下のコマンドを実行してください。
>pip list
  • コマンド後の結果
    flaskとline-bot-sdkのインストールが完了してることが確認できると思います。
    module list.png
    ターミナルでpipコマンドを打ってエラー吐かれた場合は,pip.exeがあるパスまで移動して同じpipコマンドを打つとできるかもしれません

これで、line botとpythonanywhereが扱える環境になりました。実際にデプロイしていきます。
※今回はデプロイを目的としてるので、メッセージを送信するとオウム返しする簡易的なline botにしています。

  • ファイル構成
    test_deploy/
    ├ main.py
    ├ requirements.txt

pip freeze > requirements.txt とコマンドを打つとテキストファイルが生成されます。

コードを以下に

main.py
import os
from flask import Flask, request, abort
from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage, QuickReply, QuickReplyButton, MessageAction, PostbackAction, FollowEvent, ImageMessage
)

app = Flask(__name__)

LINE_CHANNEL_SECRET = os.getenv("LINE_CHANNEL_SECRET")
LINE_CHANNEL_ACCESS_TOKEN = os.getenv("LINE_CHANNEL_ACCESS_TOKEN")

handler = WebhookHandler(LINE_CHANNEL_SECRET)
line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)

## 1 ##
#Webhookからのリクエストをチェックします。
@app.route("/callback", methods=['POST'])
#この関数は、LINE Bot API 経由で入力テキストを処理します。
def callback():
    # リクエストヘッダーから署名検証のための値を取得します。
    signature = request.headers['X-Line-Signature']
    # リクエストボディを取得します。
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)
    # handle webhook body
    # 署名を検証し、問題なければhandleに定義されている関数を呼び出す。
    try:
        handler.handle(body, signature)
    # 署名検証で失敗した場合、例外を出す。
    except InvalidSignatureError:
        print("Invalid signature. Please check your channel access token/channel secret.")
        abort(400)
    return 'OK'
@handler.add(MessageEvent, message=TextMessage)
# ここから実装開始
def handle_message(line_reply_event):
    line_bot_api.reply_message(line_reply_event.reply_token,TextSendMessage(text=event.message.text)) #ここでオウム返しを実装

if __name__ == "__main__":
    app.run()

下準備も終わったので、実際にデプロイしていきます。

デプロイの流れ

PythonAnywhereのデプロイ準備

  • Bash consoleをクリックします。
    Consoles.png
  • ローカルと同じくpythonanywhereにもflaskとline-bot-sdkをインストールします。
    以下のコマンドを順に実行してください。
$pip install line-bot-sdk
$pip install flask
$pip list

bash pip list.png

  • line-bot-sdkとflaskが確認できればインストール完了です。

デプロイ

  • Filesをクリックし,Directoriesに適当なディレクトリ名を入力してください。入力が完了したら、New directoryをクリックしてください。
    file.png

  • クリック後以下の画面になればディレクトリの作成は完了です。
    upload file.png

  • Upload a fileをクリックして作成したpythonファイルをアップロードします.
    requirements.txtは基本なくもよさそう

  • Webをクリックします。クリックすると以下の画面が表示されます。Nextをクリックします。
    new web app.png

  • フレームワーク選択欄があるので、Flaskを選択します。pythonのバージョンは3.9.0を選択します ※3.10でも可能
    select web app.png

  • Pathに作成したディレクトリを指定します。
    写真ではPythonファイルを指定してますが、基本ディレクトリの方が無難です
    Nextをクリックします。
    flask project.png

  • 以下の画像の ユーザー名.pythonanywhere.com はwebhookへのリクエストに扱うためのURLとなります。
    URL image.png

  • httpsの設定をEnabledとし,Reloadをすると https://.... のURLが取得できます。
    https admin.png
    webhook url.png

  • LINE Developerに移り,Webhookの設定を行います。先ほど取得した https:// のURLをWebhook URLに設定します。
    ※main.pyで/callbackの指定をしているため,以下の画像では,pythonanywhereで取得したURL後に/callbackを指定してます。
    webhook.png

  • 検証をクリックし,成功が出ればline botの作成は完了です。
    deploy.png

おわりに

マイナーなインフラの参考記事って少ないよね~、と思いながら記事を書きました。少しでも役立てれば幸いです。

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?