D1V1网社区 @开门芝麻网 http://sns.d1v1.com & http://www.KaiMenZhiMa.com/

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5521|回复: 0

微信公众平台开发(六) 翻译功能开发

[复制链接]
发表于 2014-5-28 05:02:46 | 显示全部楼层 |阅读模式 <
开门芝麻网
连劲智播AI智能自动播实景无人直播(APP免费注册下载)http://kaimenzhima.com/forum.php?mod=viewthread&tid=1
微信公众平台开发(六) 翻译功能开发来源:David Camp   时间:2013-09-09 18:53:44  
[导读] 一、简介上一篇文章介绍了微信公众平台天气预报功能的开发,实现了微信公众平台的第一个实际应用,在接下来的这一篇文章中,我们将对微信翻译功能进行简单开发,以供读者参考。二、思路分析和上一篇查询天气的思
一、简介
上一篇文章介绍了微信公众平台天气预报功能的开发,实现了微信公众平台的第一个实际应用,在接下来的这一篇文章中,我们将对微信翻译功能进行简单开发,以供读者参考。
二、思路分析
和上一篇查询天气的思路差不多,首先要对用户发送过来的消息进行判断,判断消息里是否含有“翻译”关键字,如果含有,则提取待翻译内容,然后调用网络上开放的翻译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 和keyfrom,使用API 时会用到。
3.1.3 API 使用范例
3.1.4 数据格式
a. xml 格式
http://fanyi.youdao.com/openapi. ... ;version=1.1&q=这里是有道翻译API
view source
print?

01.<?xml version="1.0" encoding="UTF-8"?>
02.<youdao-fanyi>
03.    <errorCode>0</errorCode>
04.    <!-- 有道翻译 -->
05.    <query><![CDATA[这里是有道翻译API]]></query>
06.    <translation>
07.        <paragraph><![CDATA[Here is the youdao translation API]]></paragraph>
08.    </translation>
09.</youdao-fanyi>



b. json 格式
http://fanyi.youdao.com/openapi. ... ;version=1.1&q=翻译
view source
print?

01.{
02.    "errorCode":0
03.    "query":"翻译",
04.    "translation":["translation"], // 有道翻译
05.    "basic":{ // 有道词典-基本词典
06.        "phonetic":"fān yì",
07.        "explains":[
08.            "translate",
09.            "interpret"
10.        ]
11.    },
12.    "web":[ // 有道词典-网络释义
13.        {
14.            "key":"翻译",
15.            "value":["translator","translation","translate","Interpreter"]
16.        },
17.        {...}
18.    ]
19.}



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/ ... 8%E6%8C%87%E5%8D%97
3.2.3 API 使用范例
3.2.4 数据格式
百度翻译API 响应的数据格式为UTF-8编码的PHP数组对应的标准JSON字符串。
view source
print?

1.{
2.    “from”:”zh”,
3.    “to”:”en”,
4.    “trans_result”:[]
5.}



trans_result 为一个数组,其中每一个{}就是一个段落,结构如下所示:
view source
print?

