using Newtonsoft.Json; using POSV.Helper; using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; namespace POSV.Proxy.Translation { public class TranslationProxy { private Tuple TranslationAPI(string values, string type) { try { string url = "http://fanyi.youdao.com/translate"; Dictionary parameters = new Dictionary(); parameters.Add("doctype", "json"); parameters.Add("type", type); parameters.Add("i", values); var _data = JsonConvert.DeserializeObject(HttpGet(string.Format("http://fanyi.youdao.com/translate?doctype=json&type=ZH_CN2EN&i={0}", values).Trim())); // var _data = JsonConvert.DeserializeObject(HttpHelper.Get(url, parameters).Trim()); return new Tuple(true, "", _data); } catch (Exception ex) { return new Tuple(false, "", null); } } /// /// 发起一个HTTP请求(以GET方式) /// /// /// public string HttpGet(string url) { System.Net.WebRequest myWebRequest = System.Net.WebRequest.Create(url); System.Net.WebResponse myWebResponse = myWebRequest.GetResponse(); System.IO.Stream ReceiveStream = myWebResponse.GetResponseStream(); string responseStr = ""; if (ReceiveStream != null) { System.IO.StreamReader reader = new System.IO.StreamReader(ReceiveStream, Encoding.UTF8); responseStr = reader.ReadToEnd(); reader.Close(); } myWebResponse.Close(); return responseStr; } public string ToTranslationString(string values, LanguageTyle languageTyle) { // 原文 string q = values; // 源语言 string from = "zh"; // 目标语言 string to = "en"; // 改成您的APP ID string appId = "20190902000331348"; Random rd = new Random(); string salt = rd.Next(100000).ToString(); // 改成您的密钥 string secretKey = "pTgm3KRWD2CkIqWthIIH"; string sign = EncryptString(appId + q + salt + secretKey); string url = "http://api.fanyi.baidu.com/api/trans/vip/translate?"; url += "q=" + System.Web.HttpUtility.UrlEncode(q); url += "&from=" + from; url += "&to=" + to; url += "&appid=" + appId; url += "&salt=" + salt; url += "&sign=" + sign; System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url); request.Method = "GET"; request.ContentType = "text/html;charset=UTF-8"; request.UserAgent = null; request.Timeout = 6000; System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse(); System.IO.Stream myResponseStream = response.GetResponseStream(); System.IO.StreamReader myStreamReader = new System.IO.StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); string retString = myStreamReader.ReadToEnd(); var _data = JsonConvert.DeserializeObject(retString); return _data.TransResults[0].Dst; //try //{ // var _data = this.TranslationAPI(values, ToLanguageTyleString(languageTyle)); // if (!_data.Item1) // { // return values; // } // return _data.Item3.TranslateResult[0][0].Tgt; //} //catch (Exception) //{ // return values; //} } // 计算MD5值 public static string EncryptString(string str) { MD5 md5 = MD5.Create(); // 将字符串转换成字节数组 byte[] byteOld = Encoding.UTF8.GetBytes(str); // 调用加密方法 byte[] byteNew = md5.ComputeHash(byteOld); // 将加密结果转换为字符串 StringBuilder sb = new StringBuilder(); foreach (byte b in byteNew) { // 将字节转换成16进制表示的字符串, sb.Append(b.ToString("x2")); } // 返回加密的字符串 return sb.ToString(); } private string ToLanguageTyleString(LanguageTyle languageTyle) { switch (languageTyle) { case LanguageTyle.English: return "ZH_CN2EN"; case LanguageTyle.Japanese: return "ZH_CN2JA"; default: return ""; } } } public class TranslateData { private string from; private string to; private List transResults; private string type; private string errorCode; private string elapsedTime; private List> translateResult; [JsonProperty(PropertyName = "translateResult")] public List> TranslateResult { get => translateResult; set => translateResult = value; } [JsonProperty(PropertyName = "type")] public string Type { get => type; set => type = value; } [JsonProperty(PropertyName = "errorCode")] public string ErrorCode { get => errorCode; set => errorCode = value; } [JsonProperty(PropertyName = "elapsedTime")] public string ElapsedTime { get => elapsedTime; set => elapsedTime = value; } [JsonProperty(PropertyName = "trans_result")] public List TransResults { get => transResults; set => transResults = value; } [JsonProperty(PropertyName = "from")] public string From { get => from; set => from = value; } [JsonProperty(PropertyName = "to")] public string To { get => to; set => to = value; } } public class TranslateResult { private string src; private string tgt; [JsonProperty(PropertyName = "src")] public string Src { get => src; set => src = value; } [JsonProperty(PropertyName = "tgt")] public string Tgt { get => tgt; set => tgt = value; } } public class TransResult { private string src; private string dst; [JsonProperty(PropertyName = "src")] public string Src { get => src; set => src = value; } [JsonProperty(PropertyName = "dst")] public string Dst { get => dst; set => dst = value; } } public enum LanguageTyle { /// /// 英语 /// English, /// /// 日语 /// Japanese } }