PHP」カテゴリーアーカイブ

位置情報を送信したら近辺の麺屋の情報を返すLINE BOTを作った

こんにちは、表題のとおりです。

実はLINEBOTを作ってみたらやってみようと思っていたのですが、やはり先駆者がたくさんおられました笑

なので二番煎じなのをご了承ください。
よかったら使ってみてください。

近くの麺屋検索

QRコード

友達追加

友だち追加

概要と使い方

友達追加後に「+」ボタンから位置情報を送信するだけです。
送信後に情報があれば最大5件まで表示します。
情報をぐるなびAPIから取得しています、なのでぐるなびに掲載されていない店舗は出力されません。
URLをGoogleAPIにて短縮してあります。
いじくるので時々使えなくなるかもしれません。

使ったもの

・PHP
・Heroku
・ぐるなびAPI
・Google API

割と苦労した点

デバッグ、出すためにわざわざerror_log関数を仕込んでHerokuにpushして試してました。
多分もっといいやり方があった気がする。

今後の対応

位置情報から近い順にソートして出力させます。

参考にしたサイト

【LINE BOT API】位置情報を送ると近くのラーメン屋さんを教えてくれるBOTを作ってみました
誰でも簡単にできる! LINE Botの作り方

みなさん使ってみてください。

ではでは

【広告】

This API does not support parsing form-encoded inputになった話

なんか小1時間ぐらい悩んでしまった。

結論

GoogleのAPIから送信する時は「Content-Type: application/json; charset=UTF-8」を付けましょう。

事象

PHPでCURLを使ってGoogleのURL短縮のAPIへのリクエストをしていたのですが、以下のようなエラー

{
  "error": {
    "errors": [
     {
      "domain": "global",
      "reason": "parseError",
      "message": "This API does not support parsing form-encoded input.
     }
   ],
   "code": 400,
   "message": "This API does not support parsing form-encoded input.
  }
}

で、その時にリクエストしていたCURLのロジックはこちら

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $uri);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 証明書の検証を行わない
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 証明書の検証を行わない
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($postData));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  // curl_execの結果を文字列で返す
$response = curl_exec($curl);

なので↓を足したらちゃんと通りました

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $uri);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 証明書の検証を行わない
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 証明書の検証を行わない
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($postData));
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=UTF-8')); //←☆これ
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  // curl_execの結果を文字列で返す
$response = curl_exec($curl);

ちゃんとjsonということを明示しないと怒られてしまうそうです。
(デフォルトだとapplication/x-www-form-urlencodedで送信されているそう)

GoogleのAPIを使うときは気を付けましょう。

【広告】