LoginSignup
1
0

More than 3 years have passed since last update.

PHPとsimple apiで最寄駅検索LINEbotを作ってみる

Posted at

はじめに

LINE MessagingAPIを使用して最寄駅を検索できるLINEbotを作ったので作り方などを書いてみます。(初投稿です)

LINE Developersに登録

まず、LINE Developersのサイトにいって自分のLINEアカウントでログインします。
スクリーンショット 2020-03-13 15.27.59.jpg
ログインするとプロバイダー作成画面に移動するので、任意の名前でプロバイダーを作成してください。
プロバイダーを作成したら、MessagingAPIを選択します。
スクリーンショット 2020-03-13 15.33.05.jpg
ここで、LINEbotのアイコン、表示名などを入力していきます。
必要事項を入力するとチャンネルの作成が完了します。
チャンネルが作成できたら、MessagingAPI設定に移動して、
- Webhookの利用・・・する
- グループ・複数人チャットへの参加を許可する・・・有効
- 応答メッセージ・・・無効
- あいさつメッセージ・・・無効
に設定します。
あと、QRコードから先にbotと友達になっておいてもいいと思います。

PHPプログラムの作成

ここからは、PHPのプログラムを書いていきます。

location.php
<?php

$accessToken = 'YOUR_ACCESS_TOKEN';

$return_message_text_a="";

//ユーザーからのメッセージ取得 
$json_string = file_get_contents('php://input');
$json_object = json_decode($json_string);

//取得データ
$replyToken = $json_object->{"events"}[0]->{"replyToken"};        //返信用トークン 

$message_type = $json_object->{"events"}[0]->{"message"}->{"type"};    //メッセージタイプ 
$message_text = $json_object->{"events"}[0]->{"message"}->{"text"};    //メッセージ内容 
$latitude = $json_object->{"events"}[0]->{"message"}->{"latitude"};
$longitude = $json_object->{"events"}[0]->{"message"}->{"longitude"};

if($message_type=="location"){ 

     function sending_locationmessages($accessToken, $replyToken, $message_type, $return_message_text_a){ 
       //レスポンスフォーマット 
       $response_format_text = [ 
           "type" => 'text', 
           "text" => $return_message_text_a 
       ]; 
       //ポストデータ 
       $post_data = [ 
           "replyToken" => $replyToken, 
           "messages" => [$response_format_text] 
       ]; 
       //curl実行 
       $ch = curl_init("https://api.line.me/v2/bot/message/reply"); 
       curl_setopt($ch, CURLOPT_POST, true); 
       curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); 
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
       curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data)); 
       curl_setopt($ch, CURLOPT_HTTPHEADER, array( 
           'Content-Type: application/json; charser=UTF-8', 
           'Authorization: Bearer ' . $accessToken 
       )); 
       $result = curl_exec($ch); 
       curl_close($ch); 
     } 

   $xml = simplexml_load_file('http://map.simpleapi.net/stationapi?x='.$longitude.'&y='.$latitude.'&output=json'); 
   $json = json_decode(file_get_contents('http://map.simpleapi.net/stationapi?x='.$longitude.'&y='.$latitude.'&output=json'), TRUE); 

   $return_message_text_a = $json[0]["name"]."です\n"."\n地図はこちら https://www.google.co.jp/maps/search/".$json[0]["name"]."\n"; 

   sending_locationmessages($accessToken, $replyToken, $message_type, $return_message_text_a); 
 } 

 function sending_messages($accessToken, $replyToken, $message_type, $return_message_text){ 
   //レスポンスフォーマット 
   $response_format_text = [ 
       "type" => $message_type, 
       "text" => $return_message_text 
   ]; 

   //ポストデータ 
   $post_data = [ 
       "replyToken" => $replyToken, 
       "messages" => [$response_format_text] 
   ]; 

   //curl実行 
   $ch = curl_init("https://api.line.me/v2/bot/message/reply"); 
   curl_setopt($ch, CURLOPT_POST, true); 
   curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); 
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
   curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data)); 
   curl_setopt($ch, CURLOPT_HTTPHEADER, array( 
       'Content-Type: application/json; charser=UTF-8', 
       'Authorization: Bearer ' . $accessToken 
   )); 
   $result = curl_exec($ch); 
   curl_close($ch); 
 } 

最初の
$accessToken = 'YOUR_ACCESS_TOKEN';

のところはMessagingAPI設定のページで発行してきた自分のアクセストークンを貼り付けます。
今回はsimpleapiを利用して、最寄駅情報を取得しています。
コードをかけたら、PHPが動くサーバーにデプロイします。

動作画面

実際にどのように動くのかお見せします。
位置情報をLINEのトーク上で送ると



このように位置情報の中に含まれる、緯度、経度の座標から最寄駅を見つけて送ってくれます。

まとめ

結構簡単にLINEbotは作ることができました!
今度はこのbotのpytohn版を作ってみたりしたいです。

1
0
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
1
0