-
- 技巧交换,请加QQ群:213260412
- 营业合作,请接洽作者QQ:562866602
- 给我写信:mchina_tang@qq.com
微信大众,平台开辟(六) 翻译功能开辟
添加时间:2013-7-29 点击量:一、简介
上一篇文章介绍了微信大众,平台天气预告功能的开辟,实现了微信大众,平台的第一个实际应用,在接下来的这一篇文章中,我们将对微信翻译功能进行简单开辟,以供读者参考。
二、思路解析
和上一篇查询天气的思路差不久不多,起首要对用户发送过来的消息进行断定,断定消息里是否含有“翻译”关键字,若是含有,则提取待翻译内容,然后调用收集上开放的翻译API 进行相干翻译。
三、翻译API 解析
收集上有很多翻译API,大师可以按照本身的需求进行选择。这里我们选择应用斗劲广泛的,翻译功能还斗劲不错的有道翻译API 和百度翻译API,下面对这两种API的相干信息进行解析。
3.1 有道翻译API
3.1.1 API 地址:http://fanyi.youdao.com/openapi
重视:有道供给的API 接口,鄙人面的测试时,json 数据格局返回不正确,到网上查阅材料,可以正确翻译的地址为 http://fanyi.youdao.com/fanyiapi,这点重视。
3.1.2 申请key
遵守请求填写相干信息,这些信息,下面会应用到,所以请卖力如实填写。
申请完之后,会鄙人方生成API key 和key,应用API 时会用到。
3.1.3 API 应用典范
3.1.4 数据格局
a. xml 格局
http://fanyi.youdao.com/openapi.do?key=orchid&key=1008797533&type=data&doctype=xml&version=1.1&q=这里是有道翻译API
<?xml version=1.0 encoding=UTF-8?>
<youdao-fanyi>
<errorCode>0</errorCode>
<!-- 有道翻译 -->
<query><![CDATA[这里是有道翻译API]]></query>
<translation>
<paragraph><![CDATA[Here is the youdao translation API]]></paragraph>
</translation>
</youdao-fanyi>b. json 格局
http://fanyi.youdao.com/openapi.do?key=orchid&key=1008797533&type=data&doctype=json&version=1.1&q=翻译
{
errorCode:0
query:翻译,
translation:[translation], // 有道翻译
basic:{ // 有道词典-根蒂根基词典
phonetic:fān yì,
explains:[
translate,
interpret
]
},
web:[ // 有道词典-收集释义
{
key:翻译,
value:[translator,translation,translate,Interpreter]
},
{...}
]
}3.2 百度翻译API
3.2.1 API 地址:http://openapi.baidu.com/public/2.0/bmt/translate
3.2.2 获取api key
开辟者在百度连接平台上注册获得的授权API key,具体请参阅:http://developer.baidu.com/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3%E9%A6%96%E9%A1%B5/%E7%BD%91%E7%AB%99%E6%8E%A5%E5%85%A5/%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97
3.2.3 API 应用典范
3.2.4 数据格局
百度翻译API 响应的数据格局为UTF-8编码的PHP数组对应的标准JSON字符串。
{
“”:”zh”,
“to”:”en”,
“trans_result”:[]
}trans_result 为一个数组,此中每一个{}就是一个段落,布局如下所示:
trans_result: [
{},
{},
{}
]段落成果即为trans_result 数组中的一项:
{
“src”:””,
“dst”:””
}段落成果申明:
经json_decode 后的情势:
{
: en,
to: zh,
trans_result: [
{
src: today,
dst: 今天
}
]
}四、关键字断定与待翻译内容读取
翻译消息的格局是 “翻译+待翻译内容”,所以起首截取前两个字,断定是否为 “翻译” 关键字。
应用php函数 mb_substr() 截取,关于该函数的用法上一篇已经讲过,这里不再赘述。
¥str_trans = mb_substr(¥keyword,0,2,UTF-8);
从消息的开首开端截取,截取两个字符,然后加以断定是否为 “翻译” 关键字。
¥str_valid = mb_substr(¥keyword,0,-2,UTF-8);
断定是否只输入“翻译”两字,如许输入,没有待翻译内容,则输入的消息也不正确。
接下来进行待翻译内容提取:
¥word = mb_substr(¥keyword,2,220,UTF-8);
从消息的开首第3个字符开端截取,截取202个字符,截取出来的即为待翻译内容。
接着调用函数进行翻译。
//调用有道词典
¥contentStr = ¥this->youdaoDic(¥word);
//调用百度词典
¥contentStr = ¥this->baiduDic(¥word);五、具体实现
5.1 有道翻译API
数据接口:
http://fanyi.youdao.com/openapi.do?key=<key>&key=<key>&type=data&doctype=<doctype>&version=1.1&q=要翻译的文本
将上方的key 和key换成上方申请的内容,然后选择doctype,再输入要翻译的文本,就可以调用有道翻译API 进行翻译了。
有道翻译供给了三种数据格局,这里我们只讲解两种,即xml 和json。
5.1.1 xml 格局
关键代码如下:
public function youdaoDic(¥word){
¥key = orchid; //申请APIKEY 时所填表的网站名称的内容
¥apikey = YourApiKey; //从有道申请的APIKEY
//有道翻译-xml格局
¥url_youdao = http://fanyi.youdao.com/fanyiapi.do?key=.¥key.&key=.¥apikey.&type=data&doctype=xml&version=1.1&q=.¥word;
¥xmlStyle = simplexml_load_file(¥url_youdao);
¥errorCode = ¥xmlStyle->errorCode;
¥paras = ¥xmlStyle->translation->paragraph;
if(¥errorCode == 0){
return ¥paras;
}else{
return 无法进行有效的翻译;
}
}申明:
¥xmlStyle = simplexml_load_file(¥url_youdao); // PHP 函数,将XML 文档载入对象中。
¥errorCode = ¥xmlStyle->errorCode; // 获取错误码
¥paras = ¥xmlStyle->translation->paragraph; // 获取翻译内容
5.1.2 json 格局
关键代码如下:
public function youdaoDic(¥word){
¥key = orchid; //申请APIKEY时所填表的网站名称的内容
¥apikey = YourApiKey; //从有道申请的APIKEY
//有道翻译-json格局
¥url_youdao = http://fanyi.youdao.com/fanyiapi.do?key=.¥key.&key=.¥apikey.&type=data&doctype=json&version=1.1&q=.¥word;
¥jsonStyle = file_get_contents(¥url_youdao);
¥result = json_decode(¥jsonStyle,true);
¥errorCode = ¥result[errorCode];
¥trans = ;
if(isset(¥errorCode)){
switch (¥errorCode){
case 0:
¥trans = ¥result[translation][0];
break;
case 20:
¥trans = 要翻译的文本过长;
break;
case 30:
¥trans = 无法进行有效的翻译;
break;
case 40:
¥trans = 不支撑的说话类型;
break;
case 50:
¥trans = 无效的key;
break;
default:
¥trans = 呈现异常;
break;
}
}
return ¥trans;
}申明:
¥jsonStyle = file_get_contents(¥url_youdao); // 把全部文件读入一个字符串中
¥result = json_decode(¥jsonStyle,true); // 对JSON 格局的字符串进行编码
¥errorCode = ¥result[errorCode]; // 获取错误码
¥trans = ¥result[translation][0]; // 获取翻译成果
5.2 百度翻译API
百度翻译API供给UTF-8编码的PHP数组对应的标准JSON字符串,并且供给了 中->英,中->日,英->中,日->中 四种互译,比有道翻译多了一种。
关键代码如下:
//百度翻译
public function baiduDic(¥word,¥=auto,¥to=auto){
//起首对要翻译的文字进行 urlencode 处理惩罚
¥word_code=urlencode(¥word);
//注册的API Key
¥appid=YourApiKey;
//生成翻译API的URL GET地址
¥baidu_url = http://openapi.baidu.com/public/2.0/bmt/translate?client_id=.¥appid.&q=.¥word_code.&=.¥.&to=.¥to;
¥text=json_decode(¥this->language_text(¥baidu_url));
¥text = ¥text->trans_result;
return ¥text[0]->dst;
}
//百度翻译-获取目标URL所打印的内容
public function language_text(¥url){
if(!function_exists(file_get_contents)){
¥file_contents = file_get_contents(¥url);
}else{
//初始化一个cURL对象
¥ch = curl_init();
¥timeout = 5;
//设置须要抓取的URL
curl_setopt (¥ch, CURLOPT_URL, ¥url);
//设置cURL 参数,请求成果保存到字符串中还是输出到屏幕上
curl_setopt (¥ch, CURLOPT_RETURNTRANSFER, 1);
//在创议连接前守候的时候,若是设置为0,则无穷守候
curl_setopt (¥ch, CURLOPT_CONNECTTIMEOUT, ¥timeout);
//运行cURL,恳求网页
¥file_contents = curl_exec(¥ch);
//封闭URL恳求
curl_close(¥ch);
}
return ¥file_contents;
}申明:
这里包含了两个函数,baiduDic() 和 language_text()。
baiduDic() 函数:
¥word_code=urlencode(¥word); // 起首对要翻译的文字进行 urlencode 处理惩罚
¥text=json_decode(¥this->language_text(¥baidu_url)); // 调用language_text() 函数获取目标URL所打印的内容,然后对JSON 格局的字符串进行编码
¥text = ¥text->trans_result; //获取翻译成果数组
return ¥text[0]->dst; //取第一个数组的dst 成果。
language_text() 函数:
断定file_get_contents() 函数是否存在,若是存在,则应用该函数获取URL内容;若是不存在,则应用cURL 对象获取URL内容。具体拜见代码。
六、测试
有道翻译-xml 格局:
有道翻译-json 格局:
百度翻译:
重视:该翻译功能放在SAE上可以或许正常运行,但在BAE上运行不成功,各位有爱好自行测试一下。
七、完全代码获取
请到QQ群213260412共享里应用。
八、存眷
请存眷 卓锦姑苏 微信大众,帐号,卓锦姑苏 基于SAE 平台开辟,针对于主流的微信功能进行开辟测试。
您可以存眷 卓锦姑苏 大众,帐号进行功能测试,以及获取新的应用开辟。
1. 登录微信客户端,伴侣们 -> 添加伴侣 -> 搜号码 -> zhuojinsz,查找并存眷。
2. 扫描二维码:
卓锦姑苏 功能列表。
David Camp
我们永远信赖,分享是一种美德 | We Believe, Great People Share Knowledge...
容易发怒的意思就是: 别人做了蠢事, 然后我们代替他们, 表现出笨蛋的样子。—— 蔡康永