

Yahoo API の 日本語形態素解析 を実行しようとしています。

[Yahoo API
日本語形態素解析](https://developer.yahoo.co.jp/webapi/jlp/ma/v2/parse.html)

コードは問題ないように思えるのですが「パラメータが足りない」というエラーが発生します。

上記の公式URLの他にこちらのサイトも参考にしました。  
[Yahoo!のAPIで形態素解析](https://note.com/yukioterasawa/n/n1efbcf13035f)

コードは次のとおりです。

[code]

    <?php
    
    class YahooApiParse
    {
        const END_POINT = "https://jlp.yahooapis.jp/MAService/V2/parse";
        const APP_ID = "(my API id)";
        const JSONRPC = "2.0";
        const METHOD = "jlp.maservice.parse";
    
        public function parse($text)
        {
            // Log the text being parsed
            $this->log($text);
    
            // Parse the text
            $result = $this->parseText($text);
    
            // Log the result of the parse
            $this->log($result);
    
            return $result;
        }
    
        private function parseText($text)
        {
            // $param の 'params' はオブジェクトにする
            $param = [
                'id' =>  time(),
                'jsonrpc' => self::JSONRPC,
                'method' => self::METHOD,
                'params' => ['q' => $text],
            ];
    
            var_dump($param);
            // Parse the text using the Yahoo API
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_HTTPHEADER, array(
                'Content-Type: application/json',
                'User-Agent: Yahoo AppID: ' . self::APP_ID
            ));
            curl_setopt($curl, CURLOPT_URL, self::END_POINT);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_POST, true);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
            $json = curl_exec($curl);
            curl_close($curl);
    
            return json_decode($json, true);
        }
    
        private function log($text)
        {
            // Log the text somewhere
        }
    }
    
[/code]

出力されるエラー

[code]

    <b>Warning</b>:  Array to string conversion in <b>C:\web\text\class\YahooApiParse.php</b> on line <b>45</b><br />
    array(3) {
      ["error"]=>
      array(2) {
        ["code"]=>
        int(-32600)
        ["message"]=>
        string(15) "Invalid request"
      }
      ["id"]=>
      NULL
      ["jsonrpc"]=>
      string(3) "2.0"
    }
    
[/code]

どの部分に問題があるのでしょうか？  
何度見返しても、問題の場所を見つけることができません。  
お力を貸していただけると嬉しいです。

よろしくお願いします。


CC BY-SA 4.0
2023-02-10T08:02:00.887
93789
2023-02-10T10:40:31.033
7980
question
php api
Yahoo API の「パラメータが不足している」エラーになってしまう


配列をそのまま送信していたのが原因でした。

次のように `json_encode` を追加することで解決しました。  
`curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($param));`

ちなみに気がついたのは、chatGPTのおかげです。  
コードを投げ込んでみると、上記の指摘をしてくれました。  
スゴい


CC BY-SA 4.0
2023-02-10T10:40:31.033
93791
2023-02-10T10:40:31.033
7980
93789
answer