pythonでLinebot作ってみた!

プログラミング

こんにちは

pythonでlinebotを作ったので作り方を共有したいと思います。

スポンサーリンク

環境

・Windows10

・python3.7.3

Projectの構成

まず、作るアプリのフォルダの構造を紹介します。

 Project 
|-main.py 
|-Procfile(拡張子いりません)
|-request.txt
|_.git 

最終的にこのようになります。

今の段階ではProjectフォルダのみを用意してください。

Line APIの取得

まず、Line APIを取得します。↓にアクセスしてください。

Messaging API
LINE Developersサイトは開発者向けのポータルサイトです。LINEのさまざまな開発者向けプロダクトを利用するための、管理ツールやドキュメントを利用できます。LINEログインやMessaging APIを活用して、アプリやサービスをもっと便利に。

リンクにアクセスしたら「今すぐ始めよう」をクリック。

LINEアカウントでログインします。

新規プロバイダーを作成します。名前はbotの名前ではなくてもいいです。

新規チャンネルの情報を打ち込みます。これが終われば登録はいよいよ終了です。

登録が完了したら、チャンネル基本情報にいきChannel Secretとアクセストークンをメモします。(後で使います)

pythonのコードを書く

Line APIを取得したら、次にpythonのコードを書いていきます。

…の前にflaskと line-bot-sdk をインストールしましょう。

まず、Powershell(ターミナル)でProjectフォルダに移動します。そして下記のコマンドを打ち込みます。

 
$ pip install flask
$ pip install line-bot-sdk 

成功したら、いよいよコードです。エディタで下記のコードをmain.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__)

#環境変数取得
YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"]

line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)

@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", 5000))
    app.run(host="0.0.0.0", port=port)

(これはいじらなくていいです。)

僕は以下を参考(コピペ)にしました。

PythonでLine botを作ってみた - Qiita
はじめに Seleniumを使ってみたの続き(?)にあたります。 ゆくゆくは活用したいと思いますが今のところはオウム返しするだけです。 初めて触ったので間違いがあればご指摘いただけると幸いです。 環境 OS X 10.1...

設定ファイルの作成

以下2つの設定ファイルを作成します。

1.Procfile

echo "web: python main.py" | Out-File Procfile -Encoding ascii

Procfileは文字化けすることがたまにあるのでこの方法でやってみましょう。

2.requirements.txt

 pip freeze > requirements.txt 

この2つのファイルを上のmain.pyと同じ階層に入れます。

この2つのファイル以外にもう一つruntime.txtというファイルを作成せよというサイトもありますが、ぼくはなぜかエラーが出てしまったので、runtime.txtをProjectに含めずにデプロイしました。環境次第では違うかと思うので参考として載せておきます。

HerokuのPushでエラー(Python)|teratail
前提・実現したいことHeroku上でPythonベースのWebアプリを作ろうとしています。Herokuにpushをする段階でエラーが発生して失敗してしまいます。 エラーメッセージを見ると"pip"でエラーが発生しているように見えています。 発生している問題・エラーメッセージ$

Project
|-main.py
|-Procfile(拡張子いりません)
|_request.txt

という感じに置きます。

herokuにログインする

登録・ログインはこちら⬇︎を参考にやりましょう。(所要時間10分)

【Windows10】HerokuのCLIダウンロードからデプロイまで|なつめ|note
クレカなしでアカウントは作れるので、そのあとのデプロイまでのまとめ だいたい本家ページに書いてある通りではあるんですが。 HerokuにデプロイするにはCLI(コマンドラインインターフェース)を使います。 Heroku Dev Centerに行く The Heroku CLI | Heroku Dev C...

登録が終わったら、herokuにログインします。Powershellでherokuをインストールしたディレクトリに移動し、

$ heroku login
Enter your Heroku credentials:
Email: XXX@XXX
Password: ***

メールアドレスとパスワードを聞かれるので先ほど設定したものを打ち込みましょう。

アプリケーションの作成

次にProjectフォルダに行きアプリケーションを製作します。

$ heroku create <アプリケーション名>

環境変数

環境変数の設定をします。

Line APIの取得で取得したChannel-secretとアクセストークンの文字列をここで使います。

$ heroku config:set YOUR_CHANNEL_SECRET="Channel Secretの欄の文字列" --app <アプリケーション名>
$ heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="アクセストークンの欄の文字列" --app <アプリケーション名>

デプロイする(ネットに公開する)

