| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 | 
							- namespace OASystem.API.OAMethodLib.YouDaoAPI
 
- {
 
-     /// <summary>
 
-     /// 有道API Tools
 
-     /// </summary>
 
-     public static class YouDaoApiTools
 
-     {
 
-         private static readonly HttpClient _httpClient = new() { BaseAddress = new Uri("https://openapi.youdao.com") };
 
-         //private static readonly IHttpClientFactory _httpClientFactory;
 
-         private static readonly string _appKey = "0fe3bc01e109ed36";    //应用ID
 
-         private static readonly string _appSecret = "1f2x9TrqJfSBEJ8iH9GEFGgTyaYGjEry"; //应用密钥
 
-         #region OCR 调用翻译
 
-         public static async Task<string> GetOCR_ReTrans(string txt)
 
-         {
 
-             var data = await GetReTrans(txt);
 
-             string str;
 
-             if (data == null && data.Code != 0)
 
-                 str = txt;
 
-             else
 
-                 str = data.Data as string;
 
-             return str;
 
-         }
 
-         #endregion
 
-         /// <summary>
 
-         /// 有道翻译
 
-         /// 默认 中=>英
 
-         /// </summary>
 
-         /// <param name="txt">待翻译的文本</param>
 
-         /// <param name="from">源语言</param>
 
-         /// <param name="to">目标语言</param>
 
-         /// <returns></returns>
 
-         public static async Task<Result> GetReTrans(string txt, string from = "zh-CHS", string to = "en")
 
-         {
 
-             var result = new Result();
 
-             #region MyRegion
 
-             if (string.IsNullOrEmpty(txt))
 
-             {
 
-                 result.Msg = "待翻译文本为空!";
 
-                 return result;
 
-             }
 
-             #endregion
 
-             string url = string.Format("/api");
 
-             #region 请求参数处理
 
-             string q = txt;
 
-             //input的计算方式为:input=q前10个字符 + q长度 + q后10个字符(当q长度大于20)或 input=q字符串(当q长度小于等于20);
 
-             string input = q.Length <= 20 ? q : q.Substring(0, 10) + q.Length + q.Substring(q.Length - 10, 10);
 
-             string salt = DateTime.Now.Millisecond.ToString();
 
-             string curtime = GetUTCTime(true).ToString(); //UTC秒时间戳
 
-             //sign = sha256(应用ID + input + salt + curtime + 应用密钥);
 
-             string signStr = string.Format("{0}{1}{2}{3}{4}", _appKey, input, salt, curtime, _appSecret);
 
-             string sign = SHA256EncryptString(signStr);
 
-             #endregion
 
-             var reqData = new FormUrlEncodedContent(
 
-                             new List<KeyValuePair<string, string>>()
 
-                             {
 
-                                 //new("q",System.Web.HttpUtility.UrlEncode(q, Encoding.UTF8)),//待翻译文本  必须是UTF-8编码
 
-                                 new("q",q),             //待翻译文本  必须是UTF-8编码
 
-                                 new("from",from),       //源语言
 
-                                 new("to",to),           //目标语言
 
-                                 new("appKey",_appKey),  //应用ID
 
-                                 new("salt",salt),       //UUID
 
-                                 new("sign",sign),       //签名 
 
-                                 new("signType","v3"),   //签名类型
 
-                                 new("curtime",curtime), //TUC 时间戳
 
-                             });
 
-             var reTransReq = await _httpClient.PostAsync(url, reqData);
 
-             if (reTransReq.IsSuccessStatusCode)
 
-             {
 
-                 var strResponse = await reTransReq.Content.ReadAsStringAsync();
 
-                 var strResponse1 = System.Web.HttpUtility.UrlDecode(strResponse, System.Text.Encoding.UTF8);
 
-                 var trans = JsonConvert.DeserializeObject<dynamic>(strResponse1);
 
-                 string errorCode = trans["errorCode"].ToString();
 
-                 if (errorCode == "0")
 
-                 {
 
-                     result.Code = 0;
 
-                     var translation = JsonConvert.DeserializeObject<List<string>>(trans["translation"].ToString());
 
-                     result.Msg = string.Format(@"成功!");
 
-                     result.Data = translation[0];
 
-                 }
 
-                 else
 
-                 {
 
-                     result.Msg = string.Format(@"有道翻译API [Error:{0}]", errorCode);
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 result.Msg = "接口请求失败!";
 
-             }
 
-             return result;
 
-         }
 
-         #region SHA256加密
 
-         /// <summary>
 
-         /// SHA256加密
 
-         /// </summary>
 
-         /// <param name="data"></param>
 
-         public static string SHA256EncryptString(string data)
 
-         {
 
-             byte[] bytes = Encoding.UTF8.GetBytes(data);
 
-             byte[] hash = SHA256.Create().ComputeHash(bytes);
 
-             StringBuilder builder = new StringBuilder();
 
-             for (int i = 0; i < hash.Length; i++)
 
-             {
 
-                 builder.Append(hash[i].ToString("x2"));
 
-             }
 
-             return builder.ToString();
 
-         }
 
-         /// <summary>
 
-         /// SHA256加密
 
-         /// </summary>
 
-         /// <param name="StrIn">待加密字符串</param>
 
-         /// <returns>加密数组</returns>
 
-         public static Byte[] SHA256EncryptByte(string StrIn)
 
-         {
 
-             using var sha256 = SHA256.Create();
 
-             var Asc = new ASCIIEncoding();
 
-             var tmpByte = Asc.GetBytes(StrIn);
 
-             var EncryptBytes = sha256.ComputeHash(tmpByte);
 
-             return EncryptBytes;
 
-         }
 
-         #endregion
 
-         #region UTC时间戳
 
-         /// <summary>
 
-         /// 获取utc时间
 
-         /// </summary>
 
-         /// <param name="type">true 秒 flase 毫秒</param>
 
-         /// <returns></returns>
 
-         public static long GetUTCTime(bool type)
 
-         {
 
-             TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
 
-             return type ? Convert.ToInt64(ts.TotalSeconds) : Convert.ToInt64(ts.TotalMilliseconds);
 
-         }
 
-         ///// <summary>
 
-         ///// 将当前时间戳转换至Datetime
 
-         ///// </summary>
 
-         ///// <param name="timeStamp"></param>
 
-         ///// <returns></returns>
 
-         //public static DateTime ConvertUTCToDateTime(long timeStamp)
 
-         //{
 
-         //    DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); // 当地时区
 
-         //    DateTime dt = startTime.AddSeconds(timeStamp);
 
-         //    return dt;
 
-         //}
 
-         ///// <summary>
 
-         ///// 把datetime转utc时间戳
 
-         ///// </summary>
 
-         ///// <param name="time"></param>
 
-         ///// <returns></returns>
 
-         //public static int ConvertDateTimeToUTC(DateTime time)
 
-         //{
 
-         //    double intResult = 0;
 
-         //    DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
 
-         //    intResult = (time - startTime).TotalSeconds;
 
-         //    return (int)intResult;
 
-         //}
 
-         #endregion
 
-     }
 
- }
 
 
  |