原文:Net Core 实现谷歌翻译ApI 免费版

  由于谷歌翻译官方API是付费版本,本着免费和开源的精神。分享一下用 Net Core 实现谷歌翻译API的代码。

项目引用的Nuget 包:

ChakraCore.NET

Newtonsoft.Json

JavaScriptEngineSwitcher.ChakraCore.Native.win-x86(特别说明一下"win-x86",代表程序运行环境。)

翻译地址:https://translate.google.cn(国内可以访问)

参数说明:

text:待翻译文本

sl:需要翻译的语言(中文:zh-CN,英文:en)

tl: 翻译结果的语言(中文:zh-CN,英文:en)

 1 public class HttpHelper
2 {
3 /// <summary>
4 /// 请求
5 /// </summary>
6 /// <param name="url">地址</param>
7 /// <param name="args">参数</param>
8 /// <returns></returns>
9 public static string GetRequest(string url, CookieContainer cookieContainer, Dictionary<string, dynamic> args)
10 {
11 try
12 {
13 if (args.Count > 0)
14 {
15 var argStr = string.Empty;
16
17 foreach (var item in args)
18 {
19 if (item.Key == null || item.Value == null)
20 {
21 continue;
22 }
23 argStr = $"{argStr}{item.Key}={item.Value}&";
24 }
25
26 url = $"{url}?{argStr.TrimEnd('&')}";
27 }
28
29 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
30 request.Method = "get";
31 request.Timeout = 100000;
32 request.CookieContainer = cookieContainer;
33 request.UserAgent = GetUserAgent();
34 request.Headers.Add("X-Requested-With:XMLHttpRequest");
35 request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
36 using (var webResponse = (HttpWebResponse)request.GetResponse())
37 {
38 using (var reader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8))
39 {
40
41 return reader.ReadToEnd();
42 }
43 }
44 }
45 catch (Exception)
46 {
47 return string.Empty;
48 }
49 }
50
51 /// <summary>
52 /// 用户代理
53 /// </summary>
54 /// <returns></returns>
55 private static string GetUserAgent()
56 {
57 var userAgents = new List<string>
58 {
59 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
60 "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
61 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
62 "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
63 "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
64 "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
65 "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
66 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
67 "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
68 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
69 "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
70 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
71 "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
72 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
73 "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
74 "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
75 "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
76 "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
77 "Mozilla/5.0 (Macintosh; U; Mac OS X Mach-O; en-US; rv:2.0a) Gecko/20040614 Firefox/3.0.0 ",
78 "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.0.3) Gecko/2008092414 Firefox/3.0.3",
79 "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5",
80 "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.14) Gecko/20110218 AlexaToolbar/alxf-2.0 Firefox/3.6.14",
81 "Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15",
82 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",
83 "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",
84 "Opera/9.80 (Android 2.3.4; Linux; Opera mobi/adr-1107051709; U; zh-cn) Presto/2.8.149 Version/11.10",
85 "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10",
86 "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8",
87 "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5",
88 "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0",
89 "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)",
90 "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",
91 "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
92 };
93
94 return userAgents.OrderBy(x => Guid.NewGuid()).First();
95 }
96 }

HttpHelper

  1 /// <summary>
2 /// 翻译 助手
3 /// </summary>
4 public static class TranslationHelper
5 {
6 /// <summary>
7 /// Chakra 上下文
8 /// </summary>
9 private static readonly ChakraContext _chakraContext;
10
11 /// <summary>
12 /// Cookie
13 /// </summary>
14 private static readonly CookieContainer _cookieContainer;
15
16 /// <summary>
17 /// 请求地址
18 /// </summary>
19 private static readonly string _baseUrl;
20
21 /// <summary>
22 /// 静态
23 /// </summary>
24 static TranslationHelper()
25 {
26 var runtime = ChakraRuntime.Create();
27
28 _baseUrl = "http://translate.google.cn/translate_a/single";
29 _cookieContainer = new CookieContainer();
30 _chakraContext = runtime.CreateContext(true);
31
32 var basePath = PlatformServices.Default.Application.ApplicationBasePath;
33 var jsFileText = File.ReadAllText($@"{basePath}\gettk.js");
34
35 _chakraContext.RunScript(jsFileText); //运行脚本
36 }
37
38 /// <summary>
39 /// 获取翻译结果(需要翻译的文字默认使用中文)
40 /// </summary>
41 /// <param name="toLang">语言</param>
42 /// <param name="originalText">待翻译的文本</param>
43 /// <returns></returns>
44 public static string GetTranslation(this string toLang, string originalText)
45 {
46 if (string.IsNullOrEmpty(toLang))
47 {
48 return toLang;
49 }
50 if (string.IsNullOrEmpty(originalText))
51 {
52 return originalText;
53 }
54
55 return GetTranslation("zh-cn", toLang, originalText);
56
57 }
58
59 /// <summary>
60 /// 获取翻译结果
61 /// </summary>
62 /// <param name="fromLang">需要翻译的语言</param>
63 /// <param name="toLang">翻译结果的语言</param>
64 /// <param name="originalText">待翻译文本</param>
65 /// <returns></returns>
66 public static string GetTranslation(this string fromLang, string toLang, string originalText)
67 {
68 var args = new Dictionary<string, dynamic>
69 {
70 { "client", "t" },
71 { "sl", fromLang },
72 { "tl", toLang },
73 { "dt", "t" },
74 { "tk", GetTK(originalText) },
75 { "text", HttpUtility.UrlEncode(originalText) }
76 };
77
78 var result = HttpHelper.GetRequest(_baseUrl, _cookieContainer, args);
79
80 return result.FormattedJson();
81 }
82
83 /// <summary>
84 /// 获取TK
85 /// </summary>
86 /// <param name="originalText"></param>
87 /// <returns></returns>
88 private static string GetTK(string originalText)
89 {
90 _chakraContext.GlobalObject.WriteProperty("originalText", originalText);
91 return _chakraContext.RunScript("getTK(originalText)");
92 }
93
94 /// <summary>
95 /// 格式化Json
96 /// </summary>
97 /// <param name="jsonStr">Json</param>
98 /// <returns></returns>
99 private static string FormattedJson(this string jsonStr)
100 {
101 if (string.IsNullOrEmpty(jsonStr))
102 {
103 return string.Empty;
104 }
105
106 var array = JsonConvert.DeserializeObject<JArray>(jsonStr);
107
108 var result = array[0][0][0].ToString();
109
110 return result;
111 }
112
113 }

