3
3

More than 3 years have passed since last update.

ホットペッパーAPIを使ったLINEbotお店検索

Posted at

やりたいこと

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で取得しても$resultnullになる。
理由→レスポンス形式が初期値ではxmlであるから。

グルメサーチAPIでformatjsonに指定する。

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にはメソッドを書くだけにすることでコードがスッキリになる。
また、メソッドを別に書くことによって見やすく修正もしやすくなる。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3