百度翻譯API(C#)

百度翻譯開放平臺:點擊打開連接json

1. 定義類用於保存解析json獲得的結果api

public class Translation
{
    public string Src { get; set; }
    public string Dst { get; set; }
}

public class TranslationResult
{
    //錯誤碼,翻譯結果沒法正常返回
    public string Error_code { get; set; }
    public string Error_msg { get; set; }
    public string From { get; set; }
    public string To { get; set; }
    public string Query { get; set; }
    //翻譯正確,返回的結果
    //這裏是數組的緣由是百度翻譯支持多個單詞或多段文本的翻譯,在發送的字段q中用換行符(\n)分隔
    public Translation[] Trans_result { get; set; }
}

2. 定義枚舉保存一些經常使用語言數組

public enum Language
{
    //百度翻譯API官網提供了多種語言,這裏只列了幾種
    auto = 0,
    zh = 1,
    en = 2,
    cht = 3,
}

3. 由於百度翻譯要求對發送數據中的一部分作md加密,因此這裏給出對字符串作md5加密的函數app

//對字符串作md5加密
private static string GetMD5WithString(string input)
{
    if (input == null)
    {
        return null;
    }
    MD5 md5Hash = MD5.Create();
    //將輸入字符串轉換爲字節數組並計算哈希數據  
    byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
    //建立一個 Stringbuilder 來收集字節並建立字符串  
    StringBuilder sBuilder = new StringBuilder();
    //循環遍歷哈希數據的每個字節並格式化爲十六進制字符串  
    for (int i = 0; i < data.Length; i++)
    {
        sBuilder.Append(data[i].ToString("x2"));
    }
    //返回十六進制字符串  
    return sBuilder.ToString();
}

4. 調用百度翻譯API的函數。記得去申請appiddom

/// <summary>
/// 調用百度翻譯API進行翻譯
/// 詳情可參考http://api.fanyi.baidu.com/api/trans/product/apidoc
/// </summary>
/// <param name="q">待翻譯字符</param>
/// <param name="from">源語言</param>
/// <param name="to">目標語言</param>
/// <returns></returns>
private static TranslationResult GetTranslationFromBaiduFanyi(string q, Language from, Language to)
{
    //能夠直接到百度翻譯API的官網申請
    //必定要去申請,否則程序的翻譯功能不能使用
    string appId = "0123456789";
    string password = "0123456789";

    string jsonResult = String.Empty;
    //源語言
    string languageFrom = from.ToString().ToLower();
    //目標語言
    string languageTo = to.ToString().ToLower();
    //隨機數
    string randomNum = System.DateTime.Now.Millisecond.ToString();
    //md5加密
    string md5Sign = GetMD5WithString(appId + q + randomNum + password);
    //url
    string url = String.Format("http://api.fanyi.baidu.com/api/trans/vip/translate?q={0}&from={1}&to={2}&appid={3}&salt={4}&sign={5}",
        HttpUtility.UrlEncode(q, Encoding.UTF8),
        languageFrom,
        languageTo,
        appId,
        randomNum,
        md5Sign
        );
    WebClient wc = new WebClient();
    try
    {
        jsonResult = wc.DownloadString(url);
    }
    catch
    {
        jsonResult = string.Empty;
    }
    //解析json
    JavaScriptSerializer jss = new JavaScriptSerializer();
    TranslationResult result = jss.Deserialize<TranslationResult>(jsonResult);
    return result;
}

5. 對獲取的翻譯結果進行提取函數

/// <summary>
/// 將中文翻譯爲英文
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
public static string translation(string source)
{
    TranslationResult result = GetTranslationFromBaiduFanyi(source, Language.zh, Language.en);
    //判斷是否出錯
    if(result.Error_code == null)
    {
        return result.Trans_result[0].Dst;
    }
    else
    {
        //檢查appid和密鑰是否正確
        return "翻譯出錯,錯誤碼:" + result.Error_code + ",錯誤信息:" + result.Error_msg;
    }
}
相關文章
相關標籤/搜索