原文:
C# 有道API翻譯 查詢單詞詳細信息
[DataContract]
有道雲官方文檔
有道雲翻譯API簡介:http://ai.youdao.com/docs/doc-trans-api.s#p01
有道雲C#Demo : http://ai.youdao.com/docs/doc-trans-api.s#p08
查詢單詞信息
在有道雲的Demo中,已經很完整的給出了相應的代碼~
但是針對是的英-漢等翻譯,如何只查詢單個單詞的詳細信息,包含單詞的翻譯/音標/釋義等?例如下圖示例信息:
下面修改后封裝的查詢單詞詳細信息服務(僅供參考):
1 /// <summary> 2 /// 有道詞典API 3 /// </summary> 4 internal class YouDaoApiService 5 { 6 const string AppKey = "131b76a4ee1ecd13";//AppKey和AppSecret是本人@Winter申請的賬號,僅供測試使用 7 const string LangEn = "en"; 8 const string AppSecret = "KX9hLrgSMhfKkvIqS6nhwtwMcRymJqEA"; 9 10 public static async Task<YouDaoTranslationResponse> GetTranslatioAsync(string queryText, string from = LangEn, string to = LangEn) 11 { 12 var requestUrl = GetRequestUrl(queryText, from, to); 13 14 WebRequest translationWebRequest = WebRequest.Create(requestUrl); 15 16 var response = await translationWebRequest.GetResponseAsync(); 17 18 using (Stream stream = response.GetResponseStream()) 19 { 20 using (StreamReader reader = new StreamReader(stream ?? throw new InvalidOperationException("有道Api查詢出錯!"), Encoding.GetEncoding("utf-8"))) 21 { 22 string result = reader.ReadToEnd(); 23 var youDaoTranslationResponse = JsonConvert.DeserializeObject<YouDaoTranslationResponse>(result); 24 25 return youDaoTranslationResponse; 26 } 27 } 28 } 29 30 private static string GetRequestUrl(string queryText, string from, string to) 31 { 32 string salt = DateTime.Now.Millisecond.ToString(); 33 34 MD5 md5 = new MD5CryptoServiceProvider(); 35 string md5Str = AppKey + queryText + salt + AppSecret; 36 byte[] output = md5.ComputeHash(Encoding.UTF8.GetBytes(md5Str)); 37 string sign = BitConverter.ToString(output).Replace("-", ""); 38 39 var requestUrl = string.Format( 40 "http://openapi.youdao.com/api?appKey={0}&q={1}&from={2}&to={3}&sign={4}&salt={5}", 41 AppKey, 42 HttpUtility.UrlDecode(queryText, System.Text.Encoding.GetEncoding("UTF-8")), 43 from, to, sign, salt); 44 45 return requestUrl; 46 } 47 }
注:值得一提的是,查詢單詞信息,en->en路徑有道提供的數據不完整,會返回301錯誤碼。聯系有道開發后,提供的方案是auto->zhs。
序列化解析的數據類:

public class YouDaoTranslationResponse
{
[DataMember(Name = "errorCode")]
public string ErrorCode { get; set; }
[DataMember(Name = "query")]
public string QueryText { get; set; }
[DataMember(Name = "speakUrl")]
public string InputSpeakUrl { get; set; }
[DataMember(Name = "tSpeakUrl")]
public string TranslationSpeakUrl { get; set; }
/// <summary>
/// 首選翻譯
/// </summary>
[DataMember(Name = "translation")]
public List<string> FirstTranslation { get; set; }
/// <summary>
/// 基本釋義
/// </summary>
[DataMember(Name = "basic")]
public TranslationBasicData BasicTranslation { get; set; }
///// <summary>
///// 網絡釋義,該結果不一定存在,暫時不使用
///// </summary>
//[DataMember(Name = "web")]
//public TranslationWebData WebTranslation { get; set; }
}
/// <summary>
/// 基本釋義
/// </summary>
[DataContract]
public class TranslationBasicData
{
[DataMember(Name = "phonetic")]
public string Phonetic { get; set; }
/// <summary>
/// 英式發音
/// </summary>
[DataMember(Name = "uk-phonetic")]
public string UkPhonetic { get; set; }
/// <summary>
/// 美式發音
/// </summary>
[DataMember(Name = "us-phonetic")]
public string UsPhonetic { get; set; }
/// <summary>
/// 翻譯
/// </summary>
[DataMember(Name = "explains")]
public List<string> Explains { get; set; }
}
/// <summary>
/// 網絡釋義
/// </summary>
[DataContract]
public class TranslationWebData
{
[DataMember(Name = "key")]
public string Key { get; set; }
[DataMember(Name = "value")]
public List<string> Explains { get; set; }
}
分類:
.NET-C#學習
有道雲官方文檔
有道雲翻譯API簡介:http://ai.youdao.com/docs/doc-trans-api.s#p01
有道雲C#Demo : http://ai.youdao.com/docs/doc-trans-api.s#p08
查詢單詞信息
在有道雲的Demo中,已經很完整的給出了相應的代碼~
但是針對是的英-漢等翻譯,如何只查詢單個單詞的詳細信息,包含單詞的翻譯/音標/釋義等?例如下圖示例信息:
下面修改后封裝的查詢單詞詳細信息服務(僅供參考):
1 /// <summary> 2 /// 有道詞典API 3 /// </summary> 4 internal class YouDaoApiService 5 { 6 const string AppKey = "131b76a4ee1ecd13";//AppKey和AppSecret是本人@Winter申請的賬號,僅供測試使用 7 const string LangEn = "en"; 8 const string AppSecret = "KX9hLrgSMhfKkvIqS6nhwtwMcRymJqEA"; 9 10 public static async Task<YouDaoTranslationResponse> GetTranslatioAsync(string queryText, string from = LangEn, string to = LangEn) 11 { 12 var requestUrl = GetRequestUrl(queryText, from, to); 13 14 WebRequest translationWebRequest = WebRequest.Create(requestUrl); 15 16 var response = await translationWebRequest.GetResponseAsync(); 17 18 using (Stream stream = response.GetResponseStream()) 19 { 20 using (StreamReader reader = new StreamReader(stream ?? throw new InvalidOperationException("有道Api查詢出錯!"), Encoding.GetEncoding("utf-8"))) 21 { 22 string result = reader.ReadToEnd(); 23 var youDaoTranslationResponse = JsonConvert.DeserializeObject<YouDaoTranslationResponse>(result); 24 25 return youDaoTranslationResponse; 26 } 27 } 28 } 29 30 private static string GetRequestUrl(string queryText, string from, string to) 31 { 32 string salt = DateTime.Now.Millisecond.ToString(); 33 34 MD5 md5 = new MD5CryptoServiceProvider(); 35 string md5Str = AppKey + queryText + salt + AppSecret; 36 byte[] output = md5.ComputeHash(Encoding.UTF8.GetBytes(md5Str)); 37 string sign = BitConverter.ToString(output).Replace("-", ""); 38 39 var requestUrl = string.Format( 40 "http://openapi.youdao.com/api?appKey={0}&q={1}&from={2}&to={3}&sign={4}&salt={5}", 41 AppKey, 42 HttpUtility.UrlDecode(queryText, System.Text.Encoding.GetEncoding("UTF-8")), 43 from, to, sign, salt); 44 45 return requestUrl; 46 } 47 }
注:值得一提的是,查詢單詞信息,en->en路徑有道提供的數據不完整,會返回301錯誤碼。聯系有道開發后,提供的方案是auto->zhs。
序列化解析的數據類:

分類:
.NET-C#學習