"BOKU"のITな日常

BOKUが勉強したり、考えたことを頭の整理を兼ねてまとめてます。

PHPで「Yahoo!のテキスト解析/ルビ振りAPI」を使うサンプル

f:id:arakan_no_boku:20220313003131p:plain

目次

PHPで「Yahoo!のテキスト解析/ルビ振りAPI」を使うサンプル

Yahoo!デベロッパーネットワークの、ルビ振りAPIのサンプルコードページには、Pythonの例が掲載されています。

developer.yahoo.co.jp

このAPIは、例えば「漢字のふりがなを取得する」という文字列を与えれば、以下のようなJSONデータを取得できるものです。

{"id":"1234-1","jsonrpc":"2.0","result":{"word":[{"furigana":"かんじ","roman":"kanzi","surface":"漢字"},{"surface":"の"},{"surface":"ふりがな"},{"surface":"を"},{"furigana":"しゅとく","roman":"syutoku","surface":"取得"},{"surface":"する"}]}}

これを使うPHPのサンプルを作成してみます。

 

WebApiをPOSTするクラスの作成

Yahoo!APIは、パラメータをJSON形式にしてPOSTして使います。

PHPではcURLを使います。

file_get_contents 関数のほうが簡単ですが、くそ重いのでやめときます。

他のAPIと使いまわしできるように、簡単なクラスを作ります。

class PostApiClass {
    protected $body_response;
    protected $header_response;
    protected $status_code;

    public function __construct( 
        $url,
        $header_array, 
        $params) {
            $curl = curl_init($url);
            $options = array(
                CURLOPT_HTTPHEADER =>$header_array,
                CURLOPT_POST => true, // POST
                CURLOPT_POSTFIELDS => $params, // body                
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_HEADER => true, 
            );
            curl_setopt_array($curl, $options);
            $response = curl_exec($curl);
            $this->status_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
            $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
            $header = substr($response, 0, $header_size); // header切出
            $this->header_response = array_filter(explode("\r\n",$header));
            $this->body_response = substr($response, $header_size); // body切出
            curl_close($curl);
    }

    public function get_body_response(){
        return $this->body_response;
    }

    public function get_header_response(){
        return $this->header_response;
    }

    public function get_status_code(){
        return $this->status_code;
    }

}

特別なことはやっていません。

cURLを使ってJSONをPOSTしてレスポンスを受け取っています。

www.php.net

Yahoo!APIを利用するために必要な情報は、「$url, $header_array,  $params」の3つの変数にすべて格納されている想定です。

 

作成したクラスを使いYahoo!のルビ振りAPIを利用する

$url, $header_array,  $paramsの3つの変数に、必要な情報を格納して、上記のクラスを呼び出すコードです。

require "class_webapi.php";

$appid = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
$url = "https://jlp.yahooapis.jp/FuriganaService/V2/furigana";
$param_array = array(
    "id" => "1234-1",
    "jsonrpc" => "2.0",
    "method" => "jlp.furiganaservice.furigana",
    "params" => array(
      "q" => "漢字のふりがなを取得する",
      "grade" => 1
    )
);
$params = json_encode($param_array); 
$header = array(
    "Content-Length: ".strlen($params),
    "Accept: application/json",
    "Content-Type: application/json",
    "User-Agent: Yahoo AppID: ".$appid,
);
$apicl = new PostApiClass($url,$header,$params);
if($apicl->get_status_code() == "200"){
    print_r($apicl->get_body_response());
}

横着して、変換対象の文字列もソースに直書きしてますが、ご容赦ください。

パラメータを配列にセットして、JSONエンコードする。

アプリケーションIDはへだーの「"User-Agent: Yahoo AppID: ".」にセットしています。

 

注意:実行には、アプリケーションIDが必要です

上記のコードの「$appid = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";」の部分にセットするアプリケーションIDを取得しておく必要があります。

とりあえず、以下に従って手続きしてください。

developer.yahoo.co.jp

個人で試すだけなら、気軽に登録できるみたいです。

僕が登録しているうちの、いちばん最初のはこんなんでした。

f:id:arakan_no_boku:20220313233227p:plain

ではでは。