###前書き
linebotの作成仕方などは多くの記事で書かれていますが、初心者の私にはつまづいたところがあったのでそこを補い、自分にとってわかりやすく作った記事です。
自分用に作った記事なのでわかりにくい点が多々ありますが、他の記事と参照しながら頑張ってください。
####前提 LineBotを作成済
####チャンネルシークレットを取得
####チャンネルアクセストークンを取得
####前提 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にする
この時点で
こうなっているはずである。
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の設定
「https://アプリ名.herokuapp.com/callback」を入力します###注意
コードでimportを使った場合はProcfileで
$pipenv install ライブラリ名
を入力
Procfileは開いて入力するのではなくコマンドで入力しよう
動かない時は
$heroku logs -t
でログを見ることができる。
大抵これでなんとかなる。