2016-09-08 2 views
3

Я пытаюсь вызвать API Google Cloud Speech с помощью PHP и возникла проблема.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 PAYLOAD.

{ "Ошибка": { "код": 400, "сообщение": "Invalid JSON полезной нагрузки получил Неизвестное имя \." Содержание \ "в 'аудио':. Не удается найти поле", "Статус" : "INVALID_ARGUMENT", "details": [{"@type": "type.googleapis.com/google.rpc.BadRequest", "fieldViolations": [{ "field": "audio", "description" : «Недопустимая полезная нагрузка JSON. Неизвестное имя \" content \ "на 'audio': Не удается найти поле." }]}]}} "

Я думаю, это потому, что $ загрузка не настроена правильно. Согласно Google Cloud Speech API, он должен быть "Строка в кодировке base64". https://cloud.google.com/speech/reference/rest/v1beta1/RecognitionAudio

Вот почему я использовал base64_encode функцию, но, кажется, JSON не обрабатывает это значение правильно. Любые мысли?

+0

Вы должны «base64_encode ($ upload)», а также изменить «Content» на 'content'. Должен работать нормально. – BadHorsie

ответ

2

Вам нужно построить правильно отформатированный вход в виде массива, а затем JSON закодировать его. Например, для отправить файл, base64encode это как "содержание" и представить API, как показано:

$data = array(
    "config" => array(
     "encoding" => "LINEAR16", 
     "sample_rate" => $bitRate, 
     "language_code" => "en-IN" 
    ), 
    "audio" => array(
     "content" => base64_encode($filedata) 
    ) 
); 

$data_string = json_encode($data);                

$ch = curl_init($googlespeechURL);                  
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                  
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                  
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
    'Content-Type: application/json',                     
    'Content-Length: ' . strlen($data_string))                  
);                             

$result = curl_exec($ch); 
$result_array = json_decode($result, true); 
1

пожалуйста 'содержание' вместо 'Content'

буква 'с'

своей работы для меня.

Смежные вопросы