kmmkの雑種系日記

学習まとめです。

Guzzleを使用してリクルートTalk_APIを叩いてみた

目次

はじめに

WebAPIを作ることはあっても、使用する経験が少なかったので、練習として叩いてみました。

a3rt.recruit-tech.co.jp

こんな感じ f:id:makoo5:20190901010939p:plain

github

github.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);
  • method : GET /POSTなど
  • 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連想配列なので、通常の配列から値を取り出す感覚で取得する

参考

PHP Http ClientのGuzzleパッケージを使う | アールエフェクト

Guzzle, PHP HTTP client — Guzzle Documentation