打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

[导读] 一、简介上一篇文章介绍了微信公众平台天气预报功能的开发,实现了微信公众平台的第一个实际应用,在接下来的这一篇文章中,我们将对微信翻译功能进行简单开发,以供读者参考。二、思路分析和上一篇查询天气的思

一、简介

上一篇文章介绍了微信公众平台天气预报功能的开发,实现了微信公众平台的第一个实际应用,在接下来的这一篇文章中,我们将对微信翻译功能进行简单开发,以供读者参考。

二、思路分析

和上一篇查询天气的思路差不多,首先要对用户发送过来的消息进行判断,判断消息里是否含有“翻译”关键字,如果含有,则提取待翻译内容,然后调用网络上开放的翻译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

按照要求填写相关信息,这些信息,下面会使用到,所以请认真如实填写。

\

申请完之后,会在下方生成APIkey keyfrom,使用API 时会用到。

\

3.1.3 API 使用范例

\

3.1.4 数据格式

a. xml 格式

http://fanyi.youdao.com/openapi.do?keyfrom=orchid&key=1008797533&type=data&doctype=xml&version=1.1&q=这里是有道翻译API

view sourceprint?

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 theyoudao translation API]]></paragraph>

08.

</translation>

09.

</youdao-fanyi>

b. json 格式

http://fanyi.youdao.com/openapi.do?keyfrom=orchid&key=1008797533&type=data&doctype=json&version=1.1&q=翻译

view sourceprint?

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/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字符串。

view sourceprint?

1.

{

2.

from”:”zh”,

3.

to”:”en”,

4.

trans_result”:[]

5.

}

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

view sourceprint?

1.

trans_result: [

2.

{},

3.

{},

4.

{}

5.

]

段落结果说明:

\

json_decode 后的形式:

view sourceprint?

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 sourceprint?

1.

//调用有道词典

2.

$contentStr = $this->youdaoDic($word);

3.

//调用百度词典

4.

$contentStr = $this->baiduDic($word);

五、具体实现

5.1 有道翻译API

数据接口:

view sourceprint?

1.

http://www.sm136.com.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 sourceprint?

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 sourceprint?

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 sourceprint?

01.

//百度翻译

02.

public functionbaiduDic($word,$from="auto",$to="auto"){

03.

 

04.

//首先对要翻译的文字进行 urlencode 处理

05.

$word_code=urlencode($word);

06.

 

07.

//注册的API Key

08.

$appid="YourApiKey";

09.

 

10.

//生成翻译APIURL 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上运行不成功,各位有兴趣自行测试一下。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
利用有道翻译API key申请方法图示
Excel里内嵌在线翻译
教你如何优雅的用R语言调用有道翻译
微信公众平台消息接口开发(2)中英翻译
使用有道翻译API做翻译(c语言实现)
Python使用Youdao API 的有道词典小程序
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服