Requestの中身について
前回の記事「音声合成を使ってみる」で紹介した
AITalk® 声の職人®
http://www.ai-j.jp/cloud/voice/
のリクエストは以下の様になっていた。
callback=callback&speaker_id=1&text=%E4%BB%8A%E6%97%A5%E3%81%AE%E6%99%A9%E5%BE%A1%E9%A3%AF%E3%81%AF%E3%80%8C%E3%82%AB%E3%83%AC%E3%83%BC%E3%83%A9%E3%82%A4%E3%82%B9%E3%80%8D%E3%81%A7%E3%81%99%E3%80%82&ext=ogg&volume=1.0&speed=1&pitch=1&range=1&anger=0&sadness=0&joy=0&_=1498824369076
まとめると
パラメータ | 意味 |
---|---|
callback | コールバック関数指定 |
speaker_id | 使用したいキャラ |
text | 喋らせたい内容 |
ext | 音声ファイルフォーマット(ogg,mp3,wav) |
volume | 音量?効かないからなくてもいい |
speed | 話しのスピード、1でOK |
pitch | 声の高さ、1でOK |
range | 強弱、1でOK |
anger | 怒り?効かないからなくてもいい |
sadness | 悲しさ?効かないからなくてもいい |
joy | 嬉しさ?聞かないからなくてもいい |
というわけで、効かないパラメータを除くとこんな感じになるかな。(見やすい様に改行しているが、実際は改行しない)
allback=callback&
speaker_id=1&
text=%E4%BB%8A%E6%97%A5%E3%81%AE%E6%99%A9%E5%BE%A1%E9%A3%AF%E3%81%AF%E3%80%8C%E3%82%AB%E3%83%AC%E3%83%BC%E3%83%A9%E3%82%A4%E3%82%B9%E3%80%8D%E3%81%A7%E3%81%99%E3%80%82&
ext=ogg&
speed=1
そそ、念のためパラメータ同士は「&」でくっつけるよってのを伝えておく。
PHPでAPIを呼んでみる
PHPはWEBアプリに特化した言語なので、WEBに関する便利な関数が多いのだ。
今回使う関数は「file_get_contents」と「http_build_query」と「stream_context_create」の3つ。
実際使ってみよ。
sample.php
// 喋らせたい文
$text = "今日の晩御飯はカレーです。";
// API
$api = 'http://cloud.ai-j.jp/demo/aitalk2webapi_nop.php';
// Requestのパラメータ生成
// 連想配列を渡せば、綺麗にパラメータを作ってくれる
// callback=callback&speaker_id=1&text=%E4%BB%8A%E6%97%A5%E3%81%AE%E6%99%A9%E5%BE%A1%E9%A3%AF%E3%81%AF%E3%82%AB%E3%83%AC%E3%83%BC%E3%81%A7%E3%81%99%E3%80%82&ext=ogg&speed=1
$content = http_build_query(array(
'callback'=>'callback',
'speaker_id'=>1,
'text'=>$text,
'ext'=>'ogg',
'speed'=>1,
)
);
// パラメータ等を指定
$option = array(
'http'=>array(
'method'=>'post',
'header'=> "Content-type: application/x-www-form-urlencoded\r\n",
'content'=> $content
)
);
// APIの呼び出し
$response = file_get_contents($api,false,stream_context_create($option));
echo $response;
echo PHP_EOL;
実行結果
MacBookPro:Desktop skanehira$ php sample.php
callback({"url":"http:\/\/cloud.ai-j.jp\/demo\/tmp\/1_201707041002172097854661.ogg"})
MacBookPro:Desktop skanehira$
まとめ
こんな感じでやればAPIの呼び出しできるよーっと。
本当は音声ファイルを再生したいけどPHPはそのような関数はないっぽいので諦めた(笑)
jsを使えば出来るみたいだけど、勉強も兼ねてそれはまたいつか違う記事で書くと思う。
次回はcurlを使用してGoogleカレンダーの情報を取得する記事を書くよ予定.
やったことがないので、勉強しながらの記事になると思うのでご容赦をm(_ _)m