You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

196 lines
7.2 KiB
C#

9 months ago
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<bool, string, TranslateData> TranslationAPI(string values, string type)
{
try
{
string url = "http://fanyi.youdao.com/translate";
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters.Add("doctype", "json");
parameters.Add("type", type);
parameters.Add("i", values);
var _data = JsonConvert.DeserializeObject<TranslateData>(HttpGet(string.Format("http://fanyi.youdao.com/translate?doctype=json&type=ZH_CN2EN&i={0}", values).Trim()));
// var _data = JsonConvert.DeserializeObject<TranslateData>(HttpHelper.Get(url, parameters).Trim());
return new Tuple<bool, string, TranslateData>(true, "", _data);
}
catch (Exception ex)
{
return new Tuple<bool, string, TranslateData>(false, "", null);
}
}
/// <summary>
/// 发起一个HTTP请求以GET方式
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
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<TranslateData>(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<TransResult> transResults;
private string type;
private string errorCode;
private string elapsedTime;
private List<List<TranslateResult>> translateResult;
[JsonProperty(PropertyName = "translateResult")]
public List<List<TranslateResult>> 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<TransResult> 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
{
/// <summary>
/// 英语
/// </summary>
English,
/// <summary>
/// 日语
/// </summary>
Japanese
}
}