原资料为网上找到的原稿为:http://www.cnblogs.com/marso/p/google_translate_api.html(此处只做个人笔记参考)

主要分两块:通过WebRequest的方式请求内容;获取Get方式的请求参数(难点在于tk的获取)。

以下是TK的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 : Number(c),      c = "+" == b.charAt(d + 1) ? a >>> c : a << c;    a = "+" == b.charAt(d) ? a + c & 4294967295 : a ^ c  }  return a}

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 ^= Number(e[1]) || 0;  0 > a && (a = (a & 2147483647) + 2147483648);  a %= 1E6;  return a.toString() + "." + (a ^ h)} 

然后在C#程序只引入Json.net(这个我用的版本为net4.5),然后再引入system.wed.dll(文件目录为:C:\WINDOWS\Microsoft.NET\Framework\找到相应版本)

其中还应引入using MSScriptControl;(msscript.ocx)

以下为测试程序

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Web;namespace ConsoleApplication1
{class Program{static void Main(string[] args){google test = new google();Console.WriteLine(test.GoogleTranslate("RCC_APB2Periph: specifies the APB2 peripheral to gates its clock.This parameter can be any combination of the following values", "auto", "zh-CN"));Console.ReadKey();}}class google{/// /// 谷歌翻译/// /// 待翻译文本/// 自动检测:auto/// 中文:zh-CN,英文:en/// 翻译后文本public string GoogleTranslate(string text, string 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, "https://translate.google.cn/");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 refer){var html = "";var webRequest = WebRequest.Create(url) as HttpWebRequest;webRequest.Method = "GET";webRequest.CookieContainer = cookie;webRequest.Referer = refer;webRequest.Timeout = 20000;webRequest.Headers.Add("X-Requested-With:XMLHttpRequest");webRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";webRequest.UserAgent = " Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)";using (var webResponse = (HttpWebResponse)webRequest.GetResponse()){using (var reader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8)){html = reader.ReadToEnd();reader.Close();webResponse.Close();}}return html;}/// /// 执行JS/// /// 参数体/// JavaScript代码的字符串/// private string ExecuteScript(string sExpression, string sCode){MSScriptControl.ScriptControl scriptControl = new MSScriptControl.ScriptControl();scriptControl.UseSafeSubset = true;scriptControl.Language = "JScript";scriptControl.AddCode(sCode);try{string str = scriptControl.Eval(sExpression).ToString();return str;}catch (Exception ex){string str = ex.Message;}return null;}}
}

问题1:执行时出现没有“;”说明JS文件有问题

转载于:https://www.cnblogs.com/praybb/p/7182745.html

C#调用谷歌翻译API相关推荐

  1. node调用谷歌翻译Api,实现自动国际化

    原因: 项目国际化过程繁琐,每次都需要人工去google翻译,导致工作效率不高. 需求: 1.减少人工的重复劳动,提高工作效率. 2.使用脚本调用谷歌翻译接口自动化翻译. 3.free,作为程序员肯定 ...

  2. 转:利用python调用谷歌翻译API

    废话少说 从速卖通抓取了一些评论想进行一些简单的文本分析,但是因为速卖通是一个跨境电商平台,上边的评论基本都是小语种,对,小语种,俄语,法语...英语还可以勉强应付一下,但是其他真的是一个字母都不认识 ...

  3. python调用谷歌翻译英文文献pdf_Python 调用 Google Translate API 批量翻译文章

    有时候批量翻译中文文章,批量变成各个小语种的语言,手动的粘贴复制是非常慢的.需要调用翻译 API 接口,综合对比市面上的各个翻译 API,个人觉得 Google 的翻译 API 最为好用和准确. 下面 ...

  4. 为支持两个语言版本,我基于谷歌翻译API写了一款自动翻译的 webpack 插件

    大家好,我是若川.持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

  5. 一个Qt调用百度翻译API进行文本翻译的程序记录,辅助ts文件进行翻译。

    项目要求有多国语言翻译,但是手动的去复制粘贴翻译显然不是合理的,组里有人写过类似工具,但是我这里没有源码,又想根据我的需求定制一些功能,所以借鉴现有的界面,如下图 下面先搞定核心功能:百度翻译api的 ...

  6. python调用百度翻译-Python 调用百度翻译API

    由于实习公司这边做的是日文app,有时要看看用户反馈,对于我这种五十音图都没记住的人,表示百度翻译确实还可以.但不想每次都复制粘贴啊,google被墙也是挺蛋疼的事,所以用python结合baidu ...

  7. Python3 调用谷歌翻译 英汉互译

    Python3 调用谷歌翻译 将英文翻译成中文 代码如下: import urllib.request import execjsclass Py4Js():def __init__(self):se ...

  8. python百度翻译接口_python3 调用百度翻译API翻译英文

    自行申请百度开发者账号import importlib,sys,urllib importlib.reload(sys) import urllib.request import json #导入js ...

  9. php调用谷歌翻译,PHP调用谷歌翻译 | 学步园

    /* * PHP调用谷歌翻译 * author:cc * date:2012/5/4 */ function translate($text,$language='zh-cn|en'){ if(emp ...

  10. qq浏览器网页翻译_如何通过Edge浏览器调用“谷歌翻译”,将整个网页翻译为中文...

    调用谷歌翻译,需要用到"油猴"插件,以及"网页翻译助手"脚本,只要你安装,就可以直接将网页翻译为中文. 介绍: 油猴介绍:Tampermonkey(油猴脚本)是 ...

最新文章

  1. Go 学习笔记(51)— Go 标准库之 strings(字符串比较、字符串前后缀、字符串统计、字符串索引、字符串包含、字符串转换、字符串复制、字符串替换、字符串去除、字符串分割和连接)
  2. 【Shell】fix 1032报错信息的脚本
  3. JavaScript、Jquery:获取各种屏幕的宽度和高度
  4. C#获取本机名及IP地址
  5. Elementui input不能再循环数据中每次自动聚焦的问题
  6. python面试题之介绍一下Python中webbrowser的用法
  7. Windows x64平台 获取PEB表,并获取kernel32.dll的基址,并获取它的函数
  8. 如何快速掌握man手册的使用
  9. linux内核路由反向检查,Linux内核的反向路由检查机制
  10. idea时间重置插件
  11. Unity全新的版本发布计划(2018)【转自游戏蛮牛】
  12. 域共享文件夹服务器怎么设置密码,域环境下共享文件夹加密、Windows 2008 Server局域网共享文件夹设置权限设置的方法...
  13. 【论文研读】Category-level Adversaries for Semantics Consistent Domain Adaptation(cvpr2019)
  14. P1179 数字统计
  15. 打叉图标html,SVG 勾号和叉号图标
  16. Doug Lea是谁?谁知道
  17. 洛谷——AT1350 深さ優先探索
  18. 人类月球日 | 专访邹海洋:中国的航天梦,是信任与不辜负的故事
  19. Hibernate 主键使用注解 @SequenceGenerator
  20. 育碧魁北克-刺客信条:奥德赛

热门文章

  1. 极化码信道极化-构造-编码-译码(不断更新)
  2. 防(普通)病毒U盘的制作
  3. 绘制正方形图形(C语言)
  4. centos7下定时重启tomcat
  5. 项目进度管理方法——甘特图
  6. 小程序云函数实现微信支付如此简单
  7. win10自带抓包工具_[教程] 利用抓包工具从Windows 10 应用商店里下载应用程序离线安装包...
  8. excel填充序列_EXCEL工资表制作后导入工资条方法,实现1秒搞定,万人群发
  9. STK之Commu模块之仿真同步卫星与地面站通信
  10. 生意参谋 data 16进制数据解析还原