日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[041] 微信公众帐号开发教程第17篇-应用实例之智能翻译

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [041] 微信公众帐号开发教程第17篇-应用实例之智能翻译 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內容概要

本篇文章為大家演示怎樣在微信公眾帳號上實現“智能翻譯”,本例中翻譯功能是通過調用“百度翻譯API”實現的。智能翻譯是指用戶隨意輸入想要翻譯的內容(單詞或句子),系統能自己主動識別用戶採用的語言,并將其翻譯為其它語言,眼下支持的翻譯方向:中->英、英->中和日->中。以下我們來看看智能翻譯終于做出來的效果:

?

? ??

?

我們通過輸入關鍵詞“翻譯”或者點擊菜單“翻譯”能夠看到該功能的使用幫助,然后輸入“翻譯+內容”就能對內容進行翻譯了。

百度翻譯API介紹

點擊查看百度翻譯API使用說明,事實上這份文檔已經說的非常具體了,筆者僅僅是將我們調用該接口時最關心的內容摘取出來,主要例如以下:

1)通過發送HTTP GET請求調用百度翻譯API。

2)百度翻譯API請求地址:

http://openapi.baidu.com/public/2.0/bmt/translate

3)調用API須要傳遞from、to、client_id和q四個參數,描寫敘述例如以下:

keyvalue描寫敘述
from源語言語種:語言代碼或auto僅支持特定的語言組合,以下會單獨進行說明
to目標語言語種:語言代碼或auto僅支持特定的語言組合,以下會單獨進行說明
client_id開發人員在百度連接平臺上注冊得到的授權API key請閱讀怎樣獲取api key
q待翻譯內容該字段必須為UTF-8編碼,而且以GET方式調用API時,須要進行urlencode編碼。

在調用接口前,我們要先獲取到api key。獲取方式比較簡單,依據提示一步步操作就能夠,筆者就不再贅述了。
4)對于智能翻譯,參數from和to的傳都是auto。
4)參數q的編碼方式為UTF-8,傳遞之前要進行urlencode編碼。

5)接口返回結果示比例如以下:

{"from":"en","to":"zh","trans_result":[{"src":"today","dst":"\u4eca\u5929"}]}

返回結果里的中文是unicode編碼,須要通過json_decode進行轉換,轉換后的示比例如以下:

{"from": "en","to": "zh","trans_result": [{"src": "today","dst": "今天"},{"src": "tomorrow","dst": "明天"}] }

JSON處理工具包Gson介紹

Gson是Google提供的用于在Java對象和JSON數據之間進行轉換的Java類庫。通過使用Gson類庫,我們能夠將JSON字符串轉成Java對象,反之亦然。下載地址:https://code.google.com/p/google-gson/downloads/list,Gson的使用比較簡單,直接調用它的方法toJson()或fromJson()就能完成對應的轉換,但須要注意的是:在使用Gson將json字符串轉換成Java對象之前,須要先創建好與目標Java對象。讀者能夠在維基百科上學習它的使用演示例子http://zh.wikipedia.org/wiki/Gson。

代碼實現

