公衆號對接百度翻譯API

  有時候在公衆號中須要對接一些翻譯的功能或者其餘。最多見的翻譯API就是中英互譯,程序員用的最多的也就是中譯英。java

1.到百度翻譯官網申請帳號  

 http://api.fanyi.baidu.com/api/trans/product/desktop程序員

  登陸以後就選擇須要開通的服務。到http://api.fanyi.baidu.com/api/trans/product/apichoose 頁面能夠選擇開通的服務。好比我已開通的服務:apache

 

  開通的時候能夠選擇版本,對於我我的用戶來講開通一個標準版就能夠了,標準版享有的權限爲: 可不限調用字符量無償使用(QPS爲1,Queries-per-second 也就是每秒鐘1次)。json

 

  也能夠到管理控制檯查看本身開通的服務以及版本,最關心的就是版本。標準版是免費的。c#

 

2. 接下來以官方的例子運行便可

  http://api.fanyi.baidu.com/api/trans/product/apidoc#joinFileapi

官方例子的入口類以下:服務器

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,須要兩個參數就能夠接口調用。微信

更換上面兩個參數以後測試結果以下:app

{"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;
    }

微信測試結果以下:

相關文章
相關標籤/搜索