公众号对接百度翻译API
有时候在公众号中需要对接一些翻译的功能或者其他。最常见的翻译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<String, String> params = buildParams(query, from, to);
return HttpGet.get(TRANS_API_HOST, params);
} private static Map<String, String> buildParams(String query, String from, String to) {
Map<String, String> params = new HashMap<String, String>();
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<String, Object> 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的更多相关文章
- 基于百度翻译API开发属于自己的翻译工具
你是否每天使用着网页翻译工具?你是否遇到过这种情况,上网过程中遇到一个很长的单词但是又不能复制,要开两个浏览器,一个打开百度翻译,照着另一个网页输入单词?你安装了各种翻译软件后,又删除,只因忍受不了那 ...
- 申请百度翻译API
申请百度翻译API 0x00 前期准备 百度账号 md5的相关知识 0x01 进入百度开放平台,登录你的百度账号 找到 产品服务 -> 通用翻译API 0x02 点击下面的立即使用按钮,注册成为 ...
- C# 调用百度翻译Api
这是简单的界面.用的是wpf,winform也可以 具体的操作类 public partial class MainWindow : Window { string url = "" ...
- 复制过来的东西也不靠谱,微信公众号第三方平台的API
API:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&veri ...
- Python 调用百度翻译API
由于实习公司这边做的是日文app,有时要看看用户反馈,对于我这种五十音图都没记住的人,表示百度翻译确实还可以.但不想每次都复制粘贴啊,google被墙也是挺蛋疼的事,所以用python结合baidu ...
- WP8.1小梦词典开发2:百度翻译API使用
原文出自:http://www.bcmeng.com/api2/ 小梦昨天和大家分享了WP8.1金山词霸API使用方法,今天继续分享windows phone 8.1中百度翻译API的使用方法.和昨天 ...
- 原生js简单调用百度翻译API实现的翻译工具
先来个在线demo: js翻译工具 或者百度搜索js简单调用百度翻译API工具(不过有个小小的界面显示bug,我想细心的人应该会发现) 或者直接前往该网址:js翻译工具 或者前往我的github:gi ...
- 公众号对接绑定视频教程<推荐>【申明:来源于网络】
公众号对接绑定视频教程<推荐>[申明:来源于网络] 地址: http://www.456wx.com/bbs/thread-123-1-1.html
- 百度翻译API(C#)
百度翻译开放平台:点击打开链接 1. 定义类用于保存解析json得到的结果 public class Translation { public string Src { get; set; } pub ...
随机推荐
- 让你的项目使用Ts吧
推荐在这里阅读 9012年都过半了,还不会用ts你就out了 why ? 三大框架angular2以后的版本完全是用ts开发的, vue对ts的支持也越来越好, React也有TSX组件 还在犹豫什么 ...
- 「白帽黑客成长记」Windows提权基本原理(下)
上一篇文章我们介绍了信息收集方法和WMIC,今天我们将跟随作者深入学习Windows提权基本原理的内容,希望通过这两篇文章的讲解,大家能够真正掌握这个技能. 推荐阅读:「白帽黑客成长记」Windows ...
- 机器学习之sigmoid函数
先说一下,ML小白. 这是第一次写个人博客类似东西, 主要来说说看 sigmoid 函数,sigmoid函数是机器学习中的一个比较常用的函数,与之类似的还有softplus和softmax等函数, ...
- 修改host指定域名指向ip,Windows脚本与Linux脚本
修改host指定域名指向ip,Windows脚本与Linux脚本 一,Windows系统修改hosts文件 Windows系统下hosts文件位置:C:\Windows\System32\driver ...
- SUSE12-SP2安装教程(虚拟机)
创建虚拟机,安装系统,安装系统后的系统设置 创建虚拟机 将SUSE12-SP2镜像(大于3G)上传到虚拟机主机存储. 创建虚拟机创建虚拟机,CPU>=8核,内存>=16G(注:我这里仅演示 ...
- Mac启动MySQL
启动MySQL服务 sudo /usr/local/Cellar/mysql//bin/mysql.server start 停止MySQL服务 sudo /usr/local/Cellar/mysq ...
- 使用redis实现程序或者服务的高可用
使用redis实现程序或者服务的高可用,就是将某一程序或服务部署在不同服务器上,或者是跨机房部署,当运行服务的服务器挂了之后,其他服务器上的该服务能立马顶上,这里我简单的使用redis实现这一目的. ...
- JS高阶---instanceof
一句话: .
- Sentinel Dashboard 的 Docker 镜像使用
1.下载 docker 镜像:https://hub.docker.com/r/anjia0532/sentinel-docker 2.启动 docker 容器:docker run -p8080:8 ...
- bind 仿造 重写bind
简单版,不带参数 Function.prototype.my_bind = function(targ){ var _this = this; return function(){ _this.app ...