LoginSignup
0
1

More than 3 years have passed since last update.

初心者がFlaskでlinebotを作成してHerokuでデプロイする

Last updated at Posted at 2020-05-18

はじめに

この記事を描こうとした理由を書かせていただきます。
私は、2020年3月プログラミングを学習し始めた者です。その為、学習の記録やアウトプット、再度読めるようにと記事にしようとした次第です。
またここに書かれている事は、様々な記事を参考にしたものです。
そして、linebotを作成した経緯とつまづいてしまった所を書いていきたいと思います。
また何か質問があれば、答えられるものがあるかもしれないので、分からないものがありましたら気軽に質問を投げてみてください。

目次

・Heroku&LINE開発者アカウント作成
・コーディング
・Git hub push
・Heroku push
・line連携
・実装

Heroku&LINE開発者アカウント作成

こちらは、他サイトをご覧になって、作成して頂ければ思います。

コーディング

とりあえず適当にディレクトリを作成して、
下記のファイルを作成したディレクトリに作成します。
--"Directory"
|-app.py
|-Procfile
|-requirements.txt
|-runtime.txt

まずは、app.pyですが、コピペでいいです。
コピペしたら、諸々をインストールしないと使えませんので、調べてインストールします。
コード中で気になる物はご自身で調べてください。

app.py
from flask import Flask, request, abort

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)
import os

app = Flask(__name__)

line_bot_api = LineBotApi('YOUR_ACESS_TOKEN')
handler = WebhookHandler('CHANNEL_SECRET')

@app.route("/")
def hello_world():
    return "hello world!"


@app.route("/callback", methods=['POST'])
def callback():
    # get X-Line-Signature header value
    signature = request.headers['X-Line-Signature']

    # get request body as text
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    # handle webhook body
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)

    return 'OK'


@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text))


if __name__ == "__main__":
    # app.run()
    port = int(os.getenv("PORT"))
    app.run(host="0.0.0.0", port=port)

Procfileはファイルの中に、コードを書くのが少し工夫が入ります。
参考になるファイルをみて、ご自身で調べて書いてみて下さい。
https://qiita.com/1-row/items/80f89c8ada2e61f04446

web: python app.py

続いて、requirements.txt何ですが、下記のように書かなければいけません。
flaskとline-bot-sdkのバージョンを確認して、記入してもいいですが、
このようなコマンドで記入してもいいと思います。書き方は、個人に任せます。

$ pip3 freeze > requirements.txt
requirements.txt
Flask==1.1.2
line-bot-sdk==1.16.0

runtime.txtのファイルですが、
こちらはPythonのバージョンを確認して書いて下さい

runtime.txt
python-3.8.0

Git hub push

コードを書いたら、GitHubにPushして下さい。
まずは、GitHubのRepositoriesでNEWで新しいレポジトリを作成します。
そこに、作成したディレクトリをPushします。

$ echo "# [ディレクトリ名]" >> README.md
$ git init
$ git add README.md
$ git commit -m "first commit"
$ git remote add origin [pushするディレクトリのurl]
$ git push -u origin master

Heroku push

Herokuのアプリにpush&アプリケーションを作成する方法です。
アプリケーションの名前は何でもいいですが、heroku createだけだと適当な名前になります。これは各個人に任せます。

$ heroku login
$ git init
$ git add .
$ git commit -m 'first commit'
$ heroku create [アプリケーション名]
$ git push heroku master

Git HubとHerokuの両方を初めてpushした後に、何かディレクトリに変更などを行なった後は、このような方法でpushします。

$ git add .
$ git commit -m 'コメント'
$ git push origin master
$ git push heroku master

アプリを使えるように、コマンドラインで以下のように実行します。
結構ここで、Application errorが発生します。
私が考えられる原因として、ちゃんとデプロイできてない可能性があります。
それはつまり、git push heroku masterが出来ていないということですね。まずHerokuにログインして、アプリケーションをCreateまでやります。その後にGitにもHerokuにも両方デプロイしたほうがいいです。行う手順が多いので、工程を飛ばして行なっている可能性があります。

$ heroku open [アプリケーション名]

LINE連携

 LINE開発者アカウントで、チャンネルアクセストークンとチャンネルシークレットを発行して、下のコードの場所に入れていきます。
 まずは、チャンネルアクセストークンですが、「Messaging API設定」の一番下にありますので、そちらを発行&コピーして'YOUR_ACESS_TOKEN'の所に入れます。
 次はチャンネルシークレットですが、「チャネル基本設定」の下の方にあるので、発行&コピーをして'CHANNEL_SECRET'に入れて下さい。

app.py
line_bot_api = LineBotApi('YOUR_ACESS_TOKEN')
handler = WebhookHandler('CHANNEL_SECRET')

 続いては、webhook設定です。これは、「Messaging API設定」の上の方にあります。最初は何も書かれてないと思いますが、先ほど作成して頂いたHerokuのアプリの「OPEN APP]をクリックして、URLを持ってきます。しかし個人的にはここは厄介な所でした。
 まずコマンドラインで、このように実行して下さい。

$ heroku open [アプリケーション名]

すると、このような画面が出力されると思います。この画面が、ちゃんとデプロイできてますよという画面ですね。
スクリーンショット 2020-05-18 15.37.32.png
こちらが表示されたら、URLを使います。

https://[アプリケーション名].herokuapp.com/

次に、「Messaging API設定」のwebhookにこのように追加して行きます。

https://[アプリケーション名].herokuapp.com/callback

実装

lineにアカウントを追加して、チャットを送るとおうむ返しがされると思います。

参照
アプリ作成手順関係
https://qiita.com/suigin/items/0deb9451f45e351acf92
heroku push先変更関係
https://qiita.com/Tattsum/items/b86c9d698b0727934836
https://qiita.com/tamago324/items/4df361fd6ac5b51a8a07

0
1
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
0
1