/**
** 作用:语音文件转换成文本
** 注释:1。转换方式采用轮询 2。需要添加定时任务
*/
require_once FCPATH.'/vendor/autoload.php';
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
class Ali_nlsfiletrans{
private $appKey = '';
private $key_status_text = 'StatusText';
private $status_success = "SUCCESS";
private $key_task_id = "TaskId";
private $status_running = "RUNNING";
private $status_queueing = "QUEUEING";
/***********************正式请求开始******************************/
//获取数据
public function getfile($fileLink){
//获取任务id
$taskId = $this->submitFileTransRequest($fileLink);
//任务id判断
if($taskId){
//获取查询数据
$result = $this->getFileTransResult($taskId);
if ($result != NULL) {
//录音文件识别结果查询成功(添加自己的业务)
return $result;
}else {
//录音文件识别结果查询失败(添加自己的业务)
return '';
}
}
}
//获取任务id
function submitFileTransRequest($fileLink) {
//组装请求数据数组
$taskArr = array('appkey' => $this->appKey, 'file_link' => $fileLink, 'version' => "4.0", 'enable_words' => FALSE);
$task = json_encode($taskArr);
//提交请求,返回服务端的响应。
try {
$submitTaskResponse = AlibabaCloud::nlsFiletrans()->v20180817()->submitTask()->withTask($task)->request();
// 获取录音文件识别请求任务的ID,以供识别结果查询使用。
$taskId = NULL;
$statusText = $submitTaskResponse[$this->key_status_text];
if (strcmp($this->status_success, $statusText) == 0) {
$taskId = $submitTaskResponse[$this->key_task_id];
}
return $taskId;
} catch (ClientException $exception) {
// 获取错误消息
print_r($exception->getErrorMessage());
} catch (ServerException $exception) {
// 获取错误消息
print_r($exception->getErrorMessage());
}
}
//获取转换文件并把数据入库
function getFileTransResult($taskId) {
//初始化结果对象
$result = NULL;
//查询转换结果
while (TRUE) {
try {
$getResultResponse = AlibabaCloud::nlsFiletrans()
->v20180817()->getTaskResult()->withTaskId($taskId)
->request();
$statusText= $getResultResponse[$this->key_status_text];
if (strcmp($this->status_running, $statusText) == 0 || strcmp($this->status_queueing, $statusText) == 0) {
// 继续轮询(没有得到返回结果:转换中或者转换失败)
sleep(10);
}else {
if (strcmp($this->status_success, $statusText) == 0) {
$result = $getResultResponse;
}
// 退出轮询
break;
}
} catch (ClientException $exception) {
//异常抛出
print_r($exception->getErrorMessage());
} catch (ServerException $exception) {
//异常抛出
print_r($exception->getErrorMessage());
}
}
return $result;
}
/***********************正式请求结束*********************************/
}