読者です 読者をやめる 読者になる 読者になる

おあそび ぷろぐらみんぐ 日記

プログラミング初心者のおあそびと勉強の記録です。

LINE bot作ってみた詳細⑥〜LINE botとMySQLの連携

さて、ようやくLINE bot編も最後です。

これまでに、

・LINE botのサンプルアプリをheroku上で動かす。

・Web上でMySQLを使う。

までやりました。今回で上記2つをつなぎ合わせて完成です。

 ※今回からお読みの方もしいれば、ぜひ最初からお読みください。

 

f:id:beethovenmendelssohn:20170416185708j:plain

 

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で動作確認。

f:id:beethovenmendelssohn:20170406224959p:plain

 

おーけー、

超単純なやりとりだけど、これで一通りのことはできました。

 

MySQLのデータベースをちゃんと整備したり、

他のインテリジェントな機能と連携させれば、色々遊べそうなので、

おいおいチャレンジしていきたいですね!

 

以上、LINE bot作ってみた でした。

私が初心者なばかりに、自分と同じレベルの方にもわかるように、、と思って書いたら、想像以上に長くなってしまった。

また他のネタであいましょう!