1.trans_result: [
2.{},
3.{},
4.{}




段落结果说明:
经json_decode 后的形式:
view source
print?

01.{
02.    "from": "en",
03.    "to": "zh",
04.    "trans_result": [
05.        {
06.            "src": "today",
07.            "dst": "今天"
08.        }
09.    ]
10.}



四、关键字判断与待翻译内容读取
翻译消息的格式是 “翻译+待翻译内容”,所以首先截取前两个字,判断是否为 “翻译” 关键字。
使用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个字符,截取出来的即为待翻译内容。
接着调用函数进行翻译。
view source
print?

1.//调用有道词典
2.$contentStr = $this->youdaoDic($word);
3.//调用百度词典
4.$contentStr = $this->baiduDic($word);



五、具体实现
5.1 有道翻译API
数据接口:
view source
print?

1.http://fanyi.youdao.com/openapi.do?keyfrom=<;keyfrom>&key=<key>&type=data&doctype=<doctype>&version=1.1&q=要翻译的文本



将上面的keyfrom 和key换成上面申请的内容,然后选择doctype,再输入要翻译的文本,就可以调用有道翻译API 进行翻译了。
有道翻译提供了三种数据格式,这里我们只讲解两种,即xml 和json。
5.1.1 xml 格式
关键代码如下:
view source
print?

01.public function youdaoDic($word){
02.
03.        $keyfrom = "orchid";    //申请APIKEY 时所填表的网站名称的内容
04.        $apikey = "YourApiKey";  //从有道申请的APIKEY
05.         
06.        //有道翻译-xml格式
07.        $url_youdao = 'http://fanyi.youdao.com/fanyiapi.do?keyfrom='.$keyfrom.'&key='.$apikey.'&type=data&doctype=xml&version=1.1&q='.$word;
08.         
09.        $xmlStyle = simplexml_load_file($url_youdao);
10.         
11.        $errorCode = $xmlStyle->errorCode;
12.
13.        $paras = $xmlStyle->translation->paragraph;
14.
15.        if($errorCode == 0){
16.            return $paras;
17.        }else{
18.            return "无法进行有效的翻译";
19.        }
20.}



说明:
$xmlStyle = simplexml_load_file($url_youdao);  // PHP 函数,将XML 文档载入对象中。
$errorCode = $xmlStyle->errorCode;  // 获取错误码
$paras = $xmlStyle->translation->paragraph;  // 获取翻译内容
5.1.2 json 格式
关键代码如下:
view source
print?

01.public function youdaoDic($word){
02.
03.        $keyfrom = "orchid";    //申请APIKEY时所填表的网站名称的内容
04.        $apikey = "YourApiKey";  //从有道申请的APIKEY
05.         
06.        //有道翻译-json格式
07.        $url_youdao = 'http://fanyi.youdao.com/fanyiapi.do?keyfrom='.$keyfrom.'&key='.$apikey.'&type=data&doctype=json&version=1.1&q='.$word;
08.         
09.        $jsonStyle = file_get_contents($url_youdao);
10.
11.        $result = json_decode($jsonStyle,true);
12.         
13.        $errorCode = $result['errorCode'];
14.         
15.        $trans = '';
16.
17.        if(isset($errorCode)){
18.
19.            switch ($errorCode){
20.                case 0:
21.                    $trans = $result['translation']['0'];
22.                    break;
23.                case 20:
24.                    $trans = '要翻译的文本过长';
25.                    break;
26.                case 30:
27.                    $trans = '无法进行有效的翻译';
28.                    break;
29.                case 40:
30.                    $trans = '不支持的语言类型';
31.                    break;
32.                case 50:
33.                    $trans = '无效的key';
34.                    break;
35.                default:
36.                    $trans = '出现异常';
37.                    break;
38.            }
39.        }
40.        return $trans;
41.         
42.    }



说明:
$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字符串,而且提供了 中->英,中->日,英->中,日->中 四种互译,比有道翻译多了一种。
关键代码如下:
view source
print?

01.//百度翻译
02.    public function baiduDic($word,$from="auto",$to="auto"){
03.         
04.        //首先对要翻译的文字进行 urlencode 处理
05.        $word_code=urlencode($word);
06.         
07.        //注册的API Key
08.        $appid="YourApiKey";
09.         
10.        //生成翻译API的URL GET地址
11.        $baidu_url = "http://openapi.baidu.com/public/2.0/bmt/translate?client_id=".$appid."&q=".$word_code."&from=".$from."&to=".$to;
12.         
13.        $text=json_decode($this->language_text($baidu_url));
14.
15.        $text = $text->trans_result;
16.
17.        return $text[0]->dst;
18.    }
19.         
20.    //百度翻译-获取目标URL所打印的内容
21.    public function language_text($url){
22.
23.        if(!function_exists('file_get_contents')){
24.
25.            $file_contents = file_get_contents($url);
26.
27.        }else{
28.                 
29.            //初始化一个cURL对象
30.            $ch = curl_init();
31.
32.            $timeout = 5;
33.
34.            //设置需要抓取的URL
35.            curl_setopt ($ch, CURLOPT_URL, $url);
36.
37.            //设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上
38.            curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
39.
40.            //在发起连接前等待的时间,如果设置为0,则无限等待
41.            curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
42.
43.            //运行cURL,请求网页
44.            $file_contents = curl_exec($ch);
45.
46.            //关闭URL请求
47.            curl_close($ch);
48.        }
49.
50.        return $file_contents;
51.    }



说明:
这里包含了两个函数,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/微信76815288,第一时间删除!(开门芝麻网 sns.d1v1.com)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
400-888-xxxx

微信扫一扫,私享最新原创实用干货

QQ|申请友链|Archiver|手机版|小黑屋|D1V1网社区 @开门芝麻网 ( 沪ICP备15050032号-2 )

GMT+8, 2024-4-18 10:30 , Processed in 0.122168 second(s), 33 queries .

Powered by Discuz! X3.4 Designed by www.D1V1.cn

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表