ユーザメッセージ「元気?」と「げんき?」に対して同じ返答をする

特定の文字列が含まれているかチェックする②

preg_match()

preg_matchはマッチした場合は1を返し、
マッチしなかった場合は0を返す。

[書き方]

$text = "abcd";  
if(preg_match('/bc/', $text)){   
  //$textのなかにbcが含まれている場合  
}  
 
if(!preg_match('/bc/', $text)){  
  //$textのなかにbcが含まれていない場合  
}   
 
if(preg_match('/bc|d|es/', $text){  
  //$textのなかにbcまたはdまたはesが含まれている場合  
}  

例:

if(preg_match('/(マイケル|ムーア|監督|撮ってる|映画)/', $text)){
  $rep_text = 'マイケル・ムーア監督じゃねぇよ!!';
}

ユーザメッセージ「元気?」と「お元気ですか?」に対して同じ返答をする

特定の文字列が含まれているかをチェックする①

strpos()

該当する文字列が見つかった位置を数値で返し、
該当する文字列が見つからなかった場合は、falseを返す。

[書き方]

$text = "abcd";    
if(strpos($text,'bc') !== false){  
  //'abcd'のなかに'bc'が含まれている場合  
}  
  
if(strpos($text,'bc') === false){  
  //'abcd'のなかに'bc'が含まれていない場合   
}  

例:

if(strpos($text, '緑色') !== false){
  $rep_text = 'シュレックじゃねぇから!!';
}

変数に何が入っているのかを見たい

外部ファイルにログを出して確認する

https://line.f-logic.jp/BOT_log.jpg

[書き方]

error_log($msg, 3, '/var/www/html/line/log.txt');  

jsonの中身

  1. decodeして配列を変数にいれる
  2. error_log関数の引数に配列を入れる
$json_string = file_get_contents('php://input');
$json_obj = json_decode($json_string);
error_log(print_r($json_obj, true), 3, '/var/www/html/line/log.txt');  

参考:ユーザが送ってくるメッセージを受け取るWebhook Event Objectの構造

{
  "events": [
    {
      "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA", // 例
      "type": "message",
      "timestamp": 1462629479859,
      "source": {
        "type": "user",
        "userId": "U206d25c2ea6bd87c17655609a1c37cb8" // 会話している相手
      },
      "message": {
        "id": "325708", // 受け取ったメッセージ固有の識別子
        "type": "text", // 受け取ったメッセージのデータ型
        "text": "Hello, world" // 受け取ったメッセージの内容
      }
    },
    {
      "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
      "type": "follow", // 相手が友達登録をした
      "timestamp": 1462629479859,
      "source": {
        "type": "user",
        "userId": "U206d25c2ea6bd87c17655609a1c37cb8"
      }
    }
  ]
}

(ちなみに)ブラウザのコンソールで確認する

変数の中身

[書き方]

$text = "aaa";  
echo($text);  

配列の中身

[書き方]

$info = array("aaa", "bbb", "ccc");  
var_dump($info);  

★お題:ユーザメッセージを見てみよう

LINE BOTの返答パターンを増やしたい(ランダムに返す)

if文で拾えないユーザメッセージに対してランダムに返答する

  1. いくつかの返答パターンを記憶する
  2. 記憶した返答パターンからランダムに選んで返答する

いくつかの返答パターンを記憶する

配列

変数を並べて通し番号をつけたもの。通し番号のことを「添え字」を呼ぶ。

(図を書くとよい)

返答パターンを一つずつ配列のハコに入れる。
添え字で指定できる。

[書き方]

$配列名 = {要素1, 要素2, 要素3, 要素4};  

添え字は0から始まる。

例:

$array = array(  
    "ところでフィンランド行ったことある?",  
    "そういえば映画好き?",  
    "よくわからないな"  
)  
echo($array[0]);  
echo($array[1]);  
echo($array[2]);  

ランダムに指定する

乱数を生成する

乱数とは、ランダムな数字のこと。

[書き方]

$乱数名 = rand(最小値, 最大値);  

例:

$rand = rand(0, 2);  
echo($rand);  

乱数で配列の添え字を指定

[書き方]

$配列名[乱数]

例:

$array = array(  
    "ところでフィンランド行ったことある?",  
    "そういえば映画好き?",  
    "よくわからないな"  
)  
$rand = rand(0, 2);  
echo($array[$rand]);  

LINE BOTの返答を場合分けしたい

「元気?」と聞かれたら「元気だよ」と返答したい

ユーザ「元気?」
BOT 「元気?じゃねぇよ!!」

プログラムは基本的に上から下へ流れます。 途中で「AならCという処理、BならDという処理」というように、処理を分けたい場合が出てきます。
そのようなときは「if文」を書いて処理を分岐させます。

if文

[書き方]

if(条件){  
    //ここに処理を書く  
}  

条件が真のときに{}の中の処理が実行されます。

例:

$num = 1;  
if($num === 1){  
    echo($num);  
}  

★上のサンプルを実際に書いてもらって、サーバに置いてみてみる

★お題:ユーザメッセージが「元気?」のとき「元気だよ!」と返答する

else

条件が偽のときの処理をelse{}の中に書きます。

[書き方]

if(条件){  
    //条件が真のときの処理  
}else{  
    //条件が偽のときの処理  
}  

例:

$num = 1;  
if($num === 1){  
    echo($num);  
}else{
    echo("num is not 1.");
}  

else if

条件を複数並べるときは、以下のように書けます。

[書き方]

if(条件1){  
    //条件1が真のときの処理  
}else if(条件2){  
    //条件1が偽で条件2が真のときの処理  
}else{  
    //条件1も条件2も偽のときの処理  
}  

例:

$num = 1;  
if($num === 1){  
    echo($num);  
}else if($num === 2){
    echo("$num is 2.");
}  

★お題:ユーザメッセージが「近藤春菜」のとき「そうだよ」と返答する処理を追加する

★お題:if文をたくさん作って色々な挨拶に対応できるようにする

★お題:if文で、限定的な会話ができるようにする

2017/03/06

今日やったこと

新人研修

  • LINE BOTの返答パターンを複数作成
  • パターンからランダムに返答するよう実装
  • はてなブログ開設

困ったこと・学んだこと

  • PHPの関数「preg_match()」に手こずった
    • PHPのリファレンスを読んでもよくわからなかった
    • 具体的な使用例を探して解読した
    • 調べてもわからない時は、実際に使われているコードを解読することで理解が進む
  • ifの入れ子を学んだ

次にやること

  • 文字列の中にキーワードがあれば指定した返答を返す
  • 正規表現を学ぶ

所感

難しかった。

報告について

研修中の報告

エクセルやワードではなく、なぜMarkdownで書くのか?

MarkDownとは?

軽量マークアップ言語。
HTMLより知識なくても書ける。便利。

※ちなみに
マークアップ言語とは、文章を構造化するための言語。
文章を構造化するとは、「ここはタイトル部分です」「ここから本文が始まります」「ここは非常に重要な部分です」など、人間であれば直感的に理解できる事柄を、タグや記号で表示し、コンピューターに認識させることを指す。

MarkdownをHTMLに変換するツール
Markdown to HTML - MD2PDF  

メリットは?

  • ルールに従って書けばそれなりに見栄えのよい文書になる
  • 簡単にHTMLに整形できる
  • 表やリンクなども速く書ける

のちのちマークダウンでメモすると便利だなあと感じるようになるはずなので今から触れておく!

プレゼンについて

いつ?

最終日。前日はプレゼン準備にあてる。

内容は?

  • 自分たちが作ったBOTについて(機能、使用例など)
  • ブログのカスタマイズについて(なぜこのレイアウトにしたか等)
  • 開発で学んだこと・困ったこと・今後の課題など

はてなブログで書こう!

1.ブログ開設
はてなブログのサイト右上にある「ブログ開設」> 「はてなID登録」
2.ブログを書く
Markdownチートシートを参考になにか書いてみる
3.例を参考に、報告記事を書く

※会社や個人が特定できるような記述はNG!!