文章目录
- 在线演示demo
- 1、准备服务器
- 2、创建项目
- 导入用到的Maven依赖
- 3、调用API,需要使用到一部分工具类附上
- 1、MD5编码(由于调用百度翻译的部分参数需要使用MD5加密)
- 2、Sha256编码(由于调用有道翻译的部分参数需要使用Sha256加密)
- 3、获取时间戳(精确到秒)(有道翻译接口需要用到)
- 4、 最后一个HttpUtil,发送请求api的相应工具类,请前往我的另一个博文获取
- 4、使用百度提供的Api翻译接口
- 百度翻译api接口的版本
- 调百度翻译api接口
- 参数对象代码(附注释)
- 开始调用百度翻译接口
- 接口编写
- 使用postman测试接口如图,结果正确!!
- 5、有道翻译API接口的调用。
- 注册登录并开通翻译服务
- 同百度翻译,根据需要的参数,我们创建一个参数对象进行封装方便调用接口
- 参数对象实体类
- 编写有道翻译工具类
- 调用工具类执行结果
- 响应数据如下
- 大功告成!!如有疑问,欢迎大家评论交流:heart::heart:
在线演示demo
配合百度翻译接口,编写的前端并发布的网站
1、准备服务器
首先,我们需要一个云服务器,将我们的网站发布到云服务器供大家使用
如果没有,我们可以运行在自己的电脑,这样只能保证在局域网的用户才能访问你的网站
2、创建项目
导入用到的Maven依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
3、调用API,需要使用到一部分工具类附上
1、MD5编码(由于调用百度翻译的部分参数需要使用MD5加密)
package com.xjt.demo1.Utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5 {
private final static String[] hexDigits = {
"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"
};
private static String byteArrayToHexString(byte[] b)
{
StringBuffer resultSb = new StringBuffer();
for (int i=0;i<b.length;i++)
{
resultSb.append(byteToHexString(b[i]));
}
return resultSb.toString();
}
private static Object byteToHexString(byte b)
{
int n=b;
if (n<0)
n = 256 + n;
int d1 = n/16;
int d2 = n%16;
return hexDigits[d1] + hexDigits[d2];
}
/**
* 加密方法
* @param origin 原始字符
* @return 加密后字符内容
*/
public static String compile(String origin)
{
String resultString = null;
MessageDigest md;
try
{
resultString = new String(origin);
md = MessageDigest.getInstance("MD5");
resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
return resultString;
}
}
2、Sha256编码(由于调用有道翻译的部分参数需要使用Sha256加密)
package com.xjt.demo1.Utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* @author xu
* @Description
* @createTime 2021年04月16日 14:46:00
*/
public class Sha256Util {
/**
* 生成加密字段
*/
public static String getDigest(String string) {
if (string == null) {
return null;
}
char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
byte[] btInput = string.getBytes();
try {
MessageDigest mdInst = MessageDigest.getInstance("SHA-256");
mdInst.update(btInput);
byte[] md = mdInst.digest();
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (byte byte0 : md) {
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
} catch (NoSuchAlgorithmException e) {
return null;
}
}
}
3、获取时间戳(精确到秒)(有道翻译接口需要用到)
package com.xjt.demo1.Utils;
import java.util.Date;
/**
* @author xu
* @Description
* @createTime 2021年04月16日 14:47:00
*/
public class DataUtil {
public static int getSecondTimestamp(Date date){
if (null == date) {
return 0;
}
String timestamp = String.valueOf(date.getTime());
int length = timestamp.length();
if (length > 3) {
return Integer.valueOf(timestamp.substring(0,length-3));
} else {
return 0;
}
}
}
4、 最后一个HttpUtil,发送请求api的相应工具类,请前往我的另一个博文获取
4、使用百度提供的Api翻译接口
百度翻译api接口的版本
前往开发平台注册登录,并且认证开通通用翻译api
(免费)
对用三个版本
- 标准版(最基本的翻译功能) 免费使用、访问量有限制
- 高级版(需要个人认证) 访问量速度提高,每月可以免费翻译200万字符(我使用的)
- 尊享版(需要企业认证) 增加语音播报,并包含词典术语(有条件的可以使用)
调百度翻译api接口
通过官网了解发现,调用百度翻译的api地址与需要的参数
介绍
我们将需要的参数封装成一个对象。更方便我们调用接口使用
参数对象代码(附注释)
package com.xjt.demo1.enity;
/**
* @author xu
* @Description
* @createTime 2021年04月15日 14:40:00
*/
public class BaiduTranslate {
String q; //需要翻译的内容
String from; //需要翻译的语种, 可设置为 auto,自动识别
String to; //翻译目标语种, 不可设置为 auto
String appid; //你在百度翻译注册的appid
String salt; //随机数,可通过UUID生成
String sign; //签名, appid+q+salt+密钥 的MD5值
public String getQ() {
return q;
}
public void setQ(String q) {
this.q = q;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public BaiduTranslate(String q, String from, String to, String appid, String salt, String sign) {
this.q = q;
this.from = from;
this.to = to;
this.appid = appid;
this.salt = salt;
this.sign = sign;
}
public BaiduTranslate() {
}
@Override
public String toString(){ //重写toString方法,生成需要的参数
return "q="+q+"&from="+from+"&to="+to+"&appid="+appid+"&salt="+salt+"&sign="+sign;
}
}
开始调用百度翻译接口
由于我们翻译目标的语种不能设为auto,我们可以通过要翻译的内容进行正则判断,只要包含字母空格,我们就知道需要是英译汉了
private static final String URl = "http://api.fanyi.baidu.com/api/trans/vip/translate";
private static final String FROM="auto";
private static final String TO="en";
private static final String TO2="zh";
private static final String APPID="你在百度翻译注册后的appid";
private static final String ACCESSTOKEN="对应的密钥";
@Test
public void test() throws UnsupportedEncodingException {
String keyWord="你好";
BaiduTranslate baiduTranslate=null;
String salt = UUID.randomUUID().toString();
String sign=APPID+keyWord+salt+ACCESSTOKEN;
if (keyWord.matches("[a-z ,,.。A-Z]+")){ //如果翻译的内容包含字母和空格,就可以确定用户需要英译汉
baiduTranslate = new BaiduTranslate(URLEncoder.encode(keyWord,"utf-8"), FROM, TO2, APPID, salt, MD5.compile(sign));
}else { //否则汉译英
baiduTranslate = new BaiduTranslate(URLEncoder.encode(keyWord,"utf-8"), FROM, TO, APPID, salt, MD5.compile(sign));
}
String s = HttpUtil.sendGet(URl, baiduTranslate.toString());
System.out.println(s);
}
执行结果如图!
如图所示,从返回的json格式的数据中可以看到,我们需要的翻译的内容是键为trans_result
的数组,数组中可能包含多个对象。
每个对象有键为dst的,就是我们需要的翻译结果。
我们编写一个方法。获取数组索引为0的,在从对象中获取dst的翻译值并返回
/**
* 将字符串转map再获取value值返回
* @param result
*/
public static String StringToMapValue(String result){
Map<String,Object> map = JSON.parseObject(result, Map.class);
List<Map<String,String>> resul = (List<Map<String, String>>) map.get("trans_result");
String dst = resul.get(0).get("dst");
return dst;
}
完成以上,我们就可以给keyword不同的值就可以翻译我们需要的内容
接口编写
我们接受参数需要翻译的内容。
@ResponseBody
@GetMapping("/get")
public String translateToEn(String keyWord) throws UnsupportedEncodingException {
BaiduTranslate baiduTranslate=null;
String salt = UUID.randomUUID().toString();
String sign=APPID+keyWord+salt+ACCESSTOKEN;
if (keyWord.matches("[a-z ,,.。A-Z]+")){ //如果翻译的内容包含字母和空格,就可以确定用户需要英译汉
baiduTranslate = new BaiduTranslate(URLEncoder.encode(keyWord,"utf-8"), FROM, TO2, APPID, salt, MD5.compile(sign));
}else { //否则汉译英
baiduTranslate = new BaiduTranslate(URLEncoder.encode(keyWord,"utf-8"), FROM, TO, APPID, salt, MD5.compile(sign));
}
String s = HttpUtil.sendGet(URl, baiduTranslate.toString());
return StringToMapValue(s);
// return "index";
}
现在我们只要调用这个接口,传递需要翻译的内容。就可以返回翻译接口。
使用postman测试接口如图,结果正确!!
百度翻译接口联调完成!!!
5、有道翻译API接口的调用。
注册登录并开通翻译服务
- 同样注册并登录有道翻译开放平台(新用户会赠送100元体验金)
- 开通翻译业务,同时我们需要选中语音合成(翻译结果包含语音播报,开通绑定语音合成才能生效)
完成以上,我们也可以得到appid与相应的密钥
同百度翻译,根据需要的参数,我们创建一个参数对象进行封装方便调用接口
参数对象实体类
package com.xjt.demo1.enity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author xu
* @Description
* @createTime 2021年04月16日 14:33:00
*/
@Data
@NoArgsConstructor
public class YouDaoTranslate {
String q;
String from;
String to;
String appKey;
String salt;
String sign;
final String signType="v3";
String curtime;
final String ext="mp3";
String voice;
String vocabId;
public YouDaoTranslate(String q,String from,String to,String appKey,String salt,String sign,String curtime,String voice,String vocabId){ //有vocabId的构造
this.q=q;
this.from=from;
this.to=to;
this.appKey=appKey;
this.salt=salt;
this.sign=sign;
this.curtime=curtime;
this.voice=voice;
this.vocabId=vocabId;
}
public YouDaoTranslate(String q,String from,String to,String appKey,String salt,String sign,String curtime,String voice){ //无vocabId的构造
this.q=q;
this.from=from;
this.to=to;
this.appKey=appKey;
this.salt=salt;
this.sign=sign;
this.curtime=curtime;
this.voice=voice;
}
@Override
public String toString(){ //由于vocabId可能为空,重写toString方法,分情况输出
if (vocabId==null){
return "q="+q+"&" +
"from="+from+"&" +
"to="+to+"&" +
"appKey="+appKey+"&" +
"salt="+salt+"&" +
"sign="+sign+"&" +
"signType="+signType+"&" +
"curtime="+curtime+"&" +
"ext="+ext+"&" +
"voice="+voice;
}else {
return "q="+q+"&" +
"from="+from+"&" +
"to="+to+"&" +
"appKey="+appKey+"&" +
"salt="+salt+"&" +
"sign="+sign+"&" +
"signType="+signType+"&" +
"curtime="+curtime+"&" +
"ext="+ext+"&" +
"voice="+voice+"&" +
"vocabId="+vocabId;
}
}
}
编写有道翻译工具类
package com.xjt.demo1.Utils;
import com.xjt.demo1.enity.YouDaoTranslate;
import java.io.IOException;
import java.util.Date;
import java.util.UUID;
/**
* @author xu
* @Description
* @createTime 2021年04月16日 15:16:00
*/
public class YoudaoTranslateUtil {
private final static String APPKEY="你注册的appid";
private static final String FROM="auto";
private static final String TO="auto";
private static final String ACCESSTOKEN="对应的密钥";
private static final String URL="https://openapi.youdao.com/api";
public static String Translate(String keyword) throws IOException {
String s = UUID.randomUUID().toString();
int secondTimestamp = DataUtil.getSecondTimestamp(new Date());
String sign = Sha256Util.getDigest(APPKEY + keyword + s + secondTimestamp + ACCESSTOKEN);
YouDaoTranslate youDaoTranslate = new YouDaoTranslate(keyword,FROM,TO,APPKEY,s,sign,secondTimestamp+"","0");
String s1 = HttpUtil.sendGetRequest(URL+"?"+youDaoTranslate.toString());
System.out.println(s1);
return s1;
}
}
调用工具类执行结果
响应数据如下
{
"tSpeakUrl":"http://openapi.youdao.com/ttsapi?q=Hello+World&langType=en&sign=B717DFAFC1F497975080A71B9575C6BB&salt=1618818552870&voice=0&format=mp3&appKey=49f34d73d933c8fd&ttsVoiceStrict=false",
"web":[
{
"value":[
"hello world"
],
"key":"你好世界"
},
{
"value":[
"hello world press and key"
],
"key":"你好世界新闻和密钥"
},
{
"value":[
"hello world press and key"
],
"key":"你好世界新闻和关键"
}
],
"requestId":"988638ee-5142-4491-9306-0ff237c7eeff",
"query":"你好世界",
"translation":[
"Hello World"
],
"errorCode":"0",
"dict":{
"url":"yddict://m.youdao.com/dict?le=eng&q=%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C"
},
"webdict":{
"url":"http://mobile.youdao.com/dict?le=eng&q=%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C"
},
"l":"zh-CHS2en",
"isWord":false,
"speakUrl":"http://openapi.youdao.com/ttsapi?q=%E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C&langType=zh-CHS&sign=91ED2256FAAEE45B8264072962F44995&salt=1618818552870&voice=0&format=mp3&appKey=49f34d73d933c8fd&ttsVoiceStrict=false"
}
返回结果对用官网所示。
剩下的,我们只需要从结果中获取我们需要的数据,并返回前端显示。
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。