private static readonly string key = "2gH17Xp3c1L4jkBp8bQl"; // 密钥 /// <summary> /// 百度翻译 /// </summary> /// <param name="text">要翻译的文本</param> /// <param name="from">源语言 例如 en 更多简写参考 http://api.fanyi.baidu.com/api/trans/product/apidoc </param> /// <param name="to">目标语言 例如 zh</param> /// <returns></returns> public static string Translate(string text, string from, string to) { string result = text; if (string.IsNullOrWhiteSpace(text) || string.IsNullOrWhiteSpace(from) || string.IsNullOrWhiteSpace(to)) { return(result); } string body = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(text)); string salt = "1"; // 随机数 string sign = MD5Util.Md5(string.Concat(appid, body, salt, key)); // 签名 body = HttpUtility.UrlEncode(body); // 生成签名之后,发送HTTP请求之前 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}", body, from.ToLower(), to.ToLower(), appid, salt, sign.ToLower()); ReqeustResult reqeustResult = HttpRequestHelper.Request(url, new RequestData() { Method = RequestMethods.Get }); //根据API返回的Json格式 构建匿名对象 var obj = new { from = "", to = "", trans_result = new[] { new { src = "", dst = "" } } }; var baiduTransResult = JsonConvert.DeserializeAnonymousType(reqeustResult.Html, obj); //判断是否正确的返回翻译结果 if (baiduTransResult.trans_result != null) { result = baiduTransResult.trans_result[0].dst; } return(result); }
/// <summary> /// 最新Google翻译 /// add by Yang 2016年12月23日13:19:05 /// https://cloud.google.com/translate/docs/reference/rest#query_parameters /// </summary> /// <param name="sourceText">需要翻译的文本</param> /// <param name="sourceLanguageCode">输入语言 选填,https://cloud.google.com/translate/docs/languages </param> /// <param name="targetLanguageCode">输出语言 必填,https://cloud.google.com/translate/docs/languages </param> /// <returns></returns> private static string GoogleTranslate(string sourceText, string sourceLanguageCode, string targetLanguageCode) { StringBuilder sb = new StringBuilder(); string targetText = string.Empty; if (string.IsNullOrEmpty(sourceText)) { return(targetText); } const string URL = "https://translation.googleapis.com/language/translate/v2?key={0}&source={1}&target={2}&q="; //sourceLanguageCode 暂时固定写死为en modify by Yang 2017年9月4日10:52:08 string url = string.Format(URL, GoogleApiKey, "en", targetLanguageCode); string parameter = null; List <string> list = sourceText.Length > 800 ? SplitStatement(sourceText) : new List <string> { sourceText }; foreach (string item in list) { if (string.IsNullOrEmpty(item)) { continue; } parameter = HttpUtility.UrlEncode(item); try { ReqeustResult request = HttpRequestHelper.Request(string.Concat(url, parameter)); if (!string.IsNullOrWhiteSpace(request.Html)) { var obj = new { data = new { translations = new[] { new { translatedText = "", } } } }; var googleTransResult = JsonConvert.DeserializeAnonymousType(request.Html, obj); if (googleTransResult.data != null) { if (googleTransResult.data.translations != null) { //targetText = googleTransResult.data.translations[0].translatedText; sb.Append(googleTransResult.data.translations[0].translatedText); } } } } catch (Exception ex) { throw ex; } System.Threading.Thread.Sleep(TranslatorHelper._TranslatorSleepTime); } list.Clear(); list = null; targetText = sb.ToString(); sb.Clear(); sb = null; return(targetText); }
/// <summary> /// HTTP请求 /// </summary> /// <param name="url"></param> /// <param name="requestData"></param> /// <returns></returns> public static ReqeustResult Request(string url, RequestData requestData) { MemoryStream postStream = null; BinaryWriter postWriter = null; HttpWebResponse response = null; StreamReader responseStream = null; if (requestData == null) { return(null); } Encoding requestEncoding = requestData.RequestEncoding; Encoding responseEncoding = requestData.ResponseEncoding; try { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); //UserAgent request.UserAgent = requestData.UserAgent; //ContentType if (requestData.ContentType == "multipart/form-data;") { request.ContentType = "multipart/form-data; boundary=" + CONTENT_BOUNDARY; } else { request.ContentType = requestData.ContentType; } //UserAgent request.Accept = requestData.Accept; //Connection request.KeepAlive = requestData.KeepAlive; //设置代理 if (requestData.WebProxy != null) { request.Proxy = requestData.WebProxy; } //设置过期时间 request.Timeout = 300000; if (request.Timeout > 0) { request.Timeout = requestData.Timeout; } //Shoespie Instagram 解决限制抓取临时方案 Yang 2018-4-11 11:10:31 // request.Headers.Add("Cookie", "mid=WsnSsAALAAFcGbGvMbQrQ7-U-6uk; ig_pr=1; ig_vw=1920; ig_vh=464; ig_or=landscape-primary; csrftoken=Y8XBHkGwTombBiMnkWTdX3ToFanoa7cu; ds_user_id=843030856; rur=FTW; sessionid=IGSC838e962903bfb91fa2e220447cf715834ba1a376023217d013cf0ae57f0e48bd%3Avp70NXXkcKTE398XvWJK6zc8QScEYHq5%3A%7B%22_auth_user_id%22%3A843030856%2C%22_auth_user_backend%22%3A%22accounts.backends.CaseInsensitiveModelBackend%22%2C%22_auth_user_hash%22%3A%22%22%2C%22_platform%22%3A4%2C%22_token_ver%22%3A2%2C%22_token%22%3A%22843030856%3AH9VqbqFDOLGeSLTLdDz7G4Ddxkhlhzvt%3A5d4966f8736331628831679f514995ba6c4536964911c1c39c45efdf0d233786%22%2C%22last_refreshed%22%3A1523411363.3383610249%7D; 9238; shbid=9238;"); //请求类型 request.Method = requestData.Method == RequestMethods.Get ? "Get" : "POST"; //初始化头部信息 InitHeaders(request, requestData); //写表单数据 postStream = new MemoryStream(); postWriter = new BinaryWriter(postStream); if (requestData.FormValue != null && requestData.FormValue.Count > 0) { if (requestData.ContentType == "multipart/form-data;") { WriteMultipartFormData(postWriter, requestData.FormValue, requestEncoding); } else { WriteFormData(postWriter, requestData.FormValue, requestEncoding); } } request.ContentLength = postStream.Length; if (requestData.Method == RequestMethods.Post) { Stream requestStream = request.GetRequestStream(); postStream.WriteTo(requestStream); } response = (HttpWebResponse)request.GetResponse(); responseStream = new StreamReader(response.GetResponseStream(), responseEncoding); ReqeustResult result = new ReqeustResult { Html = responseStream.ReadToEnd(), StatusCode = (int)response.StatusCode }; for (int i = 0; i < response.Headers.Count; i++) { Header header = new Header { Key = response.Headers.Keys[i], Value = response.Headers[i] }; result.Headers.Add(header); } return(result); } catch (Exception ex) { ReqeustResult result = new ReqeustResult { StatusCode = -1, Html = ex.Message }; return(result); } finally { if (postWriter != null) { postWriter.Close(); } if (postStream != null) { postStream.Close(); postStream.Dispose(); } if (response != null) { response.Close(); } if (responseStream != null) { responseStream.Close(); responseStream.Dispose(); } } }