C#调用谷歌翻译API
原资料为网上找到的原稿为: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相关推荐
- node调用谷歌翻译Api,实现自动国际化
原因: 项目国际化过程繁琐,每次都需要人工去google翻译,导致工作效率不高. 需求: 1.减少人工的重复劳动,提高工作效率. 2.使用脚本调用谷歌翻译接口自动化翻译. 3.free,作为程序员肯定 ...
- 转:利用python调用谷歌翻译API
废话少说 从速卖通抓取了一些评论想进行一些简单的文本分析,但是因为速卖通是一个跨境电商平台,上边的评论基本都是小语种,对,小语种,俄语,法语...英语还可以勉强应付一下,但是其他真的是一个字母都不认识 ...
- python调用谷歌翻译英文文献pdf_Python 调用 Google Translate API 批量翻译文章
有时候批量翻译中文文章,批量变成各个小语种的语言,手动的粘贴复制是非常慢的.需要调用翻译 API 接口,综合对比市面上的各个翻译 API,个人觉得 Google 的翻译 API 最为好用和准确. 下面 ...
- 为支持两个语言版本,我基于谷歌翻译API写了一款自动翻译的 webpack 插件
大家好,我是若川.持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...
- 一个Qt调用百度翻译API进行文本翻译的程序记录,辅助ts文件进行翻译。
项目要求有多国语言翻译,但是手动的去复制粘贴翻译显然不是合理的,组里有人写过类似工具,但是我这里没有源码,又想根据我的需求定制一些功能,所以借鉴现有的界面,如下图 下面先搞定核心功能:百度翻译api的 ...
- python调用百度翻译-Python 调用百度翻译API
由于实习公司这边做的是日文app,有时要看看用户反馈,对于我这种五十音图都没记住的人,表示百度翻译确实还可以.但不想每次都复制粘贴啊,google被墙也是挺蛋疼的事,所以用python结合baidu ...
- Python3 调用谷歌翻译 英汉互译
Python3 调用谷歌翻译 将英文翻译成中文 代码如下: import urllib.request import execjsclass Py4Js():def __init__(self):se ...
- python百度翻译接口_python3 调用百度翻译API翻译英文
自行申请百度开发者账号import importlib,sys,urllib importlib.reload(sys) import urllib.request import json #导入js ...
- php调用谷歌翻译,PHP调用谷歌翻译 | 学步园
/* * PHP调用谷歌翻译 * author:cc * date:2012/5/4 */ function translate($text,$language='zh-cn|en'){ if(emp ...
- qq浏览器网页翻译_如何通过Edge浏览器调用“谷歌翻译”,将整个网页翻译为中文...
调用谷歌翻译,需要用到"油猴"插件,以及"网页翻译助手"脚本,只要你安装,就可以直接将网页翻译为中文. 介绍: 油猴介绍:Tampermonkey(油猴脚本)是 ...
最新文章
- Go 学习笔记(51)— Go 标准库之 strings(字符串比较、字符串前后缀、字符串统计、字符串索引、字符串包含、字符串转换、字符串复制、字符串替换、字符串去除、字符串分割和连接)
- 【Shell】fix 1032报错信息的脚本
- JavaScript、Jquery:获取各种屏幕的宽度和高度
- C#获取本机名及IP地址
- Elementui input不能再循环数据中每次自动聚焦的问题
- python面试题之介绍一下Python中webbrowser的用法
- Windows x64平台 获取PEB表,并获取kernel32.dll的基址,并获取它的函数
- 如何快速掌握man手册的使用
- linux内核路由反向检查,Linux内核的反向路由检查机制
- idea时间重置插件
- Unity全新的版本发布计划(2018)【转自游戏蛮牛】
- 域共享文件夹服务器怎么设置密码,域环境下共享文件夹加密、Windows 2008 Server局域网共享文件夹设置权限设置的方法...
- 【论文研读】Category-level Adversaries for Semantics Consistent Domain Adaptation(cvpr2019)
- P1179 数字统计
- 打叉图标html,SVG 勾号和叉号图标
- Doug Lea是谁?谁知道
- 洛谷——AT1350 深さ優先探索
- 人类月球日 | 专访邹海洋:中国的航天梦,是信任与不辜负的故事
- Hibernate 主键使用注解 @SequenceGenerator
- 育碧魁北克-刺客信条:奥德赛