AWS транскрипции с использованием PHP API: исключение регулирования: превышена скорость - PullRequest
0 голосов
/ 03 апреля 2019

Попытка расшифровки аудиофайла, хранящегося в корзине S3, к которой у меня есть доступ, с помощью API-интерфейса AWS SDK PHP, как показано ниже, дает мне исключение регулирования: превышена скорость.

Я прочитал документацию десятки раз и не могу найти простой рабочий пример, который показывает, как успешно транскрибировать файл с помощью AWS transcribe и их PHP API.

date_default_timezone_set('America/New_York');
try 
{
    require '/var/www/html/aws/sdk/aws-autoloader.php';
} 
catch (Exception $e) 
{
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
use Aws\TranscribeService\TranscribeServiceClient;

$client = new Aws\TranscribeService\TranscribeServiceClient([
    'version'       => 'latest',
    'region'        => 'us-east-1',
    'credentials'   => [
                    'key'           => 'xxxx',
                    'secret'        => 'yyyy',
                    'curl.options'  => array(CURLOPT_VERBOSE => true)
                    ]
        ]);
$job_name = "tjob".date("mdyhisa");
$job_uri = "https://s3.amazonaws.com/....mp3";          

$result = $client->startTranscriptionJob([
    'LanguageCode' => 'en-US', 
    'Media' => [ 
    'MediaFileUri' => "$job_uri",
    ],
    'MediaFormat' => 'mp3', 

    'TranscriptionJobName' => "$job_name", 
]);
/* removing this loop and the sleep() below would retrieve some structured response, 
but of course the operation status is IN_PROGRESS */
while(true)
{
    /* added to discover if holding a few seconds would work: it doesn't
       and gives back a 504 Gateway Timeout */
    sleep(rand(3,5));
    /* -- */
    $result = $client->getTranscriptionJob(['TranscriptionJobName' => "$job_name"]);
    if ( ($result['TranscriptionJob']['TranscriptionJobStatus']=='COMPLETED') || ($result['TranscriptionJob']['TranscriptionJobStatus']=='FAILED'))
    {
        break;  
    }
}
var_dump($result);

Итак, вопрос: как получить вывод транскрипции?

Кстати, мне это не нужно асинхронно ... мой маленький проект может подождать, пока он его обработает и вернет.

1 Ответ

0 голосов
/ 03 апреля 2019

Ваш код, вероятно, работает нормально, но ваш цикл while(true) вызывает API слишком много раз, поэтому возникает ошибка throttling exception: rate exceeded.

Я предлагаю вам поставить задержку в 5 секунд между каждым вызовомgetTranscriptionJob.Я обнаружил, что выполнение задания может занять около 60 секунд, поэтому вам не нужно постоянно вызывать его.

...