python PR

計24枚の画像解説!pythonを使ってLinebotを作成する【サンプルコードあり】

pythonでLinebotを作る
記事内に商品プロモーションを含む場合があります

こちらの記事を見て作りたいLinebotが思い浮かんだので、pythonでLinebotを作ろうと決めました

まずはLine developersに記載されているサンプルコードを元に、おうむ返しをするLinebotを作っていきます

コピペでいける!

って書いてあったのですが、結構沼にハマったので、そこもあわせて解説していきたいと思います

この記事でわかること

  • Linebotの作り方
  • Herokuの使い方

筆者について

2021年から本格的にpython学習を始め、今ではpythonによる収益5桁

主にデータ解析やデスクトップアプリ、業務効率化・自動化などを中心に作成中

また大学院時代には、R言語とpythonを使って統計処理を行っていたため、pythonを使ったデータ分析の知識が豊富

Pythonでデータ分析を始めよう!挫折しない実践ガイドでスキルアップ

Pythonで機械学習に学んで実装してみよう【サンプルコードあり】 

pythonでLinebotを作成する

pythonでLinebotを作成するのに必要なのは、Flaskです

今回初めてFlaskに触れましたが、Djangoに比べて簡潔なので理解しやすいです

あとはLine developersに登録して、Messaging APIを取得、HerokuにデプロイすればOKです

Line developersの登録

まずはLine developersに登録していきます

まずはTOPページのMessaging APIをクリック

Linebot作成1

今すぐはじめようをクリックして、Lineにログインします

Linebot作成2

アドレス打つのはめんどくさいので、QRコードでログイン

Linebot作成3Linebot作成4Linebot作成5Linebot作成6

認証を突破すると、以下のような画面に移ります

Linebot作成7Linebot作成8

赤枠内は基本的に入力していきます

  • チャネル名
  • チャネル説明
  • 大業種
  • 小業種
  • メールアドレス
  • プライバシーポリシーURL(任意)
  • サービス利用規約URL(任意)

任意以外を全て入力したら、2つあるチェックボックスにチェックを入れて、作成

Linebot作成9

OKをクリックでチャネルが作成されます

Linebot作成10

Messaging API設定で応答メッセージと挨拶メッセージをオフにして、Webhook設定をオンにします

Linebot作成11 Linebot作成14

その下にあるWebhookの利用もクリックしておくと、botを使用することができます

Linebot作成15

チャネルの基本設定などが行うことができますが、ひとまずAPI登録はこれで終了です

Flaskの準備

pythonのコードを書いていく前に、Flaskとline bot sdkをインストールします

pip install flask
pip install line-bot-sdk

#condaやhomebrewを使っている場合には、それに応じて

これでLinebotのコードを書く準備ができました

pythonコードと設定ファイルの準備

まずはソースコード

ソースコードは変える部分がないので、このままコピペでOKです

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__)

