思路分析
和上一篇查詢天氣的思路差不多,首先要對用戶發送過來的消息進行判斷,判斷消息里是否含有“翻譯”關鍵字,如果含有,則提取待翻譯內容,然后調用網絡上開放的翻譯API 進行相關翻譯。
翻譯API 分析
網絡上有很多翻譯API,大家可以根據自己的需求進行選擇。這里我們選擇應用比較廣泛的,翻譯功能還比較不錯的有道翻譯API 和百度翻譯API,下面對這兩種API的相關信息進行分析。
3.1 有道翻譯API
3.1.1 API 地址:fanyi.youdao.com/openapi
注意:有道提供的API 接口,在下面的測試時,json 數據格式返回不正確,到網上查閱資料,可以正確翻譯的地址為 fanyi.youdao.com/fanyiapi,這點注意。
3.1.2 申請key
按照要求填寫相關信息,這些信息,下面會使用到,所以請認真如實填寫。
申請完之后,會在下方生成API key 和keyfrom,使用API 時會用到。
3.1.3 API 使用范例
3.1.4 數據格式
a. xml 格式
fanyi.youdao.com/openapi.do?keyfrom=orchid&key=1008797533&type=data&doctype=xml&version=1.1&q=這里是有道翻譯API
<?xmlversion="1.0"encoding="UTF-8"?><youdao-fanyi><errorCode>0</errorCode><!--有道翻譯--><query><![CDATA[這里是有道翻譯API]]></query><translation><paragraph><![CDATA[HereistheyoudaotranslationAPI]]></paragraph></translation></youdao-fanyi>
b. json 格式
http://fanyi.youdao.com/openapi.do?keyfrom=orchid&key=1008797533&type=data&doctype=json&version=1.1&q=翻譯
{"errorCode":0"query":"翻譯","translation":["translation"],//有道翻譯"basic":{//有道詞典-基本詞典"phonetic":"fānyì","explains":["translate","interpret"]},"web":[//有道詞典-網絡釋義{"key":"翻譯","value":["translator","translation","translate","Interpreter"]},{...}]}
3.2 百度翻譯API
3.2.1 API 地址: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字符串。
{“from”:”zh”,“to”:”en”,“trans_result”:[]}
trans_result 為一個數組,其中每一個{}就是一個段落,結構如下所示:
trans_result:[{},{},{}]
段落結果即為trans_result 數組中的一項:
{“src”:””,“dst”:””}
段落結果說明:
經json_decode 后的形式:
{"from":"en","to":"zh","trans_result":[{"src":"today","dst":"今天"}]}
四、關鍵字判斷與待翻譯內容讀取
翻譯消息的格式是 “翻譯+待翻譯內容”,所以首先截取前兩個字,判斷是否為 “翻譯” 關鍵字。
使用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個字符,截取出來的即為待翻譯內容。
接著調用函數進行翻譯。
//調用有道詞典$contentStr=$this->youdaoDic($word);//調用百度詞典$contentStr=$this->baiduDic($word);
五、具體實現
5.1 有道翻譯API
數據接口:
http://fanyi.youdao.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 格式
關鍵代碼如下:
youdaoDic(="orchid";="YourApiKey";='http://fanyi.youdao.com/fanyiapi.do?keyfrom='..'&key='..'&type=data&doctype=xml&version=1.1&q='.=(=->=->translation->(==0"無法進行有效的翻譯"
說明:
$xmlStyle = simplexml_load_file($url_youdao); // PHP 函數,將XML 文檔載入對象中。
$errorCode = $xmlStyle->errorCode; // 獲取錯誤碼
$paras = $xmlStyle->translation->paragraph; // 獲取翻譯內容
5.1.2 json 格式
關鍵代碼如下:
publicfunctionyoudaoDic($word){$keyfrom="orchid";//申請APIKEY時所填表的網站名稱的內容$apikey="YourApiKey";//從有道申請的APIKEY//有道翻譯-json格式$url_youdao='http://fanyi.youdao.com/fanyiapi.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);$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;}
說明:
$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字符串,而且提供了 中->英,中->日,英->中,日->中 四種互譯,比有道翻譯多了一種。
關鍵代碼如下:
//百度翻譯publicfunctionbaiduDic($word,$from="auto",$to="auto"){//首先對要翻譯的文字進行urlencode處理$word_code=urlencode($word);//注冊的APIKey$appid="YourApiKey";//生成翻譯API的URLGET地址$baidu_url="http://openapi.baidu.com/public/2.0/bmt/translate?client_id=".$appid."&q=".$word_code."&from=".$from."&to=".$to;$text=json_decode($this->language_text($baidu_url));$text=$text->trans_result;return$text[0]->dst;}//百度翻譯-獲取目標URL所打印的內容publicfunctionlanguage_text($url){if(!function_exists('file_get_contents')){$file_contents=file_get_contents($url);}else{//初始化一個cURL對象$ch=curl_init();$timeout=5;//設置需要抓取的URLcurl_setopt($ch,CURLOPT_URL,$url);//設置cURL參數,要求結果保存到字符串中還是輸出到屏幕上curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//在發起連接前等待的時間,如果設置為0,則無限等待curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);//運行cURL,請求網頁$file_contents=curl_exec($ch);//關閉URL請求curl_close($ch);}return$file_contents;}
說明:
這里包含了兩個函數,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 格式:
百度翻譯:
感謝各位的閱讀!關于“微信開發之如何實現翻譯功能”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
契稅2023年收費標準是什么?1、個人購買家庭唯一住房:對個人購買家庭唯一住房(家庭成員范圍包括購房人、配偶以及未成年子女,下同),面積為90平方米及以下的,減按1%的稅率征收契稅;面積為90平方米以上的,減按1.5%的稅率征收契稅。2、個人購買改善性住房:對個人購買家庭第二套改善性住房,面積為90平方米及以下的,減按1%的稅率征收契稅;面積為90平方米以上的,減按2%的稅率征收契稅。家庭第二套改...
賣家承擔運費是指從賣家處發貨到買家處的大陸地區首次發貨運費,由賣家承擔,不需要買家支付。買家只需要支付所挑選商品的費用即可。1、淘寶買家在發現商品出現問題時一定要提前和賣家協定退貨的事宜,很多商品是用戶自己不會操作,從而導致的效果不佳,經過客服的指導之后,如果發現產品的效果有所改觀的話,就不需要再退貨了!如果效果實在不行的話,買家就需要申請退貨退款,在買家申請退款時,賣家就會告訴買家退貨的地址,并...
千元以下投資項目有哪些?1.基礎的針織類一般來說,如果你去這些商店縫一顆鈕扣,價格大約是5-10元。如果你需要更復雜的工藝,價格自然會更高。2.商品的代理人當然,我們在這里談論的不是代表什么品牌。畢竟,我們沒有資本。但是你可以做到這一點,你可以成為一個企業。首先,你要做的是找到一個合適的品牌作為代理,但是不要尋找你買不起的名牌。如果你能找到最好的制造商,如果不能,去批發市場。以洗發水為例。你可以在...