PythonとgooAPIを使って、LineBotを作ってみました。(サーバーはheroku)
こちらのgithubでもソースコードを全て公開しています。(本ページ末尾でも全ソースコードを公開)
「LineBot作ってみたいなぁ」「使いたい技術が一緒だなぁ」
みたいな方は是非参考にして下さい!
![](https://tetoblog.org/wp-content/uploads/2021/11/IMG_EB664E7C6BC7-1-1024x345.jpeg)
![](https://tetoblog.org/wp-content/uploads/2021/11/661f969b8a897e836df4dfce67efd45c.png)
上のように、全てひらがなに変換するLineBotです。
漢字を読むのが難しい子供に向けて作ってみました。
PCの方は上のQRコードから、
スマホの方はこちらのリンクから友だち追加で試してみて下さい!
本記事の内容
使用技術
![](https://tetoblog.org/wp-content/uploads/2021/11/9d9f565b3ef59a5e6de2a27461394f89.jpg)
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に登録します。
登録後、プロバイダーを作成しましょう。
下のようにプロバイダーを作成できる部分を見つけ、「作成」をクリックします。
![](https://tetoblog.org/wp-content/uploads/2021/11/653cb2c4d975a8e4c5ab94761559832e-1024x157.png)
下のような画面に変われば、作りたいLineBot名でも何でも良いので名称を決めます。
この名所は誰からも見られません。
![](https://tetoblog.org/wp-content/uploads/2021/11/2cc5c03c01cc83f9f7abb2105e65f0f1-1024x579.png)
次にMessaging APIをクリック。
![](https://tetoblog.org/wp-content/uploads/2021/11/c995df40b5a96174774e9e0c5bef852b-1024x567.png)
その後の画面で色々と入力を求められますので、説明通りに埋めていきましょう。
重要なのは以下の2つのキーです。後でコーディングの際に利用します。
ページをウロウロしながら探してみて下さい。
![](https://tetoblog.org/wp-content/uploads/2021/11/23dede2504bf95ff8a7b7c399ff8fe71-1024x606.png)
![](https://tetoblog.org/wp-content/uploads/2021/11/696fa9f685a314e9472fac0e2cb67452-1024x725.png)
herokuに登録
こちらからherokuにサインインしましょう。
サインイン後、以下のように「Creat new App」を行います。
![](https://tetoblog.org/wp-content/uploads/2021/11/052bac456afd26d8e9de5a2488d72459-1024x294.png)
その後、「App name」を求められますので、適当な名前をつけておきましょう。
ここからは沢山のやり方がありますが、
おすすめはherokuとGitHubを連携させておくことです。
私の場合は事前にGitHubで、
今回作成するLineBotのリポジトリを作成しておき、以下のような形で連携させておきました。
何を言っているのかよくわからない方は、
こちらの記事が非常に詳しくherokuとGitHubの連携について書いていましたので、参考にしてみて下さい。
![](https://tetoblog.org/wp-content/uploads/2021/11/607e287dd2007e21586e848854a0f740-881x1024.png)
gooラボAPIに登録
こちらからgooラボAPIのアカウントを登録しておきましょう。
GitHubアカウントが必要みたいですが、それ以外は非常に簡単です。
説明どおりに進み、idを入手しておきましょう。
![](https://tetoblog.org/wp-content/uploads/2021/11/6064ecf6f08049182dca33ae0c095d4e-1024x690.png)
コーディング
コーディングの前に、ターミナルで下の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つの手順ですすみ、検証をクリックした際にエラーが出ていなければ完了です。
エラーが出ていれば、何かにミスがあるので修正しましょう。
![](https://tetoblog.org/wp-content/uploads/2021/11/eef3f47c65d9b28b0a70d8bc97c75adb-1024x766.png)
検証で成功すると、デプロイしていきます。
herokuの先程の画面にてDeployのボタンをクリックします。
これでPythonでのLineBot作成は完了です。
Line developersに記載のQRから、作成したLineBotを自分で友だち追加を行い、動作を確認しましょう。
ということで本記事は、
Pythonでひらがな化するLineBotで作ってみました!
ご質問やアドバイスなどがあればコメント下さいね。
最後まで読んでいただきありがとうございました(^^)
あなたにオススメの本
【独習Python】
高評価レビュー多数の、Pythonを完璧にマスターできる参考書です。
この1冊でPythonのほとんどが完結する、間違いのない本ですよ\(^o^)/
つまづいたときに逆引きするPythonの辞書代わりにもなります(^^)
【Pythonクローリング&スクレイピング】
スクローリングとスクレイピングを学ぼうと思ったら、この1冊でカンペキです。
僕自身も読んでいるおすすめ本です\(^o^)/
You choose peace or war?