HerokuとPHPでLineのDB接続されたチャットボットを作る4(検索・返信処理等)
前回:
1. 簡単なBotの作成(おうむ返し)
2. データベース接続(準備)
3.データベース接続(接続)
4. 検索・返信処理
5. 曖昧検索
前回でDBへの接続もできたので、次は実際の処理の方へ。
4を曖昧検索等の処理、5を返信処理としていたけど、書きながらなんか違うなって思ったので、4を検索・返信処理、5を曖昧検索に変更します。
ここら辺からLogを見ることも多くなるかと思うのでLogの見方を共有。
いきなり曖昧検索へ行くとあれなので、普通の検索からスタート。
DBへの検索対象のデータの登録
まずはデータの登録。
とりあえず必要なのは
1. ID
2. レストランの名前
3. 住所
の三つ。
テストデータを登録した時同様(新しくテーブルを作ってもいい)、データを登録する。
id, name, addressといった感じで入力。idは自動で入力されて欲しいので右下のAuto Incrementにチェック入れて、apply。
そして前回と同じ方法でnameとaddressに情報を入れる。
ここでは、自宅近くのKneipeっていう飲み屋を仮に入れました。住所はthis is 住所って感じで誤魔化しています。
データの呼び出し
とりあえずデータが入ったので、呼び出してみる。
いきなり検索して表示させるのもあれなので
1. なんでもメッセージを受信したら、住所を返信
2. 正確な住所名(曖昧検索は後)を受信したら、住所を返信
の二段構成でいく。
まずsql文を変更。
$sql = $dbh->prepare("SELECT * FROM test_table");
前回の段階では全データを取り出していたのを、該当するもののみ呼び出すようにする。
なので、
$sql = $dbh->prepare("SELECT * FROM test_table WHERE name = 'The Kneipe'");
に変更する。
(レストラン名を他にしている場合、列名を変えてる場合はname = 'The Kneipe'をそれに合わせて変更。)
そうすると、
ちゃんと対象の情報が返信された。
ただ、登録しているデータが1種類なので、ちゃんと確認したかったら2種類以上登録して、name=''の中身を変えて反応を見るとわかりやすいかもしれない。
次は、2. 正確な住所名(曖昧検索は後)を受信したら、住所を返信の部分。
こっからは、メッセージを受け取った後、返信をする直前で処理をするため
$sql = $dbh->prepare("SELECT * FROM test_table WHERE name = 'The Kneipe'");
$sql->execute();
$result = $sql->fetch();
$res = print_r($result, TRUE);
これらの前回書いたものも含めて
$client = new LINEBotTiny($channelAccessToken, $channelSecret);
foreach ($client->parseEvents() as $event) {
switch ($event['type']) {
case 'message':
$message = $event['message'];
switch ($message['type']) {
case 'text':
の次に書く。
まず、送信されたメッセージを変数($res_name)に格納。その後、SQL文を変更する。
$res_name = $message[text];
$sql = $dbh->prepare("SELECT * FROM test_table WHERE name = :name");
$sql->bindValue(':name', $res_name);//:nameをバインド、送信された内容で検索
$sql->execute();
SQL文内で変数を扱う場合には、prepare処理するのが原則らしく、その際一旦変数の箇所を:nameといったように:をつけて記述。
その後bindValueで値を入れる。
これをすると、
と、こんな感じに入れた値に対応して返信が来る。
次は、これを曖昧検索にして、そして返信をちゃんと文にする。
(そう言えば画像は全部自分のです、使い所なかったので放出してます。)