Guzzleを使用してリクルートTalk_APIを叩いてみた
目次
はじめに
WebAPIを作ることはあっても、使用する経験が少なかったので、練習として叩いてみました。
https://a3rt.recruit-tech.co.jp/product/talkAPI/a3rt.recruit-tech.co.jp
こんな感じ
github
https://github.com/kaminotsukai/a3rt_api_SimpleChatgithub.com
概要
<form method="post"> <input type="text" name="query" placeholder="何か話しかけて"> <input type="submit"> </form> <?php $text = ""; $sApiKey = "XXXXXXX"; $base_url = 'https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk'; $method = 'POST'; <略> if($_POST){ $text = $_POST['query']; $client = new Client(); $response = $client->request($method,$base_url,[ 'form_params' => [ 'apikey' => $sApiKey, 'query' => $text ] ]); $response_body = $response->getBody(); $response_body = json_decode($response_body,true); $message = $response_body['results'][0]['reply']; echo "あなた:".$text; echo "<br />"; echo "AIくん:".$message; } ?>
詳細
1
if($_POST){ $text = $_POST['query'];
$_POST
はフォームで入力したPOST送信のデータを取得してるスーパーグローバル変数です。
フォームにデータが入力された場合のみ、$_POST['inputのnameの値']
で取得することができる
2, Guzzleの実装
use GuzzleHttp\Client; <?php //インスタンス作成 $client = new Client(); //post送信(レスポンス取得) $response = $client->request($method,$base_url,[ 'form_params' => [ 'apikey' => $sApiKey, 'query' => $text ] ]); //デコード+表示 $response_body = $response->getBody(); $response_body = json_decode($response_body,true); $message = $response_body['results'][0]['reply']; ?>
インスタンス作成
post送信(レスポンス取得)
リクエストを送る時はこのような記述をする
<?php $client->request($method,$uri,$options); //これも可能 $client->$method($uri,$options);
今回のパラメータはこのようにしています。
form_paramsを利用することでPOSTリクエストをおくることができます。
<?php 'form_params' => [ 'apikey' => $sApiKey, 'query' => $text ]
デコードと表示
<?php // 1 $response_body = $response->getBody(); // 2 $response_body = json_decode($response_body,true); //3 $message = $response_body['results'][0]['reply'];
1, POSTでサーバにデータを送信する際は、リクエストボディにデータが記述されるのでgetBodyでBodyを取得
※ GETはURLのパラメータに記述
2, デコード 今回のレスポンスはjson形式(JavaScriptの連想配列)なので、PHPの連想配列に変換してあげないといけない。
それがjson_decode($value);
3, 表示
PHPの連想配列なので、通常の配列から値を取り出す感覚で取得する