1)創建與百度翻譯API返回的JSON相對應的Java類

  • import?java.util.List;??
  • ?*?調用百度翻譯api查詢結果?
  • ?*?@author?liufeng?
  • ?*?@date?2013-10-21?
  • public?class?TranslateResult?{??
  • ????//?實際採用的源語言??
  • ????private?String?from;??
  • ????//?實際採用的目標語言??
  • ????private?String?to;??
  • ????//?結果體??
  • ????private?List<ResultPair>?trans_result;??
  • ????public?String?getFrom()?{??
  • ????????return?from;??
  • ????public?void?setFrom(String?from)?{??
  • ????????this.from?=?from;??
  • ????public?String?getTo()?{??
  • ????????return?to;??
  • ????public?void?setTo(String?to)?{??
  • ????????this.to?=?to;??
  • ????public?List<ResultPair>?getTrans_result()?{??
  • ????????return?trans_result;??
  • ????public?void?setTrans_result(List<ResultPair>?trans_result)?{??
  • ????????this.trans_result?=?trans_result;??
  • import java.util.List;/*** 調用百度翻譯api查詢結果* * @author liufeng* @date 2013-10-21*/ public class TranslateResult {// 實際採用的源語言private String from;// 實際採用的目標語言private String to;// 結果體private List<ResultPair> trans_result;public String getFrom() {return from;}public void setFrom(String from) {this.from = from;}public String getTo() {return to;}public void setTo(String to) {this.to = to;}public List<ResultPair> getTrans_result() {return trans_result;}public void setTrans_result(List<ResultPair> trans_result) {this.trans_result = trans_result;} }

    注意:這里的類名能夠隨意取,可是成員變量的名字應于翻譯API返回的JSON字符串中的屬性名保持一致,否則將JSON轉換成TranslateResult對象時會報錯。

    TranslateResult類中的trans_result屬性是一個ResultPair集合,該類的代碼例如以下:

  • ?*?@author?liufeng?
  • ?*?@date?2013-10-21?
  • public?class?ResultPair?{??
  • ????private?String?src;??
  • ????private?String?dst;??
  • ????public?String?getSrc()?{??
  • ????????return?src;??
  • ????public?void?setSrc(String?src)?{??
  • ????????this.src?=?src;??
  • ????public?String?getDst()?{??
  • ????????return?dst;??
  • ????public?void?setDst(String?dst)?{??
  • ????????this.dst?=?dst;??
  • /*** 結果對* * @author liufeng* @date 2013-10-21*/ public class ResultPair {// 原文private String src;// 譯文private String dst;public String getSrc() {return src;}public void setSrc(String src) {this.src = src;}public String getDst() {return dst;}public void setDst(String dst) {this.dst = dst;} }

    說明:這兩個類的封裝是Gson類庫所要求的,假設讀者不是用Gson解析json字符串,而是用JSON-lib,就沒有必要封裝這兩個類。

    2)接口調用?

  • import?java.io.BufferedReader;??
  • import?java.io.InputStream;??
  • import?java.io.InputStreamReader;??
  • import?java.io.UnsupportedEncodingException;??
  • import?java.net.HttpURLConnection;??
  • import?java.net.URL;??
  • import?com.google.gson.Gson;??
  • ?*?@author?liufeng?
  • ?*?@date?2013-10-21?
  • public?class?BaiduTranslateService?{??
  • ?????*?發起http請求獲取返回結果?
  • ?????*?@param?requestUrl?請求地址?
  • ?????*?@return?
  • ????public?static?String?httpRequest(String?requestUrl)?{??
  • ????????StringBuffer?buffer?=?new?StringBuffer();??
  • ????????????URL?url?=?new?URL(requestUrl);??
  • ????????????HttpURLConnection?httpUrlConn?=?(HttpURLConnection)?url.openConnection();??
  • ????????????httpUrlConn.setDoOutput(false);??
  • ????????????httpUrlConn.setDoInput(true);??
  • ????????????httpUrlConn.setUseCaches(false);??
  • ????????????httpUrlConn.setRequestMethod("GET");??
  • ????????????httpUrlConn.connect();??
  • ????????????//?將返回的輸入流轉換成字符串??
  • ????????????InputStream?inputStream?=?httpUrlConn.getInputStream();??
  • ????????????InputStreamReader?inputStreamReader?=?new?InputStreamReader(inputStream,?"utf-8");??
  • ????????????BufferedReader?bufferedReader?=?new?BufferedReader(inputStreamReader);??
  • ????????????String?str?=?null;??
  • ????????????while?((str?=?bufferedReader.readLine())?!=?null)?{??
  • ????????????????buffer.append(str);??
  • ????????????bufferedReader.close();??
  • ????????????inputStreamReader.close();??
  • ????????????//?釋放資源??
  • ????????????inputStream.close();??
  • ????????????inputStream?=?null;??
  • ????????????httpUrlConn.disconnect();??
  • ????????}?catch?(Exception?e)?{??
  • ????????return?buffer.toString();??
  • ?????*?utf編碼?
  • ?????*?@param?source?
  • ?????*?@return?
  • ????public?static?String?urlEncodeUTF8(String?source)?{??
  • ????????String?result?=?source;??
  • ????????????result?=?java.net.URLEncoder.encode(source,?"utf-8");??
  • ????????}?catch?(UnsupportedEncodingException?e)?{??
  • ????????????e.printStackTrace();??
  • ????????return?result;??
  • ?????*?翻譯(中->英?英->中?日->中?)?
  • ?????*?@param?source?
  • ?????*?@return?
  • ????public?static?String?translate(String?source)?{??
  • ????????String?dst?=?null;??
  • ????????//?組裝查詢地址??
  • ????????String?requestUrl?=?"http://openapi.baidu.com/public/2.0/bmt/translate?client_id=AAAAAAAAAAAAAAAAAAAAAAAA&q={keyWord}&from=auto&to=auto";??
  • ????????//?對參數q的值進行urlEncode?utf-8編碼??
  • ????????requestUrl?=?requestUrl.replace("{keyWord}",?urlEncodeUTF8(source));??
  • ????????//?查詢并解析結果??
  • ????????????//?查詢并獲取返回結果??
  • ????????????String?json?=?httpRequest(requestUrl);??
  • ????????????//?通過Gson工具將json轉換成TranslateResult對象??
  • ????????????TranslateResult?translateResult?=?new?Gson().fromJson(json,?TranslateResult.class);??
  • ????????????//?取出translateResult中的譯文??
  • ????????????dst?=?translateResult.getTrans_result().get(0).getDst();??
  • ????????}?catch?(Exception?e)?{??
  • ????????????e.printStackTrace();??
  • ????????if?(null?==?dst)??
  • ????????????dst?=?"翻譯系統異常,請稍候嘗試!";??
  • ????????return?dst;??
  • ????public?static?void?main(String[]?args)?{??
  • ????????//?翻譯結果:The?network?really?powerful??
  • ????????System.out.println(translate("網絡真強大"));??
  • import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import com.google.gson.Gson;/*** * @author liufeng* @date 2013-10-21*/ public class BaiduTranslateService {/*** 發起http請求獲取返回結果* * @param requestUrl 請求地址* @return*/public static String httpRequest(String requestUrl) {StringBuffer buffer = new StringBuffer();try {URL url = new URL(requestUrl);HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();httpUrlConn.setDoOutput(false);httpUrlConn.setDoInput(true);httpUrlConn.setUseCaches(false);httpUrlConn.setRequestMethod("GET");httpUrlConn.connect();// 將返回的輸入流轉換成字符串InputStream inputStream = httpUrlConn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;while ((str = bufferedReader.readLine()) != null) {buffer.append(str);}bufferedReader.close();inputStreamReader.close();// 釋放資源inputStream.close();inputStream = null;httpUrlConn.disconnect();} catch (Exception e) {}return buffer.toString();}/*** utf編碼* * @param source* @return*/public static String urlEncodeUTF8(String source) {String result = source;try {result = java.net.URLEncoder.encode(source, "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return result;}/*** 翻譯(中->英 英->中 日->中 )* * @param source* @return*/public static String translate(String source) {String dst = null;// 組裝查詢地址String requestUrl = "http://openapi.baidu.com/public/2.0/bmt/translate?client_id=AAAAAAAAAAAAAAAAAAAAAAAA&q={keyWord}&from=auto&to=auto";// 對參數q的值進行urlEncode utf-8編碼requestUrl = requestUrl.replace("{keyWord}", urlEncodeUTF8(source));// 查詢并解析結果try {// 查詢并獲取返回結果String json = httpRequest(requestUrl);// 通過Gson工具將json轉換成TranslateResult對象TranslateResult translateResult = new Gson().fromJson(json, TranslateResult.class);// 取出translateResult中的譯文dst = translateResult.getTrans_result().get(0).getDst();} catch (Exception e) {e.printStackTrace();}if (null == dst)dst = "翻譯系統異常,請稍候嘗試!";return dst;}public static void main(String[] args) {// 翻譯結果:The network really powerfulSystem.out.println(translate("網絡真強大"));} }

    代碼解讀:
    1)第21-53行封裝了一個http請求方法httpRequest(),相信讀過之前教程的讀者已經非常熟悉了。

    2)第61-69行封裝了一個urlEncodeUTF8()方法,用于對url中的參數進行UTF-8編碼。

    3)第81行代碼中的client_id須要替換成自己申請的api key。

    4)第83行代碼是對url中的中文進行編碼。以后凡是遇到通過url傳遞中文參數的情況,一定要顯示地對中文進行編碼,否則非常可能出現程序在本機能正常執行,但部署到server上卻有問題,由于本機與server的默認編碼方式可能不一樣。

    5)第88行代碼就是調用百度翻譯API。

    6)第90行代碼是使用Gson工具將json字符串轉換成TranslateResult對象,是不是發現Gson的使用真的非常easy?另外,前面提到過調用百度翻譯API返回的json里假設有中文是用unicode表示的,形如“\u4eca\u5929”,那為什么這里沒有做不論什么處理?由于Gson的內部實現已經幫我們搞定了。

    公眾賬號后臺調用

    在公眾賬號后臺,須要對接收到的文本消息進行推斷,假設是以“翻譯”兩個字開頭的,就認為是在使用智能翻譯功能,然后將“翻譯”兩個字之后的內容作為翻譯對象,調用API進行翻譯;假設輸入的唯獨“翻譯”兩個字,就提示智能翻譯功能的使用指南。關鍵代碼例如以下:

  • //?文本消息???
  • if?(WeixinUtil.REQ_MESSAGE_TYPE_TEXT.equals(msgType))?{??
  • ????String?content?=?requestMap.get("Content").trim();??
  • ????if?(content.startsWith("翻譯"))?{??
  • ????????String?keyWord?=?content.replaceAll("^翻譯",?"").trim();??
  • ????????if?("".equals(keyWord))?{??
  • ????????????textMessage.setContent(getTranslateUsage());??
  • ????????}?else?{??
  • ????????????textMessage.setContent(BaiduTranslateService.translate(keyWord));??
  • ????????out.print(WeixinUtil.textMessageToXml(textMessage));??
  • // 文本消息 if (WeixinUtil.REQ_MESSAGE_TYPE_TEXT.equals(msgType)) {String content = requestMap.get("Content").trim();if (content.startsWith("翻譯")) {String keyWord = content.replaceAll("^翻譯", "").trim();if ("".equals(keyWord)) {textMessage.setContent(getTranslateUsage());} else {textMessage.setContent(BaiduTranslateService.translate(keyWord));}out.print(WeixinUtil.textMessageToXml(textMessage));} }

    第7行getTranslateUsage()方法得到的就是智能翻譯功能的使用指南,代碼例如以下:

  • ?*?Q譯通使用指南?
  • ?*?@return?
  • public?static?String?getTranslateUsage()?{??
  • ????StringBuffer?buffer?=?new?StringBuffer();??
  • ????buffer.append(XiaoqUtil.emoji(0xe148)).append("Q譯通使用指南").append("\n\n");??
  • ????buffer.append("Q譯通為用戶提供專業的多語言翻譯服務,眼下支持以下翻譯方向:").append("\n");??
  • ????buffer.append("????中?->?英").append("\n");??
  • ????buffer.append("????英?->?中").append("\n");??
  • ????buffer.append("????日?->?中").append("\n\n");??
  • ????buffer.append("使用演示例子:").append("\n");??
  • ????buffer.append("????翻譯我是中國人").append("\n");??
  • ????buffer.append("????翻譯dream").append("\n");??
  • ????buffer.append("????翻譯さようなら").append("\n\n");??
  • ????buffer.append("回復“?”顯示主菜單");??
  • ????return?buffer.toString();??
  • /*** Q譯通使用指南* * @return*/ public static String getTranslateUsage() {StringBuffer buffer = new StringBuffer();buffer.append(XiaoqUtil.emoji(0xe148)).append("Q譯通使用指南").append("\n\n");buffer.append("Q譯通為用戶提供專業的多語言翻譯服務,眼下支持以下翻譯方向:").append("\n");buffer.append(" 中 -> 英").append("\n");buffer.append(" 英 -> 中").append("\n");buffer.append(" 日 -> 中").append("\n\n");buffer.append("使用演示例子:").append("\n");buffer.append(" 翻譯我是中國人").append("\n");buffer.append(" 翻譯dream").append("\n");buffer.append(" 翻譯さようなら").append("\n\n");buffer.append("回復“?”顯示主菜單");return buffer.toString(); }

    說明:希望通過本例的學習,除了掌握百度翻譯API的調用之外,讀者還能夠掌握json字符串的解析方法,這樣就能夠自己學會調用許多其他互聯網上開放的接口。

    假設認為文章對你有所幫助,請通過留言或關注微信公眾帳號xiaoqrobot來支持柳峰!

    轉帖請注明本文出自柳峰的博客(http://blog.csdn.net/lyq8479),請尊重他人的辛勤勞動成果,謝謝!

    轉載于:https://www.cnblogs.com/mfryf/p/3598792.html

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的[041] 微信公众帐号开发教程第17篇-应用实例之智能翻译的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。