更多好文章发现请点击原文链接:https://blog.wanvale.com/archives/368/
最近要用到机器翻译api做一个PV比较小的模块,看了一下大厂售卖翻译api都是以万为单位计费,而且资源包有时限,鉴于Google翻译国内已经可以访问,于是决定调用Google翻译的api。
对于不喜欢看过程的同学,可以直接拿api地址调用。
中译英:https://translate.google.cn/translate_a/single?client=gtx&sl=zh-CN&tl=en&dt=t&q=QUERY_STRING
英译中:https://translate.google.cn/translate_a/single?client=gtx&sl=en&tl=zh-CN&dt=t&q=QUERY_STRING
替换QUERY_STRING为要翻译的字符串即可。
对于Google翻译,只需要提供几个必要参数就可以获取结果了:
client一般指定为at或t,此处使用的gtx可以解除查询次数限制,但有概率造成获取到的结果不正确。
使用这个api最大的好处是不需要tk,但是返回的内容比较简单,对PV较小的项目使用是足够的。
对于Java实现,使用的是HttpClient发送接收请求,如果是Maven项目,需要引入依赖:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.5</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
接下来就可以愉快的编写调用函数了
public Map<String, String> translate(String trans) throws IOException {
Map<String, String> map = new ConcurrentHashMap<>();
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet("https://translate.google.cn/translate_a/single?client=gtx&sl=zh-CN&tl=en&dt=t&q=" + trans);
CloseableHttpResponse response = httpclient.execute(httpGet);
if (response.getStatusLine().getStatusCode() == 200) {
//请求体内容
String content = EntityUtils.toString(response.getEntity(), "UTF-8");
JSONArray array = JSONArray.parseArray(content);
array = array.getJSONArray(0).getJSONArray(0);
map.put("source", array.getString(1));
map.put("target", array.getString(0));
System.out.println("原文:" + array.getString(1));
System.out.println("译文:" + array.getString(0));
}
response.close();
httpclient.close();
return map;
}
对于Python实现,直接使用requests发送请求,json解析就可以了
import requests
import json
def translate(query_string):
url = 'https://translate.google.cn/translate_a/single?'
param = 'client=gtx&sl=zh-CN&tl=en&dt=t&q=' + query_string
response = requests.get(url + param)
result = json.loads(response.text)
return {
"source": result[0][0][1],
"target": result[0][0][0],
}
if __name__ == '__main__':
trans = translate("你好世界")
print(trans.get("source"))
print(trans.get("target"))