63
94

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でLINEのAPI簡単に使ってみた

Last updated at Posted at 2021-02-28

#はじめに
いつも使ってるLINEのAPIを使って何か動かしてみたい。
LINEのAPIを使うと、他のアプリのように特定のアプリを入れなくても使ってもらえるのがいいところ。
しかも、pythonで簡単にかけるので他のライブラリとの併用がし易い。
中にどんな処理を入れるかは動いてから考えよう。
まずはハンズオン。
#開発環境
M1チップのMacBook Air
heroku 7.47.13
Python 3.9.1
Flask 1.1.2
line-bot-sdk 1.18.0

herokuは対応するpythonのバージョンが限られているので要注意。
#全体の流れ
まずLINE Developersに登録し、アクセストークンを発行。
そのあとflaskとline-bot-sdkでサンプルを実装してみる。
無料で利用できるPaasとして有名なherokuでデプロイ。
最後にWebhookの設定をして完了。

#LINE Developersに登録
LINE Developersにアクセス。
今すぐ始めようからLINEログインをして、アカウント作成。
プロバイダー名を決める。
作成したプロバイダーを選んで、新規チャネル作成をクリック。
スクリーンショット 2021-02-28 10.50.21.png
チャンネルの種類からMessaging APIを選択。
スクリーンショット 2021-02-28 10.54.34.png

開いたトップで必要な情報を入力。

アプリ名   自分で決めるアプリ名
アプリ説明  アプリ説明
プラン    Developer Trial
大業種    個人
小業種    個人(その他)
メールアドレス 自分のメールアドレス

利用規約に同意して、作成ボタンをポチる。
基本設定ページからアクセストークンの再発行。

#flaskでサンプル実装

pipでflaskとline-bot-sdkをインストール。

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

githubからechoのサンプルをもらってきて、少し修正。

main.py
# ======================================================================
# Project Name    : Linebot 
# File Name       : main.py
# Encoding        : utf-8
# Creation Date   : 2021/02/18
# ======================================================================

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 = "ここにアクセストークンを入れる"
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__":
    port = int(os.getenv("PORT", 5000))
    app.run(host="0.0.0.0", port=port)

チャンネルシークレットをLINE Developerのチャネル基本設定から、アクセストークンをMessaging API設定からコピーしてペタリ。

YOUR_CHANNEL_ACCESS_TOKEN = "ここにアクセストークンを入れる"
YOUR_CHANNEL_SECRET = "ここにチャンネルシークレットを入れる"

#herokuでデプロイ

herokuのページでアカウント作成。

作成後、指示に従ってターミナルでログイン。

$ heroku login
Enter your Heroku credentials:
Email: 
Password: 

Webhookで使うURLを好きな名前でCreate。
https://<好きなURL>.herokuapp.comのようになります。

$ heroku create <好きなURL>

次に設定ファイルruntime.txtとrequirements.txtを作成。

runtime.txt
python-3.9.1
requirements.txt
Flask==1.1.2
line-bot-sdk==1.18.0

Procfileに実行方法を定義。

web: python main.py

heroku gitにプログラムと設定ファイルをデプロイ。

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

pushしたらherokuの設定は完了。
尚プログラムはpushした段階で実行されてる模様。

#Webhookの設定

最後にLINE Developerに戻り、Webhookの設定を行う。
Messaging API設定で以下を設定。

Webhook送信:利用する
Webhook URL:https://<好きなURL>.herokuapp.com/callback
#試してみる
同ページのQRコードから自分のスマホで友達追加。
送信した文字がechoされる動作を確認して終了。

やはり、いつも使ってるアプリで自分の作ったプログラムの動作が見れると感動する。
qiitaにも書いた、pythonで作った簡易顔認証と組み合わせて何かできないかなあ。

参考 : https://cppx.hatenablog.com/entry/2017/10/31/165128

63
94
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
63
94

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?