2
4

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 3 years have passed since last update.

Pythonで作るLineBotの作成手順

Posted at

###前書き
linebotの作成仕方などは多くの記事で書かれていますが、初心者の私にはつまづいたところがあったのでそこを補い、自分にとってわかりやすく作った記事です。
自分用に作った記事なのでわかりにくい点が多々ありますが、他の記事と参照しながら頑張ってください。

####前提 LineBotを作成済
スクリーンショット 2020-02-01 11.10.20.png
####チャンネルシークレットを取得
スクリーンショット 2020-05-06 17.13.47.png

####チャンネルアクセストークンを取得

####前提 Herokuアカウント作成済&クレジット登録済
1、ターミナルを起動
2、

$mkdir lineBotTest

$cd lineBotTest

を入力
3、アプリケーションにあるテキストエディットを起動
4、上バーにあるフォーマットを選択し標準テキストを選択、以下をコピペする
'LINE_CHANNEL_SECRET'など変更する必要なし
そのままコピペする

import os
import sys
from argparse import ArgumentParser
from flask import Flask, request, abort
from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

app = Flask(__name__)

"""
heroku config:set LINE_CHANNEL_SECRET="チャネルシークレット" --app アプリ名
をターミナルに打ち込んだので以下のコードにチャンネルシークレットが毎回自動で入力される。
アクセストークンも同様なので変更する必要なし
"""
channel_secret = os.getenv('LINE_CHANNEL_SECRET', None)
channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN', None)

"""
チャンネルシークレットやアクセストークンがnull(何もない)の場合の処理
"""
if channel_secret is None:
    print('Specify LINE_CHANNEL_SECRET as environment variable.')
    sys.exit(1)
if channel_access_token is None:
    print('Specify LINE_CHANNEL_ACCESS_TOKEN as environment variable.')
    sys.exit(1)
    
"""
Herokuの変数からトークンなどを取得
"""
line_bot_api = LineBotApi(channel_access_token)
handler = WebhookHandler(channel_secret)

"""
LINEからのwebhook
基本変更することはない関数
"""
@app.route("/callback", methods=['POST'])
def callback():
    # リクエストヘッダーから署名検証のための値を取得
    signature = request.headers['X-Line-Signature']

    # リクエストボディを取得
    body = request.get_data(as_text=True)
    app.logger.info("Request body: " + body)

    # 署名を検証し、問題なければhandleに定義されている関数を呼び出す
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:#エラーが出た時400と返す
        abort(400)
    return 'OK'

"""
LINEでMassageEvent(テキストメッセージが送信された時)が起こった時呼び出される
line_bot_api.reply_messageの第一引数のevent.reply_tokenはイベントの応答に用いる
第二引数はlinebot.modelsに定義されている返信用のTextSendMessageオブジェクトを渡す
"""
@handler.add(MessageEvent, message=TextMessage)
def message_text(event):
    #入力された内容(event.message.text)に応じて返信
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text)
    )

if __name__ == "__main__":#正しいファイル拡張子で実行されているか識別
    port = int(os.getenv("PORT", 5000))
    app.run(host="0.0.0.0", port=port)

5、名前をmain.pyにする。また保存場所はlineBotTestにする
この時点で
スクリーンショット 2020-02-01 11.32.48.png
こうなっているはずである。

6、ターミナルでlineBotTest user$になっているのを確認し、以下のコマンドを入力する

$brew tap heroku/brew && brew install heroku

$heroku login
//q以外のボタンを押すとログイン開始

$heroku create アプリ名
//他者が作ったアプリ名と被らないユニークな名前を使用
//heroku create linetest0000 今回はlinetest0000を使用

$heroku addons:create fixie:tricycle --app linetest0000
//「Fixie」アドオンの追加

$pipenv install flask
$pipenv install line-bot-sdk
//フォルダ内に「Pipfile」と「Pipfile.lock」が生成されます。

/*
Webスクレイピングをする時は入力する
$pipenv install bs4
$pipenv install requests
*/

$heroku config:set LINE_CHANNEL_SECRET="チャネルシークレット" --app linetest0000
//最初に取得したチャンネルシークレットを入力する

$heroku config:set LINE_CHANNEL_ACCESS_TOKEN="アクセストークン(ロングターム)" --app linetest0000
//最初に取得したアクセストークンを入力する

$echo web: python main.py > Procfile
//Profile作成

$heroku git:remote --app linetest0000

$git init

$git add -A

$git commit -m "コメントを入力"

$git push heroku master

git add -A以下のコマンドはコードを変更した時、反映させるために打つコマンド

#####webhookの設定

スクリーンショット 2020-02-01 12.53.56.png 「https://アプリ名.herokuapp.com/callback」を入力します

###注意
コードでimportを使った場合はProcfileで

$pipenv install ライブラリ名 

を入力
Procfileは開いて入力するのではなくコマンドで入力しよう

動かない時は

$heroku logs -t

でログを見ることができる。
大抵これでなんとかなる。

これで完成
スクリーンショット 2020-02-01 13.42.47.png

2
4
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
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?