Java微信公衆號開發(二)—— 百度翻譯API

1  百度翻譯API

1.1  百度API簡介

使用步驟見百度翻譯API。該網站也可下載demo代碼,可是可能存在一些錯誤,需修改。java

修改後的代碼見附件或Eclipse源碼。json

須要開發者帳號、密碼。只要審覈經過便可。api

注意:每個月翻譯字符數低於200萬,享免費服務。超出則收取相應費用。微信

1.2  百度API程序

 1 import java.io.UnsupportedEncodingException;
 2 import com.baidu.translate.demo.TransApi;
 3 public class Main {
 4     // 在平臺申請的APP_ID 詳見 http://api.fanyi.baidu.com/api/trans/product/desktop?req=developer
 5     private static final String APP_ID = "20170709000063735";
 6     private static final String SECURITY_KEY = "EiXpUVJAu4mLYinEqgzN";
 7     public static void main(String[] args) throws UnsupportedEncodingException {
 8         TransApi api = new TransApi(APP_ID, SECURITY_KEY);
 9         String query = "中國";
10         System.out.println(api.getTransResult(query, "auto", "en"));
11     }
12 }

主類如上,副類代碼通常不修改,直接調用便可。網站

運行結果(json格式):編碼

{"from":"zh","to":"en","trans_result":[{"src":"\u4e2d\u56fd","dst":"Chinese"}]}spa

從中提取出咱們真正須要的字符串。翻譯

2  字符串轉算術表達式

JDK1.6以上版本自帶的類能夠實現調用JS的功能,能夠實現執行字符串中的運算公式的功能。code

 1 public class runString {
 2     static ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
 3     public static void main(String[] args) {
 4         String strs = "1+1*2+(10-(2*(5-3)*(2-1))-4)+10/(5-0)";
 5         try {
 6             System.out.println(jse.eval(strs));
 7         } catch (Exception t) {
 8         }
 9     }
10 }

須要注意:字符串中的括號必須是英文括號,不然會出錯。xml

3  微信公衆號後臺程序更改

3.1  程序更改

 1 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 2     
 3     req.setCharacterEncoding("UTF-8");//轉換編碼方式
 4     resp.setCharacterEncoding("UTF-8");
 5     PrintWriter out = resp.getWriter();//經過PrintWriter返回消息至微信後臺
 6     
 7     //接收消息
 8     try {
 9         Map<String,String> map = MessageUtil.xmlToMap(req);
10         String fromUserName = map.get("FromUserName");//發送方賬號(一個OpenID)
11         String toUserName = map.get("ToUserName");//開發者微信號
12         String msgType = map.get("MsgType");//text//若是是文本消息的話,MsgType="text"
13         String content = map.get("Content");//文本消息內容
14         
15         String message = null;
16         //判斷是否爲文本消息
17         if("text".equals(msgType)) {
18             //若是是前綴是回覆,則返回使用者的話
19             if(content.startsWith("回覆:")) {
20                 com.po.TextMessage text = new com.po.TextMessage();
21                 text.setFromUserName(toUserName);//注意,這裏發送者與接收者調換了
22                 text.setToUserName(fromUserName);
23                 text.setMsgType("text");//文本類型
24                 text.setCreateTime("" + new Date().getTime());//當前時間
25                 text.setContent("您發送的消息是:" + content.substring(3));//返回消息。注:從第一個分號開始截取
26                 //將文本消息轉換爲xml
27                 message = MessageUtil.textMessageToXml(text);
28                 
29                 System.out.println(message);
30             }
31             //若是前綴是翻譯,則返回使用者翻譯後的話
32             if(content.startsWith("翻譯:")) {
33                 //1.先翻譯
34                 final String APP_ID = "20170709000063735";//帳號
35                 final String SECURITY_KEY = "EiXpUVJAu4mLYinEqgzN";//密碼
36                 com.baidu.translate.TransApi api = new com.baidu.translate.TransApi(APP_ID, SECURITY_KEY);
37                 String  content_result = api.getTransResult(content.substring(3), "auto", "en");
38                 //2.處理翻譯的結果
39                 //如:{"from":"zh","to":"en","trans_result":[{"src":"\u4e2d\u56fd","dst":"Chinese"}]}
40                 char [] content_result_temp = content_result.toCharArray();
41                 content_result = "";//清空數據
42                 for(int i = content_result_temp.length-5;;i--) {
43                     if(content_result_temp[i] == '"') {
44                         break;
45                     }
46                     content_result = content_result_temp[i] + content_result;
47                 }
48                 //3.再寫入
49                 com.po.TextMessage text = new com.po.TextMessage();
50                 text.setFromUserName(toUserName);//注意,這裏發送者與接收者調換了
51                 text.setToUserName(fromUserName);
52                 text.setMsgType("text");//文本類型
53                 text.setCreateTime("" + new Date().getTime());//當前時間
54                 text.setContent(content_result);//返回消息
55                 //將文本消息轉換爲xml
56                 message = MessageUtil.textMessageToXml(text);
57                 
58                 System.out.println(message);
59             }
60             //若是是前綴是計算,則返回使用者的計算結果
61             if(content.startsWith("計算:")) {
62                 //1.先計算
63                 ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
64                 String  content_result = content.substring(3);
65                 content_result = "" + jse.eval(content_result);
66                 //2.再寫入
67                 com.po.TextMessage text = new com.po.TextMessage();
68                 text.setFromUserName(toUserName);//注意,這裏發送者與接收者調換了
69                 text.setToUserName(fromUserName);
70                 text.setMsgType("text");//文本類型
71                 text.setCreateTime("" + new Date().getTime());//當前時間
72                 text.setContent(content.substring(3) + "=" + content_result);//返回消息。注:從第一個分號開始截取
73                 //將文本消息轉換爲xml
74                 message = MessageUtil.textMessageToXml(text);
75                 
76                 System.out.println(message);
77             }
78         }
79         
80         out.print(message);//返回消息
81     } catch (DocumentException | ScriptException e) {
82         e.printStackTrace();
83     } finally {
84         out.close();
85     }
86 }

3.2  實現結果

相關文章
相關標籤/搜索