php+google/baidu翻译接口
<?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翻译接口的更多相关文章
- .net core 和 WPF 开发升讯威在线客服系统:调用百度翻译接口实现实时自动翻译
业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...
- 强大的微软Microsoft Translator翻译接口
一.前言 当我们需要对日文.韩文等语言转换中文字符的时候,就用到了微软提供的翻译接口. 二.实现流程 1.首先注册一个账号 https://datamarket.azure.com/account 2 ...
- google谷歌翻译插件-网页一键翻译
上个月转载的一篇博文,是推荐的四款非常实用的翻译插件,这几天看这个chrome插件网首页有新增了一个google谷歌翻译插件.我能说实话,这款插件比之前推荐的4款翻译插件更好用吗?也不能完全说是更好用 ...
- Android性能优化Google课程翻译一:Render----OverDraw实战
Context 近期实战了下OverDraw,加深了下理解.在上篇文章里Android性能优化Google课程翻译一:Render----OverDraw 写过详细方法. OverDraw解决方法离不 ...
- [windows篇] 使用Hexo建立个人博客,自定义域名https加密,搜索引擎google,baidu,360收录
为了更好的阅读体验,欢迎阅读原文.原文链接在此. [windows篇] 使用Hexo建立个人博客,自定义域名https加密,搜索引擎google,baidu,360收录 Part 2: Using G ...
- .net core 和 WPF 开发升讯威在线客服系统:调用有道翻译接口实现实时自动翻译的方法
业余时间用 .net core 写了一个在线客服系统.并在博客园写了一个系列的文章,写介绍这个开发过程. 我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免 ...
- python爬虫调用谷歌翻译接口
2019年7月4日15:53:17 (¦3[▓▓] 晚安 谷歌翻译环境 Python 3.6 第三方库 Execjs (pip install PyExecJS ) 文件列表 同目录下的四个文件: - ...
- PHP 最完美调用百度翻译接口代码示例 (原)
php调用百度翻译最新接口代码 问 题:写的过程遇到了一个问题,url拼接好的原翻译内容,appid,sign的地址直接输出到浏览器可以打开看到翻译后的返回值,但是各种curl,file_ ...
- Nuxt简单使用Google/Baidu Analyze
博客地址: https://www.seyana.life/post/17 具体账号注册方法和绑定方法可以去到官网下,都有相应的指南, 一般设置也比较简单,只需要把对应js代码添加到head中即可, ...
随机推荐
- HDU2717-Catch That Cow (BFS入门)
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2717 Catch That Cow Time Limit: 5000/2000 MS (Java/O ...
- phpcms 操作数据库 增删改查
数据库的其他类继承的都是libs/class/model.class.php 这里面有写好的操作数据库的常用方法 1.增 insert($data, $return_insert_id = false ...
- matlab handle plot
https://cn.mathworks.com/help/matlab/ref/plotyy.html
- NCPC 2016:简单题解
A .Artwork pro:给定N*M的白色格子,然后Q次黑棒,输出每次加黑棒后白色连通块的数量.(N,M<1e3, Q<1e4) sol:倒着离线做,并查集即可. (在线做法:http ...
- Java当中的JVM
Java当中JVM 01 在使用控制面板时的实质: Hello.java使用javac,然后变成为Hello.class通过运行java这个命令,在类加载器中(含有加载,验证,准备,解析,初始化,使用 ...
- 20155219 2016-2017-2 《Java程序设计》第7周学习总结
20155219 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 认识时间与日期 时间的度量 1.格林威治时间(GMT):通过观察太阳而得,因为地球公转轨道为 ...
- Estimating Linguistic Complexity for Science Texts--paper
http://aclweb.org/anthology/W18-0505 https://sites.google.com/site/nadeemf0755/research/linguistic-c ...
- opencv中mat类介绍
The class Mat represents an n-dimensional dense numerical single-channel or multi-channel array. It ...
- C++学习(三十一)(C语言部分)之 栈和队列(括号匹配示例)
括号匹配测试代码笔记如下: #include<stdio.h> #include<string.h> #include <stdlib.h> #define SIZ ...
- 实验吧—Web——WP之 貌似有点难
其实这道题并不难,只要会看一点PHP语句,会用BP抓包,改包就好了 打开解题链接: 提示有:PHP代码审计,并且有一个:View the source code 的按钮 我们点击打开 打开后发现是一段 ...