公众号对接百度翻译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;
    }

微信测试结果如下:

原文地址:https://www.cnblogs.com/qlqwjy/p/11766676.html

时间: 2024-08-10 04:46:45

公众号对接百度翻译API的相关文章

基于百度翻译API开发属于自己的翻译工具

你是否每天使用着网页翻译工具?你是否遇到过这种情况,上网过程中遇到一个很长的单词但是又不能复制,要开两个浏览器,一个打开百度翻译,照着另一个网页输入单词?你安装了各种翻译软件后,又删除,只因忍受不了那每次弹出来的广告?其实我们想要的就是简单的翻译一个单词.今天就来使用百度翻译开放API,做一个属于自己的翻译工具,只有简单的翻译功能,至于外观自己根据自己的爱好,想做成什么样就做成什么样,终于可以任性一回了~~ 下面先来看一下词典效果:  一.百度翻译API简介 百度翻译可以通过HTTP访问,返回J

百度翻译APi接口实现

案例使用百度翻译API接口,实现文本翻译 为保证翻译质量,请将单次请求长度控制在 6000 bytes以内.(汉字约为2000个) 签名生成方法如下: 1.将请求参数中的 APPID(appid), 翻译query(q, 注意为UTF-8编码), 随机数(salt), 以及平台分配的密钥(可在管理控制台查看) 按照 appid+q+salt+密钥 的顺序拼接得到字符串1. 2.对字符串1做md5,得到32位小写的sign. 注意: 1.请先将需要翻译的文本转换为UTF-8编码 2.在发送HTTP

复制过来的东西也不靠谱,微信公众号第三方平台的API

API:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318587&lang=zh_CN 获取(刷新)授权公众号的令牌 该API用于在授权方令牌(authorizer_access_token)失效时,可用刷新令牌(authorizer_refresh_token)获取新的令牌. 接口调用请求说明 http请求方式

php处理json码 实例:PHP实现百度翻译API调用处理

今天给一个小程序写后台,通过调用百度翻译API实现翻译功能. 调用百度API的url为'http://openapi.baidu.com/public/2.0/translate/dict/simple?client_id=你的KEY&q=要查的汉语&from=zh&to=en'; 申请步骤详见点击打开链接 以上是前期准备工作 ==============================================================================

百度翻译API

1 #/usr/bin/env python3 2 #coding=utf8 3 4 """百度翻译api功能实现函数,本模块基于Python3.x实现,getTransResult(q)中参数q是需被翻译的内容,目前该函数的源语言默认英文,目标语言默认简体中文""" 5 6 7 import http.client 8 import hashlib 9 import urllib 10 import random 11 import demjs

WP8.1小梦词典开发2:百度翻译API使用

原文出自:http://www.bcmeng.com/api2/ 小梦昨天和大家分享了WP8.1金山词霸API使用方法,今天继续分享windows phone 8.1中百度翻译API的使用方法.和昨天一样首先我们需要申请百度翻译API的Key: 百度翻译API的Key的申请: 进入 http://developer.baidu.com/ 需要一个百度账号,注册登陆后. 点击右上方的  管理服务台 ,选择开发者服务管理,进入口,选择创建工程就可以.创建工程完成后,你就可以拿到你的Key.和金山词霸

C# 调用百度翻译Api

这是简单的界面.用的是wpf,winform也可以 具体的操作类 public partial class MainWindow : Window { string url = ""; public MainWindow() { InitializeComponent(); this.cbxTranslateChange.SelectedIndex = 0; } private TranClass tranClass = new TranClass(); private void bt

【Python】Python的urllib、urllib2模块调用“百度翻译”API进行批量自动翻译

1.问题描述 在文本数据处理时,经常回出现文本中各种语言的混杂情况,包括:英文.日语.俄语.法语等,需要将不同语种的语言批量翻译成中文进行处理.可以通过Python直接调用百度提供的翻译API进行批量的翻译. 百度翻译API详细文档见:百度翻译API文档 2.问题解决 开发环境:Linux 将文本中的中文和非中文进行分离,对非中文的部分进行翻译. Python的代码如下:translate.py #!/usr/bin/python #-*- coding:utf-8 -*- import sys

Python 调用百度翻译API

由于实习公司这边做的是日文app,有时要看看用户反馈,对于我这种五十音图都没记住的人,表示百度翻译确实还可以.但不想每次都复制粘贴啊,google被墙也是挺蛋疼的事,所以用python结合baidu api 整了一下,和大家分享. 1.百度翻译api 由于百度翻译api需要用到API key,所以,得注册百度开发者账号,然后创建开发者服务工程,得到的授权API key,具体操作可查看官方文档,请点 百度翻译api 2.代码实现  基本思路是:先将用户反馈抓下来,然后再处理html标签,再调用百度