webエンジニアの日常

RubyやPython, JSなど、IT関連の記事を書いています

名言を返してくれるLINE Botを作ってみた

こんにちは、エンジニアのさもです。

何かwebサービスに組み込んで遊べそうなAPIないかな~と調べていたところ、メッセージアプリLINEのMessage APIなるものを発見しました。

チュートリアルを進めると簡単にオウム返しBot(送った文章がそのまま帰ってくる)が作れるそうです。

そこで、応用として、名言を返してくれるBotを作ってみました。

スポンサーリンク

準備

LINE Developers からログインし、チャンネルを作っておきます

指示通り進めていけば特に難しいことは無いです。

  • プラン

Developer Trialを選びました。

  • 業種

テキトーです

チャンネルが作成し終わると、こんなカードが出てきます

f:id:s-uotani-zetakansu:20171025151156p:plain

設定が完了していないので、矢印ボタンを押して、設定画面に行きます。

  • Channel Secret

使うので記録して置いて下さい

  • アクセストークン

再発行を行って表示させて下さい

使うので記録して置いて下さい

  • Webhook送信

使うに変更

  • Webhook URL

herokuにwebサーバをおきます。

もう決まっている方は記入して置いて下さい

https://サーバのドメイン/callback が良いです

  • 自動応答メッセージ

利用しないに変更

設定は以上です。

実装

オウム返しBotの実装例は、こちらをコピペで動きました。

github.com

名言部分の実装

名言を返すメソッドを定義します。

名言はこちらのサイト

名言集.com - 名言・ことわざ・金言・格言集めました

の中のランダムに名言を返すページhttp://www.meigensyu.com/quotations/view/randomをスクレイピングして使わせてもらいます。

今回は私と妻しか使わないBotなので、特に何もしませんが、大規模に使う場合は、スクレイピングする承諾やスクレイピング可能かどうかrobotexで調べたりして下さい。

こちらの記事に注意点がまとまっていました。

Webスクレイピングの注意事項一覧 - Qiita

また、スクレイピングに関して、こちらにもう少し詳しく書いているので、興味ある方は見に行って下さい。

www.uosansatox.biz

今回は一度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にデプロイして確認してみて下さい。

実行結果

実行結果はこんな感じです

f:id:s-uotani-zetakansu:20171025153415p:plain

最後に

サンプルコードが公開されていたのでさくっとBotを作ることができました。

妻からは、悪阻でしんどいときに応援してくれるBotとか良いかも、と案を出してもらったのですが、応援メッセージが思い浮かばなかったので名言にしてみました。

応答だけでなくBotからメッセージも送れるので、いろいろできそうですね。

以上、LINE Bot作ってみました。

読者登録をしていただけると、ブログを続ける励みになりますので、よろしくお願いします。