欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > java >内容正文

java

Java开发使用百度翻译api

发布时间:2023/12/14 java 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Java开发使用百度翻译api 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1、先注册一个 百度翻译api 帐户,申请官方授权,注册官网如下:

      http://api.fanyi.baidu.com/api/trans/product/index

2、申请成功后下载java版demo,其实就是一个工程文件

3、下载好之后将工程文件导入eclipse,导入成功后,在Main类中将变量 APP_ID ,SECURITY_KEY  设为你申请到的APP ID与密匙,APP ID与密匙在开发者信息里找

4、填入id与密匙就能直接使用了,

   我们要用到的是TransApi 类中的 getTransResult(String A, String B, String C)方法,A是需要翻译的内容,B是翻译源语言,C是译文语言。自动对应的是 "auto",中文对应"zh",英文对应"en",译文语言不能设为自动,其他语言简写可以到官网上自行查找。

    函数返回结果是josn字段,结构如下

    {"from":"zh","to":"en","trans_result":[{"src":"\u9ad8\u5ea6600\u7c73","dst":"Height of 600 meters"}]}

5、解析json,方法有很多种,这里用的是googol的gson来解析,使用gson需要下载gson的jar文件,大家可以自行到网上下载,下载后将jar文件导入项目中即可。

下面直接上源码:

package com.wangfei.service;import com.google.gson.Gson; import com.wangfei.pojo.TranslateResult; import com.wangfei.util.MD5; import com.wangfei.util.MyX509TrustManager; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.security.MessageDigest;/***百度翻译API工具*/ public class BaiduTranslateService {private static Logger logger = LoggerFactory.getLogger(BaiduTranslateService.class);protected static final int SOCKET_TIMEOUT = 10000; // 10S/*** 发起http请求获取返回结果** @param requestUrl 请求地址* @return*/public static String httpRequest(String requestUrl) {StringBuffer buffer = new StringBuffer();try {// 设置SSLContextSSLContext sslcontext = SSLContext.getInstance("TLS");sslcontext.init(null, new TrustManager[] { new MyX509TrustManager() }, null);URL url = new URL(requestUrl);HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();if (httpUrlConn instanceof HttpsURLConnection) {((HttpsURLConnection) httpUrlConn).setSSLSocketFactory(sslcontext.getSocketFactory());}httpUrlConn.setConnectTimeout(SOCKET_TIMEOUT); // 设置相应超时httpUrlConn.setRequestMethod("GET");//httpUrlConn.connect();int statusCode = httpUrlConn.getResponseCode();if (statusCode != HttpURLConnection.HTTP_OK) {logger.info("Http错误码:" + statusCode);}// 将返回的输入流转换成字符串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();httpUrlConn.disconnect();} catch (Exception e) {e.printStackTrace();}return buffer.toString();}/*** utf编码** @param source* @return*/public static String urlEncodeUTF8(String source) {String result = source;try {result = URLEncoder.encode(source, "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}return result;}/*** 翻译(中->英 英->中 日->中 )** @param querySource* @return*/public static String translate(String querySource, String from, String to) {String dst = null;// 百度翻译官方apiString url = "http://api.fanyi.baidu.com/api/trans/vip/translate";// 需要改成自己的APP IDString APPID = "填写自己的APPID";// 需要改成自己的密钥String KEY = "填写自己密钥";// 随机数,官方提供的是获取时间String SALT = Long.toString(System.currentTimeMillis());// 对签名做md5加密String SIGN = MD5.md5(APPID + querySource + SALT + KEY);// 组装查询地址 // 添加参数,并对参数的值进行urlEncode utf-8编码StringBuffer requestUrl = new StringBuffer(url);requestUrl.append("?");requestUrl.append("q");requestUrl.append("=");requestUrl.append(urlEncodeUTF8(querySource));requestUrl.append("&");requestUrl.append("from");requestUrl.append("=");requestUrl.append(urlEncodeUTF8(from));requestUrl.append("&");requestUrl.append("to");requestUrl.append("=");requestUrl.append(urlEncodeUTF8(to));requestUrl.append("&");requestUrl.append("appid");requestUrl.append("=");requestUrl.append(urlEncodeUTF8(APPID));requestUrl.append("&");requestUrl.append("salt");requestUrl.append("=");requestUrl.append(urlEncodeUTF8(SALT));requestUrl.append("&");requestUrl.append("sign");requestUrl.append("=");requestUrl.append(urlEncodeUTF8(SIGN));// 查询并解析结果try {// 查询并获取返回结果String json = httpRequest(requestUrl.toString());logger.info("调用翻译Api的结果" + json);// 通过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 String getMD5String(String str) {try {// 生成一个MD5加密计算摘要MessageDigest md = MessageDigest.getInstance("MD5");// 计算md5函数md.update(str.getBytes());// digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值//一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方)return new BigInteger(1, md.digest()).toString(16);} catch (Exception e) {e.printStackTrace();return null;}}public static void main(String[] args) {// 翻译结果:网络非常强大String querySource = "The network really powerful";String from = "auto";String to = "zh";String str = translate(querySource,from,to);System.out.println("翻译结果====" + str);} }

java   MD5 加密

package com.wangfei.util;import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;/*** MD5编码相关的类*/ public class MD5 {// 首先初始化一个字符数组,用来存放每个16进制字符private static final char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd','e', 'f' };/*** 获得一个字符串的MD5值** @param input 输入的字符串* @return 输入字符串的MD5值**/public static String md5(String input) {if (input == null)return null;try {// 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”)MessageDigest messageDigest = MessageDigest.getInstance("MD5");// 输入的字符串转换成字节数组byte[] inputByteArray = input.getBytes("utf-8");// inputByteArray是输入字符串转换得到的字节数组messageDigest.update(inputByteArray);// 转换并返回结果,也是字节数组,包含16个元素byte[] resultByteArray = messageDigest.digest();// 字符数组转换成字符串返回return byteArrayToHex(resultByteArray);} catch (Exception e) {e.printStackTrace();return null;}}/*** 获取文件的MD5值** @param file* @return*/public static String md5(File file) {try {if (!file.isFile()) {System.err.println("文件" + file.getAbsolutePath() + "不存在或者不是文件");return null;}FileInputStream in = new FileInputStream(file);String result = md5(in);in.close();return result;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}public static String md5(InputStream in) {try {MessageDigest messagedigest = MessageDigest.getInstance("MD5");byte[] buffer = new byte[1024];int read = 0;while ((read = in.read(buffer)) != -1) {messagedigest.update(buffer, 0, read);}in.close();String result = byteArrayToHex(messagedigest.digest());return result;} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}private static String byteArrayToHex(byte[] byteArray) {// new一个字符数组,这个就是用来组成结果字符串的(解释一下:一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方))char[] resultCharArray = new char[byteArray.length * 2];// 遍历字节数组,通过位运算(位运算效率高),转换成字符放到字符数组中去int index = 0;for (byte b : byteArray) {resultCharArray[index++] = hexDigits[b >>> 4 & 0xf];resultCharArray[index++] = hexDigits[b & 0xf];}// 字符数组组合成字符串返回return new String(resultCharArray);}}

总结

以上是生活随笔为你收集整理的Java开发使用百度翻译api的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。