思路分析
首先对用户发送过来的消息进行判断,判断消息里是否含有“翻译”关键字,如果有,则提取翻译内容,然后调用网络上开放的翻译API 进行翻译。
我们用有道翻译API:http://fanyi.youdao.com/openapi?path=data-mode
记下申请时的API key 和keyfrom
关键字判断与待翻译内容读取
翻译消息的格式是 “翻译+待翻译内容”,所以首先截取前两个字,判断是否为 “翻译” 关键字。
$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; }
与有道词典的翻译对比如下图所示:
艺搜参考
在线格式化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