最新C#调用Google即时翻译

主要是调用谷歌的翻译API进行翻译,WebRequest的请求,将获取到的翻译提取出来。下面上代码

需要用到一个的js文件:对获取到数据的过滤,命名为gettk.js

 

var b = function(a,b){
    for(var d = 0; d <b.length  -  2; d + = 3){
        var c = b.charAt(d + 2),
            c =“a”<= c?c.charCodeAt(0) -  87:数字(c),
            c =“+”== b.charAt(d + 1)?a >>> c:a << c;
        a =“+”== b.charAt(d)?a + c&4294967295:a ^ c
    }
    返回一个
}

var tk = function(a,TKK){
    for(var e = TKK.split(“。”),h = Number(e [0])|| 0,g = [],d = 0,f = 0; f <a.length; f ++){
        var c = a.charCodeAt(f);
        128> c?g [d ++] = c:(2048> c?g [d ++] = c >> 6 | 192:(55296 ==(c&64512)&& f + 1 <a.length && 56320 ==(a.charCodeAt( f + 1)&64512)?(c = 65536 +((c&1023)<< 10)+(a.charCodeAt(++ f)&1023),g [d ++] = c >> 18 | 240,g [d ++] = c >> 12&63 | 128):g [d ++] = c >> 12 | 224,g [d ++] = c >> 6&63 | 128),g [d ++] = c&63 | 128)
    }
    a = h;
    for(d = 0; d <g.length; d ++)a + = g [d],a = b(a,“+ -a ^ + 6”);
    a = b(a,“+ -3 ^ + b + -f”);
    a ^ =数字(e [1])|| 0;
    0> a &&(a =(a&2147483647)+ 2147483648);
    a%= 1E6;
    返回a.toString()+“。” +(a ^ h)
}
    for(var d = 0; d <b.length  -  2; d + = 3){
        var c = b.charAt(d + 2),
            c =“a”<= c?c.charCodeAt(0) -  87:数字(c),
            c =“+”== b.charAt(d + 1)?a >>> c:a << c;
        a =“+”== b.charAt(d)?a + c&4294967295:a ^ c
    }
    返回一个
}

var tk = function(a,TKK){
    for(var e = TKK.split(“。”),h = Number(e [0])|| 0,g = [],d = 0,f = 0; f <a.length; f ++){
        var c = a.charCodeAt(f);
        128> c?g [d ++] = c:(2048> c?g [d ++] = c >> 6 | 192:(55296 ==(c&64512)&& f + 1 <a.length && 56320 ==(a.charCodeAt( f + 1)&64512)?(c = 65536 +((c&1023)<< 10)+(a.charCodeAt(++ f)&1023),g [d ++] = c >> 18 | 240,g [d ++] = c >> 12&63 | 128):g [d ++] = c >> 12 | 224,g [d ++] = c >> 6&63 | 128),g [d ++] = c&63 | 128)
    }
    a = h;
    for(d = 0; d <g.length; d ++)a + = g [d],a = b(a,“+ -a ^ + 6”);
    a = b(a,“+ -3 ^ + b + -f”);
    a ^ =数字(e [1])|| 0;
    0> a &&(a =(a&2147483647)+ 2147483648);
    a%= 1E6;
    返回a.toString()+“。” +(a ^ h)
}

 

 

 

 

 

前台代码:

 

<Window x:Class =“Translate.MainWindow”
        的xmlns = “http://schemas.microsoft.com/winfx/2006/xaml/presentation”
        的xmlns:X = “http://schemas.microsoft.com/winfx/2006/xaml”
        Title =“Google翻译”高度=“439”宽度=“525”WindowStartupLocation =“CenterScreen”>
    <网格>
        <Grid.Background>
            <ImageBrush ImageSource =“t012abd86418d9b50f9.jpg”/>
        </Grid.Background>
        <TextBlock Height =“23”Horizo​​ntalAlignment =“Left”Margin =“12,12,0,0”FontSize =“14”Name =“textBlock1”Text =“输入单词:”VerticalAlignment =“Top”/>
        <TextBox Foreground =“Red”FontSize =“14”Background =“Transparent”Height =“94”Horizo​​ntalAlignment =“Left”Margin =“10,40,0,0”Name =“txtWord”VerticalAlignment =“Top”Width = “487”TextChanged =“txtWord_TextChanged”/>
        <TextBox Foreground =“Red”FontSize =“14”Background =“Transparent”Height =“242”Horizo​​ntalAlignment =“Left”Margin =“10,157,0,0”Name =“txtResult”VerticalAlignment =“Top”Width =“487 “/>
    </网格>
