标签:gty ace MIXED 入参 common eal and set 公众
有时候在公众号中需要对接一些翻译的功能或者其他。最常见的翻译API就是中英互译,程序员用的最多的也就是中译英。
1.到百度翻译官网申请账号
http://api.fanyi.baidu.com/api/trans/product/desktop
登录之后就选择需要开通的服务。到http://api.fanyi.baidu.com/api/trans/product/apichoose 页面可以选择开通的服务。比如我已开通的服务:
开通的时候可以选择版本,对于我个人用户来说开通一个标准版就可以了,标准版享有的权限为: 可不限调用字符量免费使用(QPS为1,Queries-per-second 也就是每秒钟1次)。
也可以到管理控制台查看自己开通的服务以及版本,最关心的就是版本。标准版是免费的。
2. 接下来以官方的例子运行即可
http://api.fanyi.baidu.com/api/trans/product/apidoc#joinFile
官方例子的入口类如下:
package cn.qlq.utils.baidutranslate;
public class Main {
// 在平台申请的APP_ID 详见
// http://api.fanyi.baidu.com/api/trans/product/desktop?req=developer
private static final String APP_ID = "";
private static final String SECURITY_KEY = "";
public static void main(String[] args) {
TransApi api = new TransApi(APP_ID, SECURITY_KEY);
String query = "you are my son!";
System.out.println(api.getTransResult(query, "auto", "auto"));
}
}
注释也说了从网站可以获取自己的APP_ID和SECURITY_KEY,需要两个参数就可以接口调用。
更换上面两个参数之后测试结果如下:
{"from":"en","to":"zh","trans_result":[{"src":"you are my son!","dst":"\u4f60\u662f\u6211\u7684\u513f\u5b50\uff01"}]}
文档对接口的解释如下:(经过自己测试from和to都可以设为auto,默认是中英或英中互译)
输入参数:
字段名 |
类型 |
必填参数 |
描述 |
备注 |
q |
TEXT |
Y |
请求翻译query |
UTF-8编码 |
from |
TEXT |
Y |
翻译源语言 |
语言列表(可设置为auto) |
to |
TEXT |
Y |
译文语言 |
语言列表(不可设置为auto) |
appid |
TEXT |
Y |
APP ID |
可在管理控制台查看 |
salt |
TEXT |
Y |
随机数 |
|
sign |
TEXT |
Y |
签名 |
appid+q+salt+密钥 的MD5值 |
以下字段仅开通了词典、TTS者需填写 |
tts |
STRING |
N |
是否显示语音合成资源 |
tts=0显示,tts=1不显示 |
dict |
STRING |
N |
是否显示词典资源 |
dict=0显示,dict=1不显示 |
返回结果是JSON格式 的数据,参数如下:
字段名 |
类型 |
描述 |
备注 |
from |
TEXT |
翻译源语言 |
返回用户指定的语言,或自动检测的语言(源语言设为auto时) |
to |
TEXT |
译文语言 |
返回用户指定的目标语言 |
trans_result |
MIXED LIST |
翻译结果 |
返回翻译结果,包含src 和 dst 字段。 |
src |
TEXT |
原文 |
|
dst |
TEXT |
译文 |
|
error_code |
Int32 |
错误码 |
仅当出现错误时显示 |
以下字段仅开通词典、TTS资源者可见 |
src_tts |
|
原文tts |
mp3格式,暂时无法指定发音 |
dst_tts |
|
译文tts |
mp3格式,暂时无法指定发音 |
dict |
|
中英词典资源 |
返回中文或英文词典资源,包含音标、简明释义等内容 |
支持的语言列表如下:
源语言语种不确定时可设置为 auto,目标语言语种不可设置为auto。但对于非常用语种,语种自动检测可能存在误差。
语言简写 |
名称 |
auto |
自动检测 |
zh |
中文 |
en |
英语 |
yue |
粤语 |
wyw |
文言文 |
jp |
日语 |
kor |
韩语 |
fra |
法语 |
spa |
西班牙语 |
th |
泰语 |
ara |
阿拉伯语 |
ru |
俄语 |
pt |
葡萄牙语 |
de |
德语 |
it |
意大利语 |
el |
希腊语 |
nl |
荷兰语 |
pl |
波兰语 |
bul |
保加利亚语 |
est |
爱沙尼亚语 |
dan |
丹麦语 |
fin |
芬兰语 |
cs |
捷克语 |
rom |
罗马尼亚语 |
slo |
斯洛文尼亚语 |
swe |
瑞典语 |
hu |
匈牙利语 |
cht |
繁体中文 |
vie |
越南语 |
3. 接下来编写为工具类对接微信公众号
修改TransApi类为翻译的入口类,静态方法提供翻译
package cn.qlq.utils.baidutranslate;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSONObject;
public class TransApi {
private static final String TRANS_API_HOST = "http://api.fanyi.baidu.com/api/trans/vip/translate";
// 在平台申请的APP_ID 详见
// http://api.fanyi.baidu.com/api/trans/product/desktop?req=developer
private static final String APP_ID = "yourId";
private static final String SECURITY_KEY = "yourKey";
public static String translate(String keyWords) {
return translate(keyWords, "auto", "auto");
}
public static String translate(String keyWords, String from, String to) {
String transResult = getTransResult(keyWords, from, to);
if (StringUtils.isBlank(transResult)) {
return "";
}
JSONObject parseObject = JSONObject.parseObject(transResult);
if (parseObject != null && parseObject.containsKey("trans_result") && parseObject.get("trans_result") != null) {
return parseObject.get("trans_result").toString();
}
return "";
}
private static String getTransResult(String query, String from, String to) {
Map params = buildParams(query, from, to);
return HttpGet.get(TRANS_API_HOST, params);
}
private static Map buildParams(String query, String from, String to) {
Map params = new HashMap();
params.put("q", query);
params.put("from", from);
params.put("to", to);
params.put("appid", APP_ID);
// 随机数
String salt = String.valueOf(System.currentTimeMillis());
params.put("salt", salt);
// 签名
String src = APP_ID + query + salt + SECURITY_KEY; // 加密前的原文
params.put("sign", MD5.md5(src));
return params;
}
}
修改公众号处理文字消息处理翻译信息:修改前面MessageHandler的处理文字消息的方法,如下:(如果接受到的消息是以翻译开始就代表是想翻译句子,将开头的翻译替换掉之后进行翻译)
/**
* 处理文本消息
*
* @param message
* @return
*/
private static AbstractResponseMessage handleTextMessage(Map message) {
TextMessage textMessage = BeanUtils.map2Bean(message, TextMessage.class, true);
String content = textMessage.getContent();
// 可以根据文本消息去查库或者进行其他操作
if (StringUtils.isNotBlank(content)) {
System.out.println("您接收到的文本消息内容为: " + content);
}
// 设置回传的消息内容
TextResponseMessage responseMessage = new TextResponseMessage();
responseMessage.setContent("服务器已接收到您的消息,内容为: " + content);
responseMessage.setCreateTime(new Date().getTime());
responseMessage.setFromUserName(textMessage.getToUserName());
responseMessage.setToUserName(textMessage.getFromUserName());
responseMessage.setMsgType(MESSAGE_TEXT);
// 如果文字消息以翻译开头调用百度API翻译
if (StringUtils.startsWith(content, "翻译")) {
String translateResult = TransApi.translate(content.replaceAll("^翻译", ""));
translateResult = StringUtils.defaultIfBlank(translateResult, "未正确翻译");
responseMessage.setContent(translateResult);
}
return responseMessage;
}
微信测试结果如下:
公众号对接百度翻译API
标签:gty ace MIXED 入参 common eal and set 公众
原文地址:https://www.cnblogs.com/qlqwjy/p/11766676.html