LINE bot作ってみた詳細⑥〜LINE botとMySQLの連携
さて、ようやくLINE bot編も最後です。
これまでに、
・LINE botのサンプルアプリをheroku上で動かす。
・Web上でMySQLを使う。
までやりました。今回で上記2つをつなぎ合わせて完成です。
※今回からお読みの方もしいれば、ぜひ最初からお読みください。
・botからMySQLのデータベースを参照する。
以前herokuにあげたLINE botから、MySQLを使えるようにします。
再掲となりますが、開発環境としては
・MAC OS Sierra 10.12.4
・JAVA + SpringToolSuite
でやっています。
Spring使う場合、MySQLに限ったことではないですが、編集するのは以下の3つですね。
①pom.xml
②aprication properties
③.javaファイル
①pom.xml
MySQL使うために、下記をdependencyに追加しましょう。
それだけ。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
②aprication properties
ここに、MySQLの接続先URLやユーザ名などを記載します。
spring.datasource.url=jdbc:mysql://ホスト名/データベース名?reconnect=true spring.datasource.username=ユーザ名 spring.datasource.password=パスワード spring.datasource.driver-class-name=com.mysql.jdbc.Driver //JDBCっていう便利なドライバ使いまっせ /////以下は以前から登録してあるLINEの接続情報/////// line.bot.channelToken =むにゃむにゃ line.bot.channelSecret =ほげほげ
これだけ。
ClearDB(MySQL)のユーザ名などの情報の確認方法は、前回の記事を参照。
③.javaファイル
本体の部分ですね。
こんな感じで書いて動かしてます。
package com.example; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; import org.springframework.jdbc.core.JdbcTemplate; import com.linecorp.bot.model.event.Event; import com.linecorp.bot.model.event.MessageEvent; import com.linecorp.bot.model.event.message.TextMessageContent; import com.linecorp.bot.model.message.TextMessage; import com.linecorp.bot.spring.boot.annotation.EventMapping; import com.linecorp.bot.spring.boot.annotation.LineMessageHandler; @SpringBootApplication @EnableAutoConfiguration @ComponentScan @LineMessageHandler public class MySqlApplication { @Autowired private JdbcTemplate jdbc; public static void main(String[] args) { SpringApplication.run(MySqlApplication.class, args); } @EventMapping public TextMessage handleTextMessageEvent(MessageEvent<TextMessageContent> event) { System.out.println("event: " + event);//イベントをログに出力 String inputstr = event.getMessage().getText();//入力された文字列をinputstrに入れる List<Map<String, Object>> list2 = jdbc.queryForList ("SELECT comment FROM instrument where name like '"+ inputstr +"'"); //テーブル「instrument」から文字列「入力値」を含む行から、カラム「comment」を取り出す。 list2.forEach(System.out::println); //取り出したカラムを文字列に変換。 //以下で =以降の表示したい部分を決める。// //作りが悪いだけであって、うまく書けば不要な部分です。多分。// String string = list2.toString(); int start = string.indexOf("=") + 1; int end = string.indexOf("}"); String new_str2 = string.substring(start,end); return new TextMessage(new_str2); //new_str2を返す。 } @EventMapping public void handleDefaultMessageEvent(Event event) { System.out.println("event: " + event); //イベントをログに出力 } }
スマートにMySQLからカラムを取り出せなくて、まどろっこしい書き方になっている気がしてならない。。。
が、まぁ動いたからとりあえずよしとしよう。
これで完成。
herokuに改めてあげましょう。
で、LINEで動作確認。
おーけー、
超単純なやりとりだけど、これで一通りのことはできました。
MySQLのデータベースをちゃんと整備したり、
他のインテリジェントな機能と連携させれば、色々遊べそうなので、
おいおいチャレンジしていきたいですね!
以上、LINE bot作ってみた でした。
私が初心者なばかりに、自分と同じレベルの方にもわかるように、、と思って書いたら、想像以上に長くなってしまった。
また他のネタであいましょう!