2016-09-08 64 views
3

我想通過使用PHP調用Google Cloud Speech API並出現問題。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。

{ 「錯誤」: 「無效的JSON有效載荷收到 未知名稱\」 內容\ 「在 '聲音'::找不到域」{ 「代碼」: 「消息」 400, 「狀態」 : 「INVALID_ARGUMENT」,「details」:[{「@type」: 「type.googleapis.com/google.rpc.BadRequest」,「fieldViolations」:[{「{」「field」,「audio」,「description」 :「收到無效的JSON有效負載 'audio'處的未知名稱\」content \「:無法找到字段。」 }]}]}}「

我想這是因爲$上傳配置不正確。 據谷歌雲語音API,它應該是 」base64編碼字符串「。 https://cloud.google.com/speech/reference/rest/v1beta1/RecognitionAudio

這就是爲什麼我用BASE64_ENCODE功能,但它似乎JSON沒有正確地處理這個值。 有什麼想法?

+0

你應該''base64_encode($上傳)'並且將'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

請而不是「內容」

小寫字母「C」

它爲我工作「內容」。

相關問題