</窗口>
        的xmlns = “http://schemas.microsoft.com/winfx/2006/xaml/presentation”
        的xmlns:X = “http://schemas.microsoft.com/winfx/2006/xaml”
        Title =“Google翻译”高度=“439”宽度=“525”WindowStartupLocation =“CenterScreen”>
    <网格>
        <Grid.Background>
            <ImageBrush ImageSource =“t012abd86418d9b50f9.jpg”/>
        </Grid.Background>
        <TextBlock Height =“23”Horizo​​ntalAlignment =“Left”Margin =“12,12,0,0”FontSize =“14”Name =“textBlock1”Text =“输入单词:”VerticalAlignment =“Top”/>
        <TextBox Foreground =“Red”FontSize =“14”Background =“Transparent”Height =“94”Horizo​​ntalAlignment =“Left”Margin =“10,40,0,0”Name =“txtWord”VerticalAlignment =“Top”Width = “487”TextChanged =“txtWord_TextChanged”/>
        <TextBox Foreground =“Red”FontSize =“14”Background =“Transparent”Height =“242”Horizo​​ntalAlignment =“Left”Margin =“10,157,0,0”Name =“txtResult”VerticalAlignment =“Top”Width =“487 “/>
    </网格>
</窗口>


后台代码:需要添加MSScriptControl引用,解析Js文件

 

 

 #region方法

        /// <summary>正则校验
        /// </ summary>
        /// <param name =“str”> </ param>
        /// <param name =“matchStr”>正则</ param>
        /// <returns> </ returns>
        public static bool ValidateStr(string str,string matchStr)
        {
            尝试
            {
                return System.Text.RegularExpressions.Regex.IsMatch(str,matchStr);
            }
            catch(例外)
            {
                返回false;
            }
        }
        /// <summary>
        ///谷歌翻译
        /// </ summary>
        /// <param name =“text”>待翻译文本</ param>
        /// <param name =“fromLanguage”>自动检测:auto </ param>
        /// <param name =“toLanguage”>中文:zh-CN,中文:en </ param>
        /// <returns>翻译后文本</ returns>
        public string GoogleTranslate(字符串文本,字符串fromLanguage,string toLanguage)
        {
            CookieContainer cc = new CookieContainer();

            string GoogleTransBaseUrl =“https://translate.google.cn/”;

            var BaseResultHtml = GetResultHtml(GoogleTransBaseUrl,cc,“”);

            Regex re = new Regex(@“(?<= TKK =)(。*?)(?= \);)”);

            var TKKStr = re.Match(BaseResultHtml).ToString()+“)”; //在返回的HTML中正则匹配TKK的JS代码

            var TKK = ExecuteScript(TKKStr,TKKStr); //执行TKK代码,得到TKK值

            var GetTkkJS = File.ReadAllText(@“gettk.js”);

            var tk = ExecuteScript(“tk(\”“+ text +”\“,\”“+ TKK +”\“)”,GetTkkJS);

            string googleTransUrl =“https://translate.google.cn/translate_a/single?client=t&sl=”+ fromLanguage +“&tl =”+ toLanguage +“&hl = en&dt = at&dt = bd&dt = ex&dt = ld&dt = md&dt = qca&dt = rw&dt = rm&dt = ss&dt = t&ie = UTF-8&oe = UTF-8&otf = 1&ssel = 0&tsel = 0&kc = 1&tk =“+ tk +”&q =“+ HttpUtility.UrlEncode(text);

            var ResultHtml = GetResultHtml(googleTransUrl,cc,“”);

            dynamic TempResult = Newtonsoft.Json.JsonConvert.DeserializeObject(ResultHtml);

            string ResultText = Convert.ToString(TempResult [0] [0] [0]);

            return ResultText;
        }

        public string GetResultHtml(string url,CookieContainer cookie,string referer)
        {
            var html =“”;

            var webRequest = WebRequest.Create(url)as HttpWebRequest;

            webRequest.Method =“GET”;

            webRequest.CookieContainer = cookie;

            webRequest.Referer = referer;

            webRequest.Timeout = 20000;

            webRequest.Headers.Add( “X-请求-随着:XMLHttpRequest的”);

            webRequest.Accept =“text / html,application / xhtml + xml,application / xml; q = 0.9,image / webp,* / *; q = 0.8”;

            webRequest.UserAgent = url; // useragent;

            使用(var webResponse =(HttpWebResponse)webRequest.GetResponse())
            {
                使用(var reader = new StreamReader(webResponse.GetResponseStream(),Encoding.UTF8))
                {

                    html = reader.ReadToEnd();
                    reader.Close();
                    webResponse.Close();
                }
            }
            返回html;
        }

        /// <summary>
        ///执行JS
        /// </ summary>
        /// <param name =“sExpression”>参数体</ param>
        /// <param name =“sCode”> JavaScript代码的字符串</ param>
        /// <returns> </ returns>
        私有字符串ExecuteScript(字符串sExpression,字符串sCode)
        {
            MSScriptControl.ScriptControl scriptControl = new MSScriptControl.ScriptControl();
            scriptControl.UseSafeSubset = true;
            scriptControl.Language =“JScript”;
            scriptControl.AddCode(SCODE);
            尝试
            {
                string str = scriptControl.Eval(sExpression).ToString();
                返回str;
            }
            catch(Exception ex)
            {
                string str = ex.Message;
            }
            return null;
        } 
        #endregion

        /// <summary>正则校验
        /// </ summary>
        /// <param name =“str”> </ param>
        /// <param name =“matchStr”>正则</ param>
        /// <returns> </ returns>
        public static bool ValidateStr(string str,string matchStr)
        {
            尝试
            {
                return System.Text.RegularExpressions.Regex.IsMatch(str,matchStr);
            }
            catch(例外)
            {
                返回false;
            }
        }
        /// <summary>
        ///谷歌翻译
        /// </ summary>
        /// <param name =“text”>待翻译文本</ param>
        /// <param name =“fromLanguage”>自动检测:auto </ param>
        /// <param name =“toLanguage”>中文:zh-CN,中文:en </ param>
        /// <returns>翻译后文本</ returns>
        public string GoogleTranslate(字符串文本,字符串fromLanguage,string toLanguage)
        {
            CookieContainer cc = new CookieContainer();

            string GoogleTransBaseUrl =“https://translate.google.cn/”;

            var BaseResultHtml = GetResultHtml(GoogleTransBaseUrl,cc,“”);

            Regex re = new Regex(@“(?<= TKK =)(。*?)(?= \);)”);

            var TKKStr = re.Match(BaseResultHtml).ToString()+“)”; //在返回的HTML中正则匹配TKK的JS代码

            var TKK = ExecuteScript(TKKStr,TKKStr); //执行TKK代码,得到TKK值

            var GetTkkJS = File.ReadAllText(@“gettk.js”);

            var tk = ExecuteScript(“tk(\”“+ text +”\“,\”“+ TKK +”\“)”,GetTkkJS);

            string googleTransUrl =“https://translate.google.cn/translate_a/single?client=t&sl=”+ fromLanguage +“&tl =”+ toLanguage +“&hl = en&dt = at&dt = bd&dt = ex&dt = ld&dt = md&dt = qca&dt = rw&dt = rm&dt = ss&dt = t&ie = UTF-8&oe = UTF-8&otf = 1&ssel = 0&tsel = 0&kc = 1&tk =“+ tk +”&q =“+ HttpUtility.UrlEncode(text);

            var ResultHtml = GetResultHtml(googleTransUrl,cc,“”);

            dynamic TempResult = Newtonsoft.Json.JsonConvert.DeserializeObject(ResultHtml);

            string ResultText = Convert.ToString(TempResult [0] [0] [0]);

            return ResultText;
        }

        public string GetResultHtml(string url,CookieContainer cookie,string referer)
        {
            var html =“”;

            var webRequest = WebRequest.Create(url)as HttpWebRequest;

            webRequest.Method =“GET”;

            webRequest.CookieContainer = cookie;

            webRequest.Referer = referer;

            webRequest.Timeout = 20000;

            webRequest.Headers.Add( “X-请求-随着:XMLHttpRequest的”);

            webRequest.Accept =“text / html,application / xhtml + xml,application / xml; q = 0.9,image / webp,* / *; q = 0.8”;

            webRequest.UserAgent = url; // useragent;

            使用(var webResponse =(HttpWebResponse)webRequest.GetResponse())
            {
                使用(var reader = new StreamReader(webResponse.GetResponseStream(),Encoding.UTF8))
                {

                    html = reader.ReadToEnd();
                    reader.Close();
                    webResponse.Close();
                }
            }
            返回html;
        }

        /// <summary>
        ///执行JS
        /// </ summary>
        /// <param name =“sExpression”>参数体</ param>
        /// <param name =“sCode”> JavaScript代码的字符串</ param>
        /// <returns> </ returns>
        私有字符串ExecuteScript(字符串sExpression,字符串sCode)
        {
            MSScriptControl.ScriptControl scriptControl = new MSScriptControl.ScriptControl();
            scriptControl.UseSafeSubset = true;
            scriptControl.Language =“JScript”;
            scriptControl.AddCode(SCODE);
            尝试
            {
                string str = scriptControl.Eval(sExpression).ToString();
                返回str;
            }
            catch(Exception ex)
            {
                string str = ex.Message;
            }
            return null;
        } 
        #endregion

界面呈现:

 

<span style="color:#0000ff"><a data-cke-saved-href="https://jq.qq.com/?_wv=1027&k=579ylkn" href="https://jq.qq.com/?_wv=1027&k=579ylkn">点击加入QQ群,一起学习交流</a></span>

点击加入qq群,一起学习交流

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kiki·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值