<?php
/**
* @link http://www.joinf.com
* @copyright Copyright (C) 2017 joinf.com. All rights reserved.
*/ namespace site\admin\controller; use site\admin\model\LanguageModel; /**
* 翻译管理
*/
class TranslateController extends \site\admin\component\Controller
{ 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, $from, $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',0,$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, $args, $method, false, $timeout, $headers);
$i++;
}
return $ret;
} public function callOnce($url, $args=null, $method="post", $withCookie = false, $timeout = 0, $headers=array()){
$ch = curl_init();
if($method == "post")
{
$data = $this->convert($args);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_POST, 1);
}
else
{
$data = convert($args);
if($data)
{
if(stripos($url, "?") > 0)
{
$url .= "&$data";
}
else
{
$url .= "?$data";
}
}
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 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;
}
}

  

php+google/baidu翻译接口的更多相关文章

  1. .net core 和 WPF 开发升讯威在线客服系统:调用百度翻译接口实现实时自动翻译

    业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...

  2. 强大的微软Microsoft Translator翻译接口

    一.前言 当我们需要对日文.韩文等语言转换中文字符的时候,就用到了微软提供的翻译接口. 二.实现流程 1.首先注册一个账号 https://datamarket.azure.com/account 2 ...

  3. google谷歌翻译插件-网页一键翻译

    上个月转载的一篇博文,是推荐的四款非常实用的翻译插件,这几天看这个chrome插件网首页有新增了一个google谷歌翻译插件.我能说实话,这款插件比之前推荐的4款翻译插件更好用吗?也不能完全说是更好用 ...

  4. Android性能优化Google课程翻译一:Render----OverDraw实战

    Context 近期实战了下OverDraw,加深了下理解.在上篇文章里Android性能优化Google课程翻译一:Render----OverDraw 写过详细方法. OverDraw解决方法离不 ...

  5. [windows篇] 使用Hexo建立个人博客,自定义域名https加密,搜索引擎google,baidu,360收录

    为了更好的阅读体验,欢迎阅读原文.原文链接在此. [windows篇] 使用Hexo建立个人博客,自定义域名https加密,搜索引擎google,baidu,360收录 Part 2: Using G ...

  6. .net core 和 WPF 开发升讯威在线客服系统:调用有道翻译接口实现实时自动翻译的方法

    业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...

  7. python爬虫调用谷歌翻译接口

    2019年7月4日15:53:17 (¦3[▓▓] 晚安 谷歌翻译环境 Python 3.6 第三方库 Execjs (pip install PyExecJS ) 文件列表 同目录下的四个文件: - ...

  8. PHP 最完美调用百度翻译接口代码示例 (原)

    php调用百度翻译最新接口代码 问       题:写的过程遇到了一个问题,url拼接好的原翻译内容,appid,sign的地址直接输出到浏览器可以打开看到翻译后的返回值,但是各种curl,file_ ...

  9. Nuxt简单使用Google/Baidu Analyze

    博客地址: https://www.seyana.life/post/17 具体账号注册方法和绑定方法可以去到官网下,都有相应的指南, 一般设置也比较简单,只需要把对应js代码添加到head中即可, ...

随机推荐

  1. python第二天 python介绍与变量

    编程语言的分类: 分别为 机器语言,汇编语言,高级语言 所以按照翻译方式又被分为两种 编译型:在代码执行时,需要先进行编译成二进制文件之后,才能够被执行 代表如:c语言,执行速度快,但是调试麻烦 解释 ...

  2. POJ 1321 棋盘问题 (dfs)

    在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. ...

  3. 【转载】 如何看待 2019 年 CS PhD 现扎堆申请且大部分为 AI 方向?未来几年 AI 泡沫会破裂吗?

    原贴地址: https://www.zhihu.com/question/316135639 作为一个 AI 方向的在读博士生,实在是过的蛮闹心,无意中逛知乎发现了这个帖子,发现很适合现在的自己,于是 ...

  4. 小白学习前端---第一天 了解HTML

    一.HTML的结构 1.1 html文档主要包含两个部分:头区域和实体区域. 1.2 html的三个主要标签:<html>.<head>.<body>.<ht ...

  5. pip windows下的引入

    安装了python以后,并且环境变量里引入了python安装路径后, 想使用pip来安装未安装的模块,但是命令模式里不能执行pip, 查看python安装路径,发现pip跟easy_install的执 ...

  6. POJ3525:Most Distant Point from the Sea(二分+半平面交)

    pro:给定凸多边形,求凸多边形内的点到最近边界的最远距离. sol:显然是二分一个圆,使得圆和凸多边形不相交,但是这样很难实现. 由于是凸多边形,我们可以把二分圆转化为二分凸多边形的移动. 如果每一 ...

  7. box布局中文字溢出问题

    如果不设置-webkit-box-flex:1:会溢出,设置width也行,在电脑上模拟可能会有问题,手机上没问题

  8. Sublime text3常用的插件功能和常用的快捷键

    Sublime text3常用的插件功能和用法 Package control 插件管理 (使用ctrl+` 将代码复制后粘贴到代码粘贴处,按Enter没有出现错误的话就安装成功了)(ctrl+shi ...

  9. Socket远程桌面

    自建Socket转发,使用远程桌面(mstsc)连接家中电脑   网络结构图如下: 开题先放图,一切全靠编哈哈. 进入正题! 如图所示,我们需要一个公网服务器,利用公网服务器将内网的数据进行转发,从而 ...

  10. 【HDOJ3018】【一笔画问题】【欧拉回路+并查集】

    http://acm.hdu.edu.cn/showproblem.php?pid=3018 Ant Trip Time Limit: 2000/1000 MS (Java/Others)    Me ...