Java开发使用百度翻译api

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

      百度翻译开放平台

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 {

            // 设置SSLContext
            SSLContext 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;

        // 百度翻译官方api
        String url = "http://api.fanyi.baidu.com/api/trans/vip/translate";
        // 需要改成自己的APP ID
        String 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);

    }

}
  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Java 1.8是Java编程语言的一个版本,它的帮助文档是Java开发人员非常重要的参考资料。这个帮助文档涵盖了Java 1.8提供的各种功能和API开发人员可以通过查阅该文档了解Java 1.8中的语言特性、库函数和框架概念。 百度翻译版的Java 1.8帮助文档,对于想要了解Java 1.8的开发人员来说,是一个很好的起点。然而,需要注意的是,翻译可能存在一些误差或不准确的地方,因此最好使用英文原版帮助文档进行参考。 另外,Java 1.8是一个较老的版本,虽然仍然被广泛应用,但是已经有了更高的版本,因此用户需要注意文档中提到的某些API在较新的版本中可能已经发生了变化或被替换掉了。开发人员需要对Java的章节和API的文档做到熟练理解,在实际的编程过程中才能更好地应用Java编程语言。 ### 回答2: Java 1.8帮助文档是Java编程语言的官方文档,它提供了有关Java开发人员需要了解的各种信息。Java 1.8是Java编程语言的最新版本,它包含了许多新功能和改进。 百度翻译版的Java 1.8帮助文档可以提供给非英语母语的开发人员更好的访问和理解。然而,因为机器翻译的局限性,百度翻译中可能存在语法和用词错误,因此,开发人员应该仔细检查代码和文档以确保其准确性。在使用百度翻译Java 1.8帮助文档时,开发人员应该牢记,它仅仅是翻译版,而不是官方的英文文档,因此,他们应该仍然参考官方的文档,以确保他们正在获得最准确的信息。 ### 回答3: Java 1.8帮助文档是Java编程语言的官方文档。这个文档详细地介绍了Java 1.8的各种特性,包括Lambda表达式、接口的默认方法、函数式接口、Stream API等等。Java 1.8帮助文档百度翻译版可以帮助那些母语不是英语的程序员更好地理解Java 1.8的特性和使用方法。通过使用百度翻译,人们可以将Java 1.8帮助文档翻译成自己熟悉的语言,比如中文,这对于那些英语水平不够的程序员来说是非常方便的。然而,需要注意的是,百度翻译存在一些翻译不准确、语义不清等问题,因此建议读者在阅读百度翻译Java 1.8帮助文档时多加留意,最好结合其他资料一起使用,以保证获取准确、全面的信息。总之,Java 1.8帮助文档百度翻译版是一个非常有价值的资源,它可以帮助人们更好地学习和应用Java 1.8编程语言。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值