加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php+google/baidu翻译接口

发布时间:2020-05-25 03:37:45 所属栏目:PHP 来源:互联网
导读:?php/*** @link http://www.joinf.com* @copyright Copyright (C) 2017 joinf.com. All rights reserved.*/namespace siteadmincontroller;use siteadminmodelLanguageModel;/*** 翻译管理*/class TranslateController extends siteadmincomponentController{

<div class="cnblogs_Highlighter">
<pre class="brush:php;gutter:true;"><?php
/**

  • @link http://www.joinf.com
  • @copyright Copyright (C) 2017 joinf.com. All rights reserved.
    */

namespace siteadmincontroller;

use siteadminmodelLanguageModel;

/**

  • 翻译管理
    */
    class TranslateController extends siteadmincomponentController
    {

    private $appid;
    private $seckey;
    private $_model;

    /**

    • 初始化
    • @access public
    • @return void
      */
      public function __construct()
      {
      $this->_model = new LanguageModel();
      $translate=$this->_model->getTranslate();
      if($translate){
      $this->appid=$translate['appid'];
      $this->seckey=$translate['seckey'];
      }else{
      $this->appid='';
      $this->seckey='';
      }
      }

    /**

    • 翻译接口

    • POST:source_id=原始语言ID,dest_ids=目标语言(数组格式),txts=数据源(数组格式)

    • @access public

    • @return void
      /
      public function toLanguage()
      {
      /
      $this->request->post= [
      'source_id' => '1','dest_ids' => ["2",'3'],'txts' =>['今天天气不错,挺风和日丽的','我们都有一个家,名字叫中国'],]; */

      //google翻译接口
      $language_id=isset($this->request->post['source_id'])?$this->request->post['source_id']:'';
      $dest_ids=isset($this->request->post['dest_ids'])?$this->request->post['dest_ids']:'';
      $data = isset($this->request->post['txts']) ? $this->request->post['txts']: '';

      if(empty($language_id)||empty($dest_ids)||empty($data)){

       $this->flash('error','参数错误');
       return $this->formatResponse();

      }else{
      //获取源语种
      $b_l=explode(',',$this->config->get('sys_google_translate_code'));
      $url=$this->config->get('sys_google_translate_url');

       foreach ($b_l as $k=>$v){
           if(($k+1)==$language_id){
               $source=$v;
           }
       }
      
       $t_data=array();
      
       foreach ($dest_ids as $kk=>$vv){
           //计算翻译目标语种
           foreach ($b_l as $k=>$v){
               if(($k+1)==$vv){
                   $target=$v;
               }
           }
      
           //组装译文
           $translist=array();
           foreach ($data as $key=>$value){
               //初始化
               $curl = curl_init();
               //设置抓取的url
               curl_setopt($curl,CURLOPT_URL,$url);
               //设置头文件的信息作为数据流输出
               curl_setopt($curl,CURLOPT_HEADER,1);
               //设置获取的信息以文件流的形式返回,而不是直接输出。
               curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
               //设置post方式提交
               curl_setopt($curl,CURLOPT_POST,1);
               //设置post数据
               $post_data = array(
                       "q" => $value,"source" => $source,"target" => $target,'format' => 'text'
               );
               curl_setopt($curl,CURLOPT_POSTFIELDS,$post_data);
               //执行命令
               $exec_data = curl_exec($curl);
               //关闭URL请求
               curl_close($curl);
               //显示获得的数据
               $result=json_decode(strstr($exec_data,'{'),true);
               $translist[]=$result['data']['translations'][0]['translatedText'];
           }
           //该语种全部译文
           $t_data[$vv]=$translist;
       }
       $this->manageLogModel->add('多语言翻译');
       $this->flash('success','翻译成功');
       $this->formatResponse($t_data);

      }

      //百度翻译接口
      /* $language_id=isset($this->request->post['source_id'])?$this->request->post['source_id']:'';
      $dest_ids=isset($this->request->post['dest_ids'])?$this->request->post['dest_ids']:'';
      $data = isset($this->request->post['txts']) ? $this->request->post['txts']: '';

      if(empty($language_id)||empty($dest_ids)||empty($data)){

       $this->flash('error','提交错误');
       return $this->formatResponse();

      }else{
      //获取源语种
      $b_l=explode(',$this->config->get('sys_baidu_language_code'));

       foreach ($b_l as $k=>$v){
           if(($k+1)==$language_id){
               $from=$v;
           }
       }
      
       $t_data=array();
       $count_num=0;
       foreach ($dest_ids as $kk=>$vv){
           //计算翻译目标语种
           foreach ($b_l as $k=>$v){
               if(($k+1)==$vv){
                   $to=$v;
               }
           }
           //组装译文
           $translist=array();
           foreach ($data as $key=>$value){
               $result=$this->translate($value,$from,$to);
               $translist[]=$result['trans_result'][0]['dst'];
               $count_num+=mb_strlen($value,'utf-8');
           }
           //该语种全部译文
           $t_data[$vv]=$translist;
       }
       $this->_model->updateTranslate($this->appid,$count_num,time());
       $this->manageLogModel->add('多语言翻译');
       $this->flash('success','翻译成功');
       $this->formatResponse($t_data);

      } */

    }

    //翻译入口
    public function translate($query,$to){
    $args = array(
    'q' => $query,'appid' => $this->appid,'salt' => rand(10000,99999),'from' => $from,'to' => $to,);
    $args['sign'] = $this->buildSign($query,$this->appid,$args['salt'],$this->seckey);
    $ret = $this->call($this->config->get('sys_baidu_url'),$args,'post',$this->config->get('sys_baidu_curl_timeout'));
    $ret = json_decode($ret,true);
    return $ret;
    }

    //加密
    public function buildSign($query,$appID,$salt,$secKey){
    $str = $appID . $query . $salt . $secKey;
    $ret = md5($str);
    return $ret;
    }

    //发起网络请求
    public function call($url,$args=null,$method="post",$testflag = 0,$timeout = 0,$headers=array()){
    $ret = false;
    $i = 0;
    while($ret === false)
    {
    if($i > 1)
    break;
    if($i > 0)
    {
    sleep(1);
    }
    $ret = $this->callOnce($url,$method,false,$timeout,$headers);
    $i++;
    }
    return $ret;
    }

    public function callOnce($url,$withCookie = false,$headers=array()){
    $ch = curl_init();
    if($method == "post")
    {
    $data = $this->convert($args);
    curl_setopt($ch,$data);
    curl_setopt($ch,1);
    }
    else
    {
    $data = convert($args);
    if($data)
    {
    if(stripos($url,"?") > 0)
    {
    $url .= "&$data";
    }
    else
    {
    $url .= "?$data";
    }
    }
    }
    curl_setopt($ch,$url);
    curl_setopt($ch,CURLOPT_TIMEOUT,$timeout);
    curl_setopt($ch,1);
    if(!empty($headers))
    {
    curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
    }
    if($withCookie)
    {
    curl_setopt($ch,CURLOPT_COOKIEJAR,$_COOKIE);
    }
    $r = curl_exec($ch);
    curl_close($ch);
    return $r;
    }

    public function convert(&$args){
    $data = '';
    if (is_array($args))
    {
    foreach ($args as $key=>$val)
    {
    if (is_array($val))
    {
    foreach ($val as $k=>$v)
    {
    $data .= $key.'['.$k.']='.rawurlencode($v).'&';
    }
    }
    else
    {
    $data .="$key=".rawurlencode($val)."&";
    }
    }
    return trim($data,"&");
    }
    return $args;
    }
    }

      

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读