一、介紹
上一篇文章介紹了微信公眾平台天氣預報功能的開發,實現了微信公眾平台的第一個實際應用,在接下來的這篇文章中,我們將對微信翻譯功能進行簡單開發,以供讀者參考。
二、思路分析
和上一篇查詢天氣的思路差不多,首先要對用戶發送過來的消息進行判斷,判斷訊息是否含有「翻譯」關鍵字,如果含有,則提取待翻譯內容,然後呼叫網路上開放的翻譯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 申請按照要求填寫相關信息,這些信息,下面會使用到,所以請認真如實填寫。 申請完後,會在下方產生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
<?xml version="1.0" encoding="UTF-8"?><youdao-fanyi> <errorCode>0</errorCode> <!-- 有道翻译 --> <query><![CDATA[这里是有道翻译API]]></query> <translation> <paragraph><![CDATA[Here is the youdao translation API]]></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ān yì", "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編碼的{ “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 格式
关键代码如下:
public function youdaoDic($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){ case 0: $trans = $result['translation']['0']; break; case 20: $trans = '要翻译的文本过长'; break; case 30: $trans = '无法进行有效的翻译'; break; case 40: $trans = '不支持的语言类型'; break; case 50: $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字符串,而且提供了 中->英,中->日,英->中,日->中 四种互译,比有道翻译多了一种。
关键代码如下:
//百度翻译 public function baiduDic($word,$from="auto",$to="auto"){ //首先对要翻译的文字进行 urlencode 处理 $word_code=urlencode($word); //注册的API Key $appid="YourApiKey"; //生成翻译API的URL GET地址 $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所打印的内容 public function language_text($url){ if(!function_exists('file_get_contents')){ $file_contents = file_get_contents($url); }else{ //初始化一个cURL对象 $ch = curl_init(); $timeout = 5; //设置需要抓取的URL curl_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 格式:
百度翻译:
【相关推荐】
1. 特别推荐:“php程序员工具箱”V0.1版本下载
2. 微信公众号平台源码下载
3. 微信投票源码下载
以上是微信開發之翻譯功能的步驟詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!