ACCESS_TOKEN = os.environ["ACCESS_TOKEN"]
CHANNEL_SECRET = os.environ["CHANNEL_SECRET"]
line_bot_api = LineBotApi(ACCESS_TOKEN)
handler = WebhookHandler(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:
        print("Invalid signature. Please check your channel access token/channel secret.")
        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__":
    port = int(os.getenv("PORT", 5000))
    app.run(host="0.0.0.0", port=port, debug=True)

ACCESS_TOKEN = os.environ[“ACCESS_TOKEN”]

CHANNEL_SECRET = os.environ[“CHANNEL_SECRET”]

line_bot_api = LineBotApi(ACCESS_TOKEN)

handler = WebhookHandler(CHANNEL_SECRET)

僕がハマったのはここで、上二つだけだとエラーになりますので、両方とも記載します

サンプルコードには記載しているので、コピペで大丈夫です

次に設定ファイルです

今回必要な設定ファイルは3つ

  • runtime.txt : 使用するPythonのバージョンを記入
  • requirements.txt : インストールするライブラリを記入
  • Procfile : プログラムの実行方法を記入

Procfileは.txtの拡張子は入りません

ここもエラーになりやすい部分なので、気をつけましょう

runtime.txtは使用するpythonのバージョンを指定します

python-3.10.5

requirements.txtでは使用するライブラリを入力していきます

コマンド入力でもいけますが、余計なものもたくさん入るので、手打ちでいいと思います

僕はコマンドで作ったら、以下のようにいらないものたくさんになりました

この状態でも問題なくLinebotを作ることはできます

aiohttp==3.8.1
aiosignal==1.2.0
async-timeout==4.0.2
attrs==22.1.0
certifi==2022.6.15
charset-normalizer==2.1.0
click==8.1.3
Flask==2.2.2
frozenlist==1.3.0
future==0.18.2
gunicorn==20.1.0
heroku==0.1.4
idna==3.3
importlib-metadata==4.11.4
itsdangerous==2.1.2
Jinja2==3.1.2
line-bot-sdk==2.3.0
MarkupSafe==2.1.1
multidict==6.0.2
python-dateutil==1.5
requests==2.28.1
urllib3==1.26.11
Werkzeug==2.2.2
yarl==1.8.1
zipp==3.8.1

最後にProcfileです

Procfileは以下のように入力します

web: python main.py

これでpythonのコードと設定ファイルの準備が終わりました

設定ファイルなどは以下のように保存をしておきます

LineBot
├── Procfile
├── main.py
├── runtime.txt
└── requirements.txt

あとはHerokuに登録して、デプロイしていくだけです

Herokuの登録

続いてHerokuに登録して、デプロイしていきます

まずはHerokuに登録しましょう

登録方法はここで詳細に解説しているので、そちらを参考にしてください

herokuの登録ができたら、新しいアプリを作っていきます

HerokuのダッシュボードからNewをクリックし、Create new appをクリック

 

Linebot作成18

App nameを決めます

Linebot作成19

App nameはなんでも大丈夫ですが、他の人が使っているとエラーになります

問題なくApp nameを入力できたら、それ以外はいじらずに、Create appをクリックします

これで新しいアプリが完成したので、Herokuのダッシュボードに戻って、今作ったApp nemeをクリックしましょう

新しいアプリの設定画面に移ります

Linebot作成20

ここで、Settingと書いてある部分をクリックします

ビルドパックというものをpythonにする必要があるので、Add buildpackをクリックし、pythonを選択します

Linebot作成21

これでOK

環境変数の設定

Linebotを使うには、Channel SecretとアクセストークンをHerokuに登録する必要があります

ターミナルで、

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

を入力します

入力後はHerokuのsettingからも編集することができます

Linebot作成22

アクセストークンとChannel Secretはこちら

Linebot作成16 Linebot作成12

ターミナルでの操作

あとはpythonのコードをHerokuのデプロイしていくだけです

まずはターミナルでLinebotのディレクトリに移動します

移動するには以下のようにcdを使用します

cd Linebotを保存しているディレクトリのパス名

次にHerokuのログイン

heroku login

何かしらのキーを押せと求められるので、Enterキーを一度押せば、ログインできます

あとはデプロイしていくだけです

git init
git remote add heroku https://git.heroku.com/herokuに登録したapp neme.git
git add .
git commit -am "make it better"
git push heroku master

これでOKです

2行目のURLはHerokuのsettingからも確認することができます

Linebot作成23

デプロイが終わったらLine developersに戻り、Messaging API設定にあるQRコードを読み込み、友達追加します

その後、Webhookが機能しているかを確認するために、Webhookの検証をクリック

Linebot作成15

以下のように成功と出ればOKです

Linebot作成17

Linebotにテキストメッセージを送れば、おうむ返ししてくれます

ご覧の通り、何度もtry & errorの末、ようやくおうむ返ししてくれました

Linebotおうむ返し
pythonをレンタルサーバーで実行する方法 【lolipop編】
レンタルサーバーでPythonを動かす!lolipopを使った手順とポイントレンタルサーバーを使えば、pythonを決まった時間に自動で実行することができます。2022年11月までは、Herokuというサービスを使えば定期実行することができましたが、11月末から有料化してしまい、乗り換えを検討している方も多いと思います。lolipopというレンタルサーバーは、月額440円からなので、Herokuに課金するよりも安く済みますので、おすすめです。今回はlolipopを使って、pythonをレンタルサーバ上で定期実行する方法について解説をしていきたいと思います。...

エラーが出た時の対処方法

僕は全然すんなりいかなかったのですが、ようやく完成したコードを掲載しているので、多分スムーズにいくと思います

ただ、エラーが出たら困るので、そこの対処方法について記載していきます

コードや設定ファイルのミス

ありがちなのが、コードや設定ファイルを作るときに余計な文字が無意識に入ってしまうこと

僕はProcfile作るときに

web: python main.py

にするべき部分を

web: python mainm.py

としており、沼にハマりました

エラーが出た場合には、コードや設定ファイルを読み返すのがいいです

よくわからないエラー

よくわからないからエラーになるんですけど、コードや設定ファイルは問題なかった場合はターミナルで、

heroku logs --tail -a App name(Herokuの登録したやつ)

と入力して、リアルタイムでログを見ることができます

ログをさかのぼって読んでいき、ERRORと書かれている部分を見つけます

見つけたらあとはそこを修正すればOKです

pythonの技術を高める

pythonの技術を高めることで、さまざまなものを作ることができ、エンジニアとしての道も拓けていきます

独学で学べないこともないですが、やはり学び始めはプログラミンスクールで体系的にしっかりと学んだほうがいいと思います

収益化までの時間短縮やわからないことを気軽に質問することができる環境など、費用はかかりますが、それ以上の恩恵を受けることができます

こちらの記事ではおすすめのpythonが学べるプログラミングスクールを紹介しています

いずれも無料体験などができるので、一度体験してみるのがいいです

python プログラミングスクール
Pythonや機械学習を学べるプログラミングスクールおすすめ5選「pythonを学ぶのに、プログラミングスクールに通いたい」「pythonを学べるプログラミングスクールがたくさんあって、よくわからない」「結局、pythonを学ぶのにおすすめのプログラミングスクールってどこなの?」といった疑問をお持ちの方に、pythonを学ぶのにおすすめのプログラミングスクールを紹介していきたいと思います。...
おすすめプログラミングスクール

DMMWEBCAMP
  • WEBCAMPはコスパ最強
  • WEBCAMPは初心者に優しい充実したサポート付き
  • 16週間プランを選択して、返金してもらおう
WEBCAMPの公式ページはこちら WEBCAMPの口コミ・評価はこちら
テックアカデミー  
  • テックアカデミーは費用対効果抜群
  • テックアカデミーのサポートは個人の能力に応じつつ、python初心者に優しい
  • まずは無料体験でテックアカデミーを知ってから受講を決める
テックアカデミーの公式ページはこちら テックアカデミーの口コミ・評価はこちら
キカガク
  • 多種多様なスキルコース
  • 初心者から専門家まで対象
  • 給付金利用で費用を抑えられる
キカガクの公式ページはこちら キカガクの口コミ・評価はこちら
Aidemy Premium
  • 完全オンラインで、時間や場所に縛られず学習したい
  • マンツーマン学習サポートにより実践に近い経験をしたい
  • 未経験から機械学習エンジニアになりたい
Aidemy Premiumの公式ページはこちら Aidemy Premiumの口コミ・評価はこちら
My Agile Privacy
This website uses technical and profiling cookies. Clicking on "Accept" authorises all profiling cookies. Clicking on "Refuse" or the X will refuse all profiling cookies. By clicking on "Customise" you can select which profiling cookies to activate.