【应用】PHP调用百度文档翻译接口

百度翻译 的文档是需要消费的,并且它的api请求是一个异步的过程,如果业务上用户不需要登录的时候,无法直接获取到翻译结果文档。因此,做了个异步返回的功能。

思路:

1、上传文档;

2、调用翻译接口;

3、通过kafka监听接口回调,处理返回数据,保存到本地(方便以后扩展,如加入用户信息,查看我的翻译记录)

4、前端监听后端服务,通过swoole的websocket实时请求文档数据

关键部分代码(赶工做的,未做优化):


//上传文件
public function upload()
{
	header("Access-Control-Allow-Origin:*");  
	set_time_limit(300);

	$file = $_FILES['file'];
	if(!$file){
        $show = array('status'=>422,'message'=>'请上传图片或者文档文件');
        json($show);
	}

	$app = '2020bd';

	if($_SERVER['SERVER_ADDR']=='127.0.0.1'){
	    $sPath = '/Users/kunyuan/www/activity/storage/'.$app.'/';
	}else{
	    $sPath = '/var/www/html/activity/storage/'.$app.'/';
	}
	if(!mk_dir($sPath)){
	    $show = array('status'=>500,'message'=>'目录不存在');
    	json($show);
	}

    $path_parts = pathinfo($file['name']);
    $ext = strtolower($path_parts["extension"]);
    $extAry = array(
    	'jpg','jpeg','png','docx','xls','xlsx','ppt','pptx','pdf'
    );
    if(!in_array($ext, $extAry)){
        $show = array('status'=>422,'message'=>'请上传图片或者文档文件');
        json($show);
    }

    try{
    	//保存到服务器本地
    	$filename = date('Ymd'). '_' .rand(10000, 99999).'_'.time();
	    $tmpfile = $filename . '.'.$ext;
	    $tmp = $file["tmp_name"];
	    $img = file_get_contents($tmp);
	    $path1 = $sPath . $tmpfile;
	    $res = file_put_contents($path1, $img);
	    if(is_https()){
	    	$url = 'https://'.$_SERVER['SERVER_NAME'].'/storage/'.$app.'/'.$tmpfile;
	    }else{
	    	$url = 'http://'.$_SERVER['SERVER_NAME'].'/storage/'.$app.'/'.$tmpfile;
	    }
	    
	    $error = '上传失败';
	    if($res){
	    	//判断文件类型,为了文件调用百度的图片接口或者文档接口
	    	if(in_array($ext,array('jpg','jpeg','png'))){
	    		$resExt = 'pic';
	    	}else{
	    		$resExt = 'docs';
	    	}
	    	//保存数据库
	    	$fileid = $this->common->setFiles(array(
	    		'sourceFile'	=> $url,
	    		'localFile'		=> $path1,
	    		'type'	=> $resExt
	    	));
			$show = array('status'=>0,'fileUrl'=>$url,'fileSize'=>ceil(filesize($path1)/1000)."k",'ext'=>$resExt, 'id' => $fileid,'resExt'=>$resExt);
	    }else{
	    	$show = array('status'=>500,'message'=>$error,'info'=>$info,'fileSize'=>ceil(filesize($path1)/1000)."k");
	    }

	    json($show);

    }catch(Exception $e){
        $show = array('status'=>$e->getCode(),'message'=>$e->getMessage());
        json($show);
    }
}

//调用百度接口
public function api()
{
	//$type = I('type','docs');
	$id = I('id',0);
	$callback = I('callback');
	//判断是否为上传的文件
	$data = $this->common->getFiles(array('id'=>$id));
	if(empty($data)){
        $show = array('status'=>420,'message'=>'数据有误');
        json($show, $callback);
	}
	$type = $data['type'];
	switch($type){
		case 'docs':
			$this->docsTran($data);
		break;
		case 'pic':
			$this->picTran($data);
		break;
		default:
			$this->docsTran($data);
		break;
	}
}

//文档翻译接口
private function docsTran($data)
{
	//die('ooo');
	$file = $data['localFile'];//I('file');
	$from = I('from', 'zh');
	$to = I('to','en');
	$callback = I('callback');
	if(empty($file)){
        $show = array('status'=>422,'message'=>'请上传文档文件');
        json($show, $callback);
	}
    $path_parts = pathinfo($file);
    $ext = strtolower($path_parts["extension"]);
    $extAry = array(
    	'docx','xls','xlsx','ppt','pptx','pdf'
    );
    if(!in_array($ext, $extAry)){
        $show = array('status'=>423,'message'=>'请上传文档文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值