PythonでLineBotで作成【ひらがな化Bot】

PythonとgooAPIを使って、LineBotを作ってみました。(サーバーはheroku)
こちらのgithubでもソースコードを全て公開しています。(本ページ末尾でも全ソースコードを公開)

「LineBot作ってみたいなぁ」「使いたい技術が一緒だなぁ」
みたいな方は是非参考にして下さい!

上のように、全てひらがなに変換するLineBotです。
漢字を読むのが難しい子供に向けて作ってみました。

PCの方は上のQRコードから、
スマホの方はこちらのリンクから友だち追加で試してみて下さい!

使用技術

LINEのMessaging APIを利用して、
サーバーはheroku、言語はPython(python-3.7.9)を利用しました。
ひらがな化を行う部分に関して、gooラボのひらがな化API(無料)を利用しました。

また、今回の仕様に関しては以下となります。
格好つけて書いていますが、そんなに難しくありません。コードも50行程度でできました。

【仕様】

1.メッセージを受け取る

2.受け取ったメッセージをgooラボAPIへPOST

3.ひらがな化(リプライ)されたテキストを送信

各種登録

以下の3つのサービスにアカウント登録する必要があります。
「LineMessagingAPI」「heroku」「gooラボ」

すでに登録済みの方、理解している方は読み飛ばして頂いて構いません。

Line developersに登録

こちらからLine developersに登録します。
登録後、プロバイダーを作成しましょう。

下のようにプロバイダーを作成できる部分を見つけ、「作成」をクリックします。

下のような画面に変われば、作りたいLineBot名でも何でも良いので名称を決めます。
この名所は誰からも見られません。

次にMessaging APIをクリック。

その後の画面で色々と入力を求められますので、説明通りに埋めていきましょう。
重要なのは以下の2つのキーです。後でコーディングの際に利用します。
ページをウロウロしながら探してみて下さい。

herokuに登録

こちらからherokuにサインインしましょう。
サインイン後、以下のように「Creat new App」を行います。

その後、「App name」を求められますので、適当な名前をつけておきましょう。

ここからは沢山のやり方がありますが、
おすすめはherokuとGitHubを連携させておくことです。

私の場合は事前にGitHubで、
今回作成するLineBotのリポジトリを作成しておき、以下のような形で連携させておきました。
何を言っているのかよくわからない方は、
こちらの記事が非常に詳しくherokuとGitHubの連携について書いていましたので、参考にしてみて下さい。

gooラボAPIに登録

こちらからgooラボAPIのアカウントを登録しておきましょう。
GitHubアカウントが必要みたいですが、それ以外は非常に簡単です。

説明どおりに進み、idを入手しておきましょう。

コーディング

コーディングの前に、ターミナルで下のflaskとline-bot-sdkをインストールしておきます。

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

以下の4つのファイルを用意しておきます。
「Procfile」「equirements.txt」「runtime.txt」「main.py」

Procfile

よくあるミスがこのファイル名を「procfile」と先頭を小文字にしてしまうことです。
「Procfile」と大文字にすることを忘れないようにしましょう。

web: python main.py

requirements.txt

ここもファイル名の誤字に注意。
「requirements.txt」を1文字でも間違えればエラーです。

Flask==1.1.2
line-bot-sdk==1.7.2
requests==2.25.1

runtime.txt

herokuでつかえるPythonのバージョンは決まっています。
こちらから利用できるバージョンを確認しておきましょう。

python-3.7.9

main.py

メインのコードの部分です。
わからない部分があれば本記事末尾の「コメント」から質問くださいね。
できる限り早く(できれば1日〜2日以内で)返事をお返しします!

from flask import Flask, request, abort
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage
import requests
import os

app = Flask(__name__)
# 環境変数を設定
YOUR_CHANNEL_ACCESS_TOKEN = "<Line developersで入手したものを入力>"
YOUR_CHANNEL_SECRET = "<Line developersで入手したものを入力>"
line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET)

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

    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)
    return "OK"

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    headers = {
        'Content-Type': 'application/json',
    }
    # gooApiに送信するデータを設定
    text = '{"app_id":"<gooから入手したidを入力>",' \
           '"request_id":"record003",' \
           '"sentence":"' + event.message.text + '",' \
           '"output_type":"hiragana"' \
           '}'
    response = requests.post('https://labs.goo.ne.jp/api/hiragana', headers=headers, data=text.encode("utf-8"))
    response = response.json()
    hiraganaText = response["converted"]

    # Lineへメッセージの送信
    line_bot_api.reply_message(event.reply_token, TextSendMessage(text=hiraganaText))

if __name__=="__main__":
    port = int(os.getenv("PORT", 5000))
    app.run(host="0.0.0.0", port=port)

herokuとGitHubを連携させた場合、
コーディングが終わればコミットしておきましょう。

LineMessagingAPIとherokuの連携

最後に、もう一度Line developersで入手したものを入力にログインし、Webhookの設定を行います。
下の3つの手順ですすみ、検証をクリックした際にエラーが出ていなければ完了です。
エラーが出ていれば、何かにミスがあるので修正しましょう。

検証で成功すると、デプロイしていきます。

herokuの先程の画面にてDeployのボタンをクリックします。
これでPythonでのLineBot作成は完了です。
Line developersに記載のQRから、作成したLineBotを自分で友だち追加を行い、動作を確認しましょう。

ということで本記事は、
Pythonでひらがな化するLineBotで作ってみました!
ご質問やアドバイスなどがあればコメント下さいね。

最後まで読んでいただきありがとうございました(^^)

あなたにオススメの本

【独習Python】
高評価レビュー多数の、Pythonを完璧にマスターできる参考書です。
この1冊でPythonのほとんどが完結する、間違いのない本ですよ\(^o^)/

つまづいたときに逆引きするPythonの辞書代わりにもなります(^^)


【Pythonクローリング&スクレイピング】
スクローリングとスクレイピングを学ぼうと思ったら、この1冊でカンペキです。
僕自身も読んでいるおすすめ本です\(^o^)/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です