思路分析
首先對用戶發送過來的消息進行判斷,判斷消息里是否含有“翻譯”關鍵字,如果有,則提取翻譯內容,然后調用網絡上開放的翻譯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