コード例 #1
0
            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);
            }
コード例 #2
0
            /// <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);
            }
コード例 #3
0
        /// <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();
                }
            }
        }