公众号对接百度翻译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 ...
随机推荐
- E203 同步fifo
1. 输入端, 输入信号, i_vld,表示输入请求写同步fifo,如果fifo不满,则fifo发送i_rdy 到输入端,开始写fifo.i_vld和i_rdy是写握手信号. 2.输出端 o_rdy表 ...
- maven的配置及基本操作
---恢复内容开始--- 1.官网下载maven 官方网址:http://maven.aparche.org 2.将maven解压到硬盘(最好没有中文路径)下 3.配置maven环境变量 4.配置m ...
- odoo10学习笔记十三:qweb报表
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189336.html 一:概述 报表是使用qweb定义的,报表的pdf导出是使用wkhtmltopdf来完 ...
- GIC , SPI , PPI (窝窝科技的文章题目改了下)【转】
转自:https://www.cnblogs.com/tureno/articles/6403408.html 转载于: http://www.wowotech.net/irq_subsystem/ ...
- Oracle告Google输了
Oracle告Google输了 boxi • 2016-05-27 • 大公司 Google表示,陪审团的认定代表了Android生态体系.Java开发社区以及依靠开放免费编程语言开发创新消费者产品的 ...
- Eclipse分享和检出(六)
一.创建资源库位置 1. 切换到透视图 SVN 资源库:Window--Show View--Other,搜索“SVN资源库” 2. 创建资源库位置,右键--新建--资源库位置 3. 输入可用的版 ...
- 实现一个new操作符
new 操作符做了这些事: 1.它创建了一个全新的对象: 2.它会被执行[[Prototype]](也就是__proto__)链接: 3.它使this指向新创建的对象: 4.通过new创建的每个对象最 ...
- fft.ntt,生成函数,各种数和各种反演
前置知识: 一,导数 倒数其实就是函数的斜率函数 设D[f(x)]表示f(x)的导数,则满足 $$1,D[f(x)]=\lim\limits_{\delta x->\infty}\frac{f( ...
- MySQL实战45讲学习笔记:第十八讲
一.引子 在 MySQL 中,有很多看上去逻辑相同,但性能却差异巨大的 SQL 语句.对这些语句使用不当的话,就会不经意间导致整个数据库的压力变大. 我今天挑选了三个这样的案例和你分享.希望再遇到相似 ...
- [LeetCode] 4. Median of Two Sorted Arrays 两个有序数组的中位数
There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...