TranslationHelper

参考:C#实现谷歌翻译API

Net Core 实现谷歌翻译ApI 免费版的更多相关文章

  1. ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段

    ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...

  2. Asp.Net Core 实现谷歌翻译ApI 免费版

    由于谷歌翻译官方API是付费版本,本着免费和开源的精神.分享一下用 Net Core 实现谷歌翻译API的代码. 项目引用的Nuget 包: ChakraCore.NET Newtonsoft.Jso ...

  3. C#实现谷歌翻译API

    由于谷歌翻译官方API是付费版本,本着免费和开源的精神,分享一下用C#实现谷歌翻译API的代码.这个代码非常简单,主要分两块:通过WebRequest的方式请求内容:获取Get方式的请求参数(难点在于 ...

  4. Java 破解谷歌翻译api,可以实现程序自动化翻译文章

    1  原理:查看谷歌翻译网站,输入需要翻译的文字,选择语言得到翻译后的文字,发送异步请求参数返回结果.java使用httpclient发送请求,实现使用代码翻译文章的功能. 2  下载代码后,测试入口 ...

  5. C#调用谷歌翻译API

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

  6. 利用谷歌网站的翻译网站,实现谷歌翻译api

    代码是之前网上找到的,地址为:http://www.crifan.com/teach_you_how_to_find_free_google_translate_api/ 原先的代码有不足,如果翻译里 ...

  7. 谷歌翻译API

    http://translate.google.cn/translate_a/t?client=t&text=你好&hl=zh-CN&sl=zh-CN&tl=en&am ...

  8. 免费利用网页版谷歌翻译实现任意语言转换php版

    本文源发布地址: http://ourgarden.cn/2013/07/20/%E5%85%8D%E8%B4%B9%E5%88%A9%E7%94%A8%E7%BD%91%E9%A1%B5%E7%89 ...

  9. WP8.1小梦词典开发2:百度翻译API使用

    原文出自:http://www.bcmeng.com/api2/ 小梦昨天和大家分享了WP8.1金山词霸API使用方法,今天继续分享windows phone 8.1中百度翻译API的使用方法.和昨天 ...

随机推荐

  1. Python操作MySQL数据库完成简易的增删改查功能

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶效果展示 三丶数据准备 四丶代码实现 五丶完整代码 一丶项目介绍 1.叙述 博主闲暇之余花了10个小时写的 ...

  2. 常用处理字符串的SQL函数

    汇总函数:Count.Sum.AVG.MAX.min; 数学函数: ABS:绝对值.floor:给出比给定值小的最大整数. round(m,n):m为给定的值,n为小数点后保留的位数. power(m ...

  3. Android提示版本号更新操作流程

    Android提示版本号更新操作流程 2014年5月8日: andorid的app应用中都会有版本号更新的操作,今天空暇的时候就花了点心思弄了一下.主要技术方面用到了AsyncTask异步载入.htt ...

  4. 一个简单http请求的jmeter压测实战流程

    1.新建线程组 2.创建http请求 注意:接口路径中的参数值要写变量 3.创建txt文件,存多个参数值 4.创建csv文件,在csv中上传txt文件 5.variable name填写txt中参数值 ...

  5. 【河南省多校脸萌第六场 A】巴什博弈?

    [链接]http://acm.nyist.me/JudgeOnline/problem.php?cid=1013&pid=5 [题意] 在这里写题意 [题解] 0..a-1 YES a..a+ ...

  6. ios 推断是qq,银行卡,手机号等等公用的方法。

    #import <Foundation/Foundation.h> typedef enum  {     IdentifierTypeKnown = 0,     IdentifierT ...

  7. amazeui学习笔记--css(常用组件2)--面包屑导航Breadcrumb

    amazeui学习笔记--css(常用组件2)--面包屑导航Breadcrumb 一.总结 1.am-breadcrumb:用am-breadcrumb来声明面包屑导航控件,.am-breadcrum ...

  8. ajax中打开新页面使用window.open方法被拦截的解决方法

    $('.testA').unbind('click').bind('click',function(){ var result=""; $.ajax({ url:'http://l ...

  9. 【】maze

    [链接]点击打开链接 [题意] 小 T 被放到了一个迷宫之中,这个迷宫由 n 个节点构成,两个节点之间可能存在多条无 向边,小 T 的起点为 1 号节点,终点为 n 号节点.有 m 条无向边,对于每一 ...

  10. 洛谷—— P1018 乘积最大

    https://www.luogu.org/problem/show?pid=1018#sub 题目描述 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年 ...