やりたいこと
LINEを使って位置情報からホットペッパーに載っているお店の情報を返すというBOTの作成
位置情報を取得してその戻りを確認する
まずホットペッパーAPIを利用するにあたってAPIキーを発行する。
https://webservice.recruit.co.jp/register/
http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=[APIキー]&lat=[緯度]&lng=[経度]&range=5
参考:ホットペッパーグルメ APIリファレンス
位置情報を元にjsoncodeを取得する
curlを使用し、上記のグルメサーチAPIの戻りを取得する。
$ch = curl_init();//curlセッション初期化
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//curl_exec()の返り値を文字列で返す。
$response = curl_exec($ch);//URLの情報を取得し、ブラウザに渡す
$result = json_decode($response, true);//取得したURLのjsonコードをデコードする
curl_close($ch);//セッション終了
この際、上記のURLで取得しても$result
はnullになる。
理由→レスポンス形式が初期値ではxml
であるから。
グルメサーチAPIでformat
をjson
に指定する。
jsonとは?
参考:JSONってなにもの? | Think IT(シンクイット)
取得したURLの情報を$response
に代入し、さらにjson_decode
で取得したjsonコードをデコードする。
お店があるかのチェックを行う
返ってきた情報を元にお店情報があるかどうかのエラーハンドリングを行う。
また、位置情報ではなくテキストやスタンプが送られてきた場合のレスポンスも設定する。
foreachで取得した結果を回し、店名とURLを変数に代入する
foreach ($[取得したお店情報] as $key => $value) {
$shopinfo .= $value[店名] . "\n";
$shopinfo .= $value[ホットペッパーURL] . "\n\n";
}
取得する件数をif文で指定する
$key
が2になったらbreak
することで3件だけ取得することができる。
foreach ($[取得したお店情報] as $key => $value) {
$shopinfo .= $value[店名] . "\n";
$shopinfo .= $value[ホットペッパーURL] . "\n\n";
if ($key == 2) {
break;
}
}
メッセージを返すメソッドを別ファイルに書く
位置情報取得や上記の処理をwebhook.php
に記載すると位置情報のコードが増えてしまう。
そのため、お店情報を取得する処理を別ファイルに記載して、webhook.php
にはメソッドを書くだけにすることでコードがスッキリになる。
また、メソッドを別に書くことによって見やすく修正もしやすくなる。