百度翻译API与MD5加密 Java使用

这段时间研究一下百度翻译API,结果发现新版的百度翻译较以前的有了很大的变化:
旧版百度翻译的URL地址:
http://openapi.baidu.com/public/2.0/bmt/translate?client_id=YourApiKey&q=today&from=auto&to=auto
参数只需要:client_id(API key),q(翻译的内容),from(源语言语种:语言代码或auto),to(目标语言语种:语言代码或auto);
新版百度翻译的URL地址:
http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4
参数需要:q(翻译的内容),from(翻译源语言 ,可设置为auto),to(译文语言,不可设置为auto),appid (API key)
salt(随机数),sign(签名);
签名sign生成的方法是:
1、将请求参数中的 APPID(appid), 翻译query(q, 注意为UTF-8编码), 随机数(salt), 以及平台分配的密钥(可在管理控制台查看)
按照 appid+q+salt+密钥 的顺序拼接得到字符串1。
2、对字符串1做md5,得到32位小写的sign。
自己从网上找了一个MD5的加密算法,英文还算正常,但是出现汉字的时候,就会返回一条:
{“error_code”:”54001”,”error_msg”:”Invalid Sign”}
找到错误码列表:
54001 签名错误 请检查您的签名生成方法

没办法,看了一下百度翻译提供的demo:
PHP 版、JS 版、Python 版、C 版
Java呢??木有。。。。。坑爹。。。于是乎JS。。。是不是可以转为Java???经过两天的奋斗。。。。于是乎。。。我放弃了。。。在网上搜寻了一番,返现Java 1.6之后可以直接调用js文件,经过一番调试终于成功了。。。
代码如下:

import java.io.FileReader;
import java.util.Date;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;


public class TestMD5 {
    public static void main(String[] args) {

        String APPID = "APPID"; // 需要改成自己的APP ID
        String KEY = "KEY"; //需要改成自己的密钥
        String SALT = Long.toString(new Date().getTime());//随机数,官方提供的是获取时间
        String SOURCE = "足球";//翻译内容
        String SIGN = "";

        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("javascript");

        String jsFileName = "md5.js"; // 读取js文件

        FileReader reader;
        try {
            reader = new FileReader(jsFileName);
            engine.eval(reader);
            if (engine instanceof Invocable) {
                Invocable invoke = (Invocable) engine; // 调用merge方法,并传入两个参数
                System.out.println(APPID + SOURCE + SALT + KEY);
                SIGN = (String) invoke.invokeFunction("MD5",
                        APPID + SOURCE + SALT + KEY);
                System.out.println(SIGN);
            }

            reader.close();

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } // 执行指定脚本

    }
}

运行的结果:d8e590e6dcd9034cb0206efdd04a164f
百度提供的MD5在线生成(http://app.baidu.com/yiten_md5)的结果:常规md5加密($pass)
32位MD5大写:D8E590E6DCD9034CB0206EFDD04A164F
32位MD5小写:d8e590e6dcd9034cb0206efdd04a164f
16位MD5大写:DCD9034CB0206EFD
16位MD5小写:dcd9034cb0206efd

希望对使用百度翻译API有用;
参考文章:http://blog.csdn.net/xzyxuanyuan/article/details/8062887

猜你喜欢

转载自blog.csdn.net/xiaomen417/article/details/50237897