Help us understand the problem. What is going on with this article?

【超簡単】PythonでLINE BOTを作ってみよう。

1. はじめに

この記事は、下記の2点を前提条件に書いてあります。

  • 初心者でも分かりやすく
  • 無駄なく、簡潔に

2. 概要

個人的にLINE Messaging APIの公式SDKが使いにくい。
https://github.com/line/line-bot-sdk-python

そのため、プログラミング初心者でも簡単にLINEBOTが扱えるようにpylinebotというラッパーを作成した。
https://github.com/nanato12/pylinebot

3. 事前準備 (必要なもの)

3.1 BOT用のLINEアカウントの作成、設定

こちらの記事に書いたので参考に。

【初心者向け】LINEBOTを作るためのLINE公式アカウント作成・設定
https://qiita.com/nanato12/items/25e2db9461bb6ac2b8c5

3.2 パッケージのインストール

この記事ではFlaskを使用します。
DjangoでもOK.

$ pip install flask
$ pip install pylinebot

3.3 ngrokのセットアップ

下記のリンクからダウンロードしてngrokを使用できるように設定。
https://ngrok.com/

$ ngrok version
ngrok version 2.3.35

4. おうむ返しBotを作ろう

Bot作りの基本形!
とりあえずおうむ返し作るって感じ。

ディレクトリ構造を下記とする。

linebot
 ┠ app.py
 ┗ op.py

こんだけ!
いかにも簡単そうでしょ。

4.1 コードを書こう

channel_access_token
channel_secretは自分のBotのものを入力してください。

app.py
from flask import Flask, request
from pylinebot import LINE, Tracer

from op import receive_message

DEBUG = True

app = Flask(__name__)

bot = LINE(
    channel_access_token='XXXXXXXXXXXXXXXXXXX',
    channel_secret='XXXXXXXXX'
)
tracer = Tracer(bot, debug=DEBUG)
tracer.add_event('message', receive_message)

# Webhook用
@app.route("/", methods=['POST'])
def hello():
    signature = request.headers['X-Line-Signature']
    body = request.get_data(as_text=True)
    tracer.trace(body, signature)
    return 'OK'

# 接続テスト用
@app.route("/test", methods=['GET'])
def test():
    return 'OK'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=3000, debug=DEBUG)
op.py
def receive_message(bot, event):
    message = event.message
    message_type = message.type

    if message_type == 'text':
        message_text = message.text
        bot.reply_text_message(message_text)


4.2 実行 & 公開 & テスト

app.pyを実行してみましょう。

$ python3 app.py
# * Serving Flask app "app" (lazy loading)
# * Environment: production
#   WARNING: This is a development server. Do not use it in a production deployment.
#   Use a production WSGI server instead.
# * Debug mode: on
# * Running on http://0.0.0.0:3000/ (Press CTRL+C to quit)
# * Restarting with stat
# * Debugger is active!
# * Debugger PIN: 984-300-804

こんな感じに起動したでしょうか。


別タブでngrokを使って公開してみましょう。

$ ngrok http 3000
#ngrok by @inconshreveable                           (Ctrl+C to quit)

# Session Status                online                                
# Session Expires               7 hours, 58 minutes                   
# Version                       2.3.35                                
# Region                        United States (us)                    
# Web Interface                 http://127.0.0.1:4040                 
# Forwarding                    http://70fc9cf8b47c.ngrok.io -> http:/
# Forwarding                    https://70fc9cf8b47c.ngrok.io -> http:

# Connections                   ttl     opn     rt1     rt5     p50   
#                               0       0       0.00    0.00    0.00 

httpsのURLを使用します。


/testを接続テスト用にしているので、自分のブラウザで
https://70fc9cf8b47c.ngrok.io/testに接続してみましょう。

ブラウザに OK の文字が表示され、
それぞれのコンソールにこのように表示されればOKです。

python3_app.py
127.0.0.1 - - [25/Jun/2020 08:19:04] "GET /test HTTP/1.1" 200 -
ngrok_http_3000
HTTP Requests                                                       
-------------                                                       

GET /test                      200 OK                      


4.3 Webhookの設定

ここにアクセスしてLINE Messaging APIのチャンネルを選択。
https://developers.line.biz/console/

Messaging API > Webhook Setting から
Webhook URLを打ち込みましょう。

webhooksetting


VerifyをクリックしてSuccessが出ればOK。

success

4.4 動作確認

実際に送ってみる。

スクリーンショット 2020-06-25 17.21.15.png

完璧✨

5. おわりに

テキスト返信以外にも動画送信、画像送信、クイックリプライなども簡単にできるので、次回その説明をします。

pylinebotのgithubにもsampleソースがあるので見てみるといいかも。
https://github.com/nanato12/pylinebot/tree/master/sample

ななといつ
Twitter: @nanato12_dev
Email: admin@nanato12.info
Blog: https://blog.nanato12.info
GitHub: https://github.com/nanato12

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした