pythonでLINEのAPI簡単に使ってみた

#はじめに
いつも使ってる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](https://developers.line.biz/ja/services/messaging-api/)にアクセス。
今すぐ始めようからLINEログインをして、アカウント作成。
プロバイダー名を決める。
作成したプロバイダーを選んで、新規チャネル作成をクリック。
![スクリーンショット 2021-02-28 10.50.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1057425/d19e898b-ff1b-622c-5e15-85c3b5bd5648.png)
チャンネルの種類からMessaging APIを選択。
![スクリーンショット 2021-02-28 10.54.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1057425/41b7f534-4627-a71c-c694-28e557f767ae.png)

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

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

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

#flaskでサンプル実装

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

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

githubから[echoのサンプル](https://github.com/line/line-bot-sdk-python/tree/master/examples/flask-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のページ](https://jp.heroku.com)でアカウント作成。

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

```
$ 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](https://developers.line.me/console/)に戻り、Webhookの設定を行う。
Messaging API設定で以下を設定。

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

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

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