ProjectフォルダをHerokuにデプロイします。簡単にいうとサーバーにアップしてだれでも使える状態にするということです。ここが最後の難関です。

HerokuにデプロイするにはGitのコマンドを使ってやる必要があります。

今回使うGitコマンドは「git init」「git add ~」「git commit -m “”」「git push」です。以下のようにしてデプロイしていきます。

$ git init
$ git add .
$ git commit -m "new commit"
$ git push heroku master

簡単に説明すると、

まずgit initで.gitというフォルダ(リポジトリという)を作りデプロイしたいフォルダをgit add ~で指定します。今回は~を「.」としました。

これは今いるディレクトリ(今回はProjectフォルダ)すべてという意味です。

つぎにgit commit -m “”でフォルダを登録します。なんでaddとcommitで分けてるんだ…という感じですがこれにはちゃんと意味があります。

Git初心者に捧ぐ!Gitの「これなんで?」を解説します。
はじめましてこんにちは、今年新卒でKRAYに入社しました亀井と申します。 会社のみなさんからは「あさちゅん」と呼ばれております。どうぞよろしくお願いします。   突然ですが、みなさん使ってますか? Git。 KRAYではバリバリ活躍してるGitですが、 「よくわからない……」と頭を抱えてる方も多いですね。 わたしも抱え...
を参考にしてください。

最後にgit pushでHerokuにデプロイします。

masterとは今回の場合ProjectフォルダのことでHerokuにProjectをpushしますよーということだと解釈しています。(間違っていたら指摘してください)

このような形でデプロイ出来たらもうすぐそこです。

Webhook

https://developers.line.me/console/ に戻り、Webhookの設定をします。


Webhook送信:利用する
Webhook URL:https://<アプリケーション名>.herokuapp.com/callback

と変更してください。

完成!

Webhookの下の方にあるQRコードを読み込んで友達登録しましょう。みごとにオウム返しをしたら完成です。おめでとうございます。

参考URL

PythonでLine botを作ってみた - Qiita
はじめに Seleniumを使ってみたの続き(?)にあたります。 ゆくゆくは活用したいと思いますが今のところはオウム返しするだけです。 初めて触ったので間違いがあればご指摘いただけると幸いです。 環境 OS X 10.1...
【Windows10】HerokuのCLIダウンロードからデプロイまで|なつめ|note
クレカなしでアカウントは作れるので、そのあとのデプロイまでのまとめ だいたい本家ページに書いてある通りではあるんですが。 HerokuにデプロイするにはCLI(コマンドラインインターフェース)を使います。 Heroku Dev Centerに行く The Heroku CLI | Heroku Dev C...
Git初心者に捧ぐ!Gitの「これなんで?」を解説します。
はじめましてこんにちは、今年新卒でKRAYに入社しました亀井と申します。 会社のみなさんからは「あさちゅん」と呼ばれております。どうぞよろしくお願いします。   突然ですが、みなさん使ってますか? Git。 KRAYではバリバリ活躍してるGitですが、 「よくわからない……」と頭を抱えてる方も多いですね。 わたしも抱え...
HerokuのPushでエラー(Python)|teratail
前提・実現したいことHeroku上でPythonベースのWebアプリを作ろうとしています。Herokuにpushをする段階でエラーが発生して失敗してしまいます。 エラーメッセージを見ると"pip"でエラーが発生しているように見えています。 発生している問題・エラーメッセージ$
PowerShellでechoコマンドで作成したファイルがAtomで文字化けする|teratail
前提・実現したいことPowerShellでechoコマンドを使ってファイルを作成する(Procfile, requirements.txt 等)。 作成したファイルをAtomで開いて、内容を確認する。 発生している問題・エラーメッセージechoコマンドで作成したファイルをAt



コメント

  1. Нelⅼo there, I found yⲟur blog by way of Ԍoogle whilst searching
    for a comρarable subject, your wеbsite came up, it seems to
    be good. І’ve bo᧐kmarked it iin my gooցle bookmarks.

    Hi there, just become alert to yyour weblog via Google, and located thаt іt
    is really informаtive. I’m gonna bbe caresful for brussels.
    I’ll be grateful if уou happen to continue this in future.

    A lot οf folks can be benefited froim yoսr writing.
    Cheers!

  2. keigo-imagisi keigo-imagisi より:

    Thank you for your message!!
    Your comments were very encouraging for me.

タイトルとURLをコピーしました