Translation.java 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package com.travel.baidu;
  2. import com.alibaba.fastjson.JSONObject;
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.CrossOrigin;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. import javax.servlet.http.HttpServletRequest;
  8. import java.io.BufferedReader;
  9. import java.io.InputStreamReader;
  10. import java.net.HttpURLConnection;
  11. import java.net.URL;
  12. import java.util.HashMap;
  13. import java.util.List;
  14. import java.util.Map;
  15. /**
  16. * 翻译
  17. */
  18. @Controller
  19. @RequestMapping("translationInterface")
  20. @CrossOrigin(origins = "*")
  21. public class Translation {
  22. /**
  23. * 翻译接口
  24. * @param translationVal 参数
  25. * @return 返回翻译结果
  26. */
  27. @RequestMapping("translation")
  28. @ResponseBody
  29. public String translation(String translationVal, String from, String to, HttpServletRequest request){
  30. // 请求url
  31. String url = "https://aip.baidubce.com/rpc/2.0/mt/texttrans/v1";
  32. Map<String, Object> mapVal = new HashMap<>();
  33. try {
  34. String ip = request.getHeader("Host");
  35. System.out.println(ip);
  36. Map<String, Object> map = new HashMap<>();
  37. map.put("from", from);
  38. map.put("to", to);
  39. map.put("q", translationVal);
  40. map.put("termIds", "bak,pl");
  41. String param = GsonUtils.toJson(map);
  42. // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
  43. String accessToken = accessToken();
  44. String result = HttpUtil.post(url, accessToken, "application/json", param);
  45. JSONObject jsonObject = JSONObject.parseObject(result);
  46. JSONObject jsonObject1 = (JSONObject) jsonObject.get("result");
  47. List<Map<Object, Object>> list = (List<Map<Object, Object>>) jsonObject1.get("trans_result");
  48. return (String) list.get(0).get("dst");
  49. } catch (Exception e) {
  50. e.printStackTrace();
  51. }
  52. return null;
  53. }
  54. /**
  55. * 百度翻译获取access_token
  56. * @return 返回access_token
  57. */
  58. public static String accessToken(){
  59. String baidukey = "xmziCjk32tDLk9U2jpY2F5E7";
  60. String secretKey = "lYpEeG2tKKS82KZ9Q1gHKpfGgrRAXQMQ";
  61. // 获取token地址
  62. String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
  63. String getAccessTokenUrl = authHost
  64. // 1. grant_type为固定参数
  65. + "grant_type=client_credentials"
  66. // 2. 官网获取的 API Key
  67. + "&client_id=" + baidukey
  68. // 3. 官网获取的 Secret Key
  69. + "&client_secret=" + secretKey;
  70. try {
  71. URL realUrl = new URL(getAccessTokenUrl);
  72. // 打开和URL之间的连接
  73. HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
  74. connection.setRequestMethod("GET");
  75. connection.connect();
  76. // 获取所有响应头字段
  77. Map<String, List<String>> map = connection.getHeaderFields();
  78. // 遍历所有的响应头字段
  79. for (String key : map.keySet()) {
  80. System.err.println(key + "--->" + map.get(key));
  81. }
  82. // 定义 BufferedReader输入流来读取URL的响应
  83. BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
  84. String result = "";
  85. String line;
  86. while ((line = in.readLine()) != null) {
  87. result += line;
  88. }
  89. /**
  90. * 返回结果示例
  91. */
  92. JSONObject jsonObject = JSONObject.parseObject(result);
  93. String access_token = jsonObject.getString("access_token");
  94. return access_token;
  95. } catch (Exception e) {
  96. System.err.printf("获取token失败!");
  97. e.printStackTrace(System.err);
  98. }
  99. return null;
  100. }
  101. }