Estoy tratando de integrar el servicio web de Amazon Polly en uno de mis proyectos utilizando el SDK de PHP de Amazon. Pero cuando utilicé el SDK de PollyClient, solo hay un método implementado en el cliente createSynthesizeSpeechPreSignedUrl() y devuelve una URL, no el clip de audio. Cuando intento pegar la URL en la ventana del navegador, aparece el siguiente error: "message": "The security token included in the request is invalid."
Por favor, vea mi fragmento de código:
error_reporting(E_ALL); ini_set('display_errors', 1); header('Content-Type: text/plain; charset=utf-8'); require_once 'app/aws/aws-autoloader.php'; use Aws\Polly\PollyClient; class TestPolly extends Base { public function newPolly () { $connection = [ 'region' => 'us-west-2', 'version' => 'latest', 'debug' => true, 'scheme' => 'http', 'credentials' => [ 'key' => 'XXXXX', 'secret' => 'XXXXXX', ], ]; $client = new PollyClient($connection); $polly_args = [ 'OutputFormat' => 'mp3', 'Text' => 'My Input text', 'TextType' => 'text', 'VoiceId' => 'Brain', ]; $result = $client->synthesizeSpeech($polly_args); echo '<pre>'; print_r($result); exit; } }El error de PHP que recibo es:
Fatal error Uncaught exception 'Aws\Polly\Exception\PollyException' with message 'Error executing "SynthesizeSpeech on http://polly.us-west-2.amazonaws.com/v1/speech AWS HTTP error: cURL error 7: Failed to connect to polly.us-west-2.amazonaws.com port 80: Connection refused (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)' exception 'GuzzleHttp\Exception\ConnectException' with message 'cURL error 7: Failed to connect to polly.us-west-2.amazonaws.com port 80: Connection refused (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)' in D:\xampp\htdocs\sim_aws\aws\GuzzleHttp\Handler\CurlFactory.php:186 Stack trace:La parte interesante es que pude generar el clip de audio usando el SDK de Node.js, así que estoy bastante seguro de que la clave de acceso y la clave secreta funcionan bien.
Sería genial si alguien pudiera señalar cómo se puede usar PHP SDK con código de muestra o enlaces útiles.
Aquí hay un código de muestra para descargar el TTS como un archivo .mp3 en el navegador, la parte crucial es $result->get('AudioStream')->getContents() , esto es lo que obtiene los datos .mp3 reales.
require_once 'app/aws/aws-autoloader.php'; $awsAccessKeyId = 'XXXXXXX'; $awsSecretKey = 'XXXXXXX'; $credentials = new \Aws\Credentials\Credentials($awsAccessKeyId, $awsSecretKey); $client = new \Aws\Polly\PollyClient([ 'version' => '2016-06-10', 'credentials' => $credentials, 'region' => 'us-east-1', ]); $result = $client->synthesizeSpeech([ 'OutputFormat' => 'mp3', 'Text' => "My input text", 'TextType' => 'text', 'VoiceId' => 'Joanna', ]); $resultData = $result->get('AudioStream')->getContents(); header('Content-Transfer-Encoding: binary'); header('Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3'); header('Content-length: ' . strlen($resultData)); header('Content-Disposition: attachment; filename="pollyTTS.mp3"'); header('X-Pad: avoid browser bug'); header('Cache-Control: no-cache'); echo $resultData;En cuanto a los enlaces, aquí hay algunos: