[PHP] AITalkの音声合成APIで困った
file_get_contents の返り値が false で困っています!!
Docomoさんがエーアイさんの音声合成APIを提供しています.
エーアイの音声合成APIの中でも,「SSML」を利用しようとしています.
・ドコモさんのHP
https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_docs_id=70
・SSMLについて
https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_docs_id=71#tag01
SSMLを利用しようとPHPで実装して実行するも file_get_contents でエラーになってしまいます.
(エラー:failed to open stream: HTTP request failed! )
コードは以下のように記述しました.
<?php
// コード書く際に参考にしたサイト
// http://www.d-labo.net/laboratory/php/7001.php
// http://stackoverflow.com/questions/9412650/how-to-fix-411-length-required-error-with-file-get-contents-and-the-expedia-xml
function post($url, $data) {
if (!ini_get('allow_url_fopen'))
throw new Exception("Not Allowed URL Open!");
//headersは仕様通りに記述したつもり
$headers = array(
'Content-Type:application/ssml+xml',
'Accept:audio/L16',
'Content-Length:'.sprintf("%d",strlen($data))
);
//methodは必ずPOSTと仕様書にあった
$stream = stream_context_create(array('http' => array(
'method' => 'POST',
'header' => implode("\n",$headers),
'content' => $data
)));
//XXX: file_get_contentsの返り値が必ず false になってしまう
return file_get_contents($url, false, $stream);
}
////// usage sample
////// 申し訳ないのですが,APIKEYを第三者に提供することはできません.
try {
$url = 'https://api.apigw.smt.docomo.ne.jp/aiTalk/v1/textToSpeech?APIKEY=XXXXXXXXXX';
$xml = '<?xml version="1.0" encoding="utf-8" ?><speak version="1.1"><voice name="nozomi">エーアイの音声合成エンジンによる音声です。</voice><break time="1000ms" /><voice name="seiji">エーアイの音声合成エンジンによる音声です。</voice></speak>';
$hoge = post($url,$xml);
var_dump($hoge);
} catch (Exception $e) {
var_dump($e);
}
?>
以上のコードが記述されたファイル(text_to_voice.php)をターミナルで実行
$ php text_to_voice.php
Warning: file_get_contents(https://api.apigw.smt.docomo.ne.jp/aiTalk/v1/textToSpeech?APIKEY=XXXXXXXXX): failed to open stream: HTTP request failed! in text_to_voice.php on line 26
bool(false)
以上になります.どうやったら file_get_contents の返り値が false じゃなくなるのか知りたいです.
よろしくお願い致します.
画像にはリクエストヘッダーの内容とAPIのURLが記述されており,
画像にあるのを参照しました.