Я пытаюсь вызвать Google Cloud Speech API с помощью PHP, и у меня возникла проблема.
$stturl = "https://speech.googleapis.com/v1beta1/speech:syncrecognize?key=xxxxxxxxxxxx";
$upload = file_get_contents("1.wav");
$upload = base64_encode($upload);
$data = array(
"config" => array(
"encoding" => "LINEAR16",
"sampleRate" => 16000,
"languageCode" => "en-US"
),
"audio" => array(
"Content" => $upload,
)
);
$jsonData = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $stturl);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
$result = curl_exec($ch);
Результат говорит, что это НЕДЕЙСТВИТЕЛЬНАЯ ЗАГРУЗКА JSON.
{"error": {"code": 400, "message": "Получены недопустимые данные JSON. Неизвестное имя \" content \ "в 'audio': поле не найдено.», «status»: «INVALID_ARGUMENT», «подробности ": [{" @type ":" type.googleapis.com/google.rpc.BadRequest "," fieldViolations ": [{" field ":" audio "," description ":" Получена недопустимая полезная нагрузка JSON. Неизвестное имя \ "content \" at 'audio': поле не найдено. " }]}]}} "
Я думаю, это потому, что $ upload неправильно настроен. Согласно Google Cloud Speech API, это должна быть «строка в кодировке base64». https://cloud.google.com/speech/reference/rest/v1beta1/RecognitionAudio
Вот почему я использовал функцию base64_encode, но похоже, что JSON неправильно обрабатывает это значение. Есть предположения?
base64_encode($upload)
и также изменитьContent
наcontent
. Должно работать нормально. - person BadHorsie   schedule 14.09.2016