elesos

思路分析

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

分类:

技术点:

相关文章: