欢迎访问我的独立博客

微信公众平台开发5:翻译功能

思路分析

首先对用户发送过来的消息进行判断,判断消息里是否含有“翻译”关键字,如果有,则提取翻译内容,然后调用网络上开放的翻译API 进行翻译。

我们用有道翻译API:http://fanyi.youdao.com/openapi?path=data-mode

记下申请时的API key 和keyfrom

14370499012_56ecd40cd5_o.jpg

关键字判断与待翻译内容读取

翻译消息的格式是 “翻译+待翻译内容”,所以首先截取前两个字,判断是否为 “翻译” 关键字。

$str_trans=mb_substr($keyword,0,2,"UTF-8");

从消息的开头开始截取,截取两个字符,然后判断是否为 “翻译” 关键字。

$str_valid=mb_substr($keyword,0,-2,"UTF-8");

从消息的开头开始,截掉末尾的两个字符,判断是否只输入“翻译”两字,若没有翻译内容,则输入的消息也不正确。

接下来进行待翻译内容提取:

$word=mb_substr($keyword,2,200,"UTF-8");

从消息的开头第3个字符开始截取,截取200个字符(API要求字符长度不能超过200),截取出来的即为待翻译内容。注意要翻译的文本,必须是UTF-8编码,需要进行urlencode编码,不然可能返回60错误。

接着调用函数进行翻译。

//调用有道词典
$contentStr=$this->youdaoDic($word);

具体实现

数据接口:

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

将上面的keyfrom 和key换成上面申请的内容,然后选择doctype,再输入要翻译的文本,就可以调用有道翻译API 进行翻译了。

有道翻译提供了三种数据格式,这里我们只讲解两种,即xml 和json。

xml 格式

publicfunction youdaoDic($word){           $keyfrom="orchid";//申请APIKEY时填的网站名称内容
    $apikey="YourApiKey";//从有道申请的APIKEY           //有道翻译-xml格式
$url_youdao='http://fanyi.youdao.com/openapi.do?keyfrom='.$keyfrom.'&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"无法进行有效的翻译";}}

json 格式

http://fanyi.youdao.com/openapi.do?keyfrom=<keyfrom>&key=<key>&type=data&doctype=json&version=1.1&q=good {"errorCode":0"query":"good",     "translation":["好"], // 有道翻译     "basic":{// 有道词典-基本词典         "phonetic":"gʊd""uk-phonetic":"gʊd"//英式发音         "us-phonetic":"ɡʊd"//美式发音         "explains":["好处",             "好的""好"]},     "web":[// 有道词典-网络释义         {"key":"good",             "value":["良好","善","美好"]},         {...}]} 代码:
publicfunction youdaoDic($word){           $keyfrom="orchid";//申请APIKEY时所填的网站名称内容
$apikey="YourApiKey";//从有道申请的APIKEY           //有道翻译-json格式
$url_youdao='http://fanyi.youdao.com/openapi.do?keyfrom='.$keyfrom.'&key='.$apikey.'&type=data&doctype=json&version=1.1&q='.$word;           $jsonStyle=file_get_contents($url_youdao);           $result=json_decode($jsonStyle,true);// 为 TRUE 时,返回 array           $errorCode=$result['errorCode'];           $trans='';           if(isset($errorCode)){//               switch($errorCode){case0:$trans=$result['translation']['0'];break;case20:$trans='要翻译的文本过长';break;case30:$trans='无法进行有效的翻译';break;case40:$trans='不支持的语言类型';break;case50:$trans='无效的key';break;default:$trans='出现异常';break;}}return$trans;       }

与有道词典的翻译对比如下图所示:

14368655671_01c315a5c3_o.png

14370499272_1109779c16_o.png

14185366638_a452b9f693_o.png

14370499102_cb342dee97_o.png

14185523317_85122ee8ce_o.png

14185331629_34c76c736e_o.png


艺搜参考

在线格式化json

http://www.cnblogs.com/mchina/p/3170565.html

http://www.crazyant.net/920.html

http://stackoverflow.com/questions/8068220/check-if-array-is-null-or-not-in-php

posted @ 2016-09-30 17:42  github.com/starRTC  阅读(325)  评论(0编辑  收藏  举报