こんにちは、エンジニアのさもです。
何かwebサービスに組み込んで遊べそうなAPIないかな~と調べていたところ、メッセージアプリLINEのMessage APIなるものを発見しました。
チュートリアルを進めると簡単にオウム返しBot(送った文章がそのまま帰ってくる)が作れるそうです。
そこで、応用として、名言を返してくれるBotを作ってみました。
スポンサーリンク
準備
LINE Developers からログインし、チャンネルを作っておきます
指示通り進めていけば特に難しいことは無いです。
- プラン
Developer Trialを選びました。
- 業種
テキトーです
チャンネルが作成し終わると、こんなカードが出てきます
設定が完了していないので、矢印ボタンを押して、設定画面に行きます。
- Channel Secret
使うので記録して置いて下さい
- アクセストークン
再発行を行って表示させて下さい
使うので記録して置いて下さい
- Webhook送信
使うに変更
- Webhook URL
herokuにwebサーバをおきます。
もう決まっている方は記入して置いて下さい
https://サーバのドメイン/callback
が良いです
- 自動応答メッセージ
利用しないに変更
設定は以上です。
実装
オウム返しBotの実装例は、こちらをコピペで動きました。
名言部分の実装
名言を返すメソッドを定義します。
名言はこちらのサイト
の中のランダムに名言を返すページhttp://www.meigensyu.com/quotations/view/random
をスクレイピングして使わせてもらいます。
今回は私と妻しか使わないBotなので、特に何もしませんが、大規模に使う場合は、スクレイピングする承諾やスクレイピング可能かどうかrobotexで調べたりして下さい。
こちらの記事に注意点がまとまっていました。
また、スクレイピングに関して、こちらにもう少し詳しく書いているので、興味ある方は見に行って下さい。
今回は一度robotexを用いてスクレイピング可能であることを確認したので、robotexの処理は省略します。
それでは実装していきます。
まずファイルの先頭に以下を追記します
require 'open-uri'
次にメソッド部分です
def return_message open("http://www.meigensyu.com/quotations/view/random") do |file| page = file.read page.scan(/<div class=\"text\">(.*?)<\/div>/).each do |meigen| return meigen[0].encode("sjis") end end end
最後に、返すメッセージを定義している部分
message = { type: 'text', text: event.message['text'] }
からメソッドを呼び出します
message = { type: 'text', text: return_message }
実装は以上です。
herokuにデプロイして確認してみて下さい。
実行結果
実行結果はこんな感じです
最後に
サンプルコードが公開されていたのでさくっとBotを作ることができました。
妻からは、悪阻でしんどいときに応援してくれるBotとか良いかも、と案を出してもらったのですが、応援メッセージが思い浮かばなかったので名言にしてみました。
応答だけでなくBotからメッセージも送れるので、いろいろできそうですね。
以上、LINE Bot作ってみました。
読者登録をしていただけると、ブログを続ける励みになりますので、よろしくお願いします。