HTTP接入文档
NxSun翻译API通过HTTP协议接口对外提供多语种互译服务。您只需要通过调用翻译API,传入待翻译的内容,并指定要翻译的源语言(支持源语言语种自动检测)和目标语言种类,就可以得到相应的翻译结果。
翻译API HTTP地址:
http://fanyi.nxsun.com/customer/api/translate
只支持POST方法发送请求
| 字段名 | 类型 | 必填参数 | 描述 | 备注 |
|---|---|---|---|---|
| q | text | Y | 请求翻译的内容 | UTF-8编码,单个词条或词条列表(数组)序列化 |
| sn | String | Y | 身份唯一标识 | UTF-8编码 |
| sl | String | Y | 翻译源语言 | 语言列表(可设置为auto) |
| tl | String | Y | 翻译目标语言 | 语言列表 |
| tt | String | Y | 时间戳,需要取整的字符串 | 时间戳是自1970年1月1日(00:00:00 GMT) 以来的秒数或毫秒数,它也被称为Unix时间戳 |
| hk | String | Y | MD5(timestamp+API_KEY) | 在时间戳timestamp后拼接API_KEY,并对 拼接字符串计算MD5,MD5使用字符串格式 |
| id | String | N | 帮助用户,难一标识每次请求 | 返回结果中会原样返回该字段值,可以省略 |
注:q的值可以是一个词条,或者是多个词条的数据的序列化字符串。为了保证翻译质量和速度,单次请求的长度控制在1024字节以内
返回结果是json格式,包含以下字段:
| 字段名 | 类型 | 描述 |
|---|---|---|
| status | INT | 0表示成功,-1表示失败 |
| msg | String | 请求状态信息;success,error |
| id | String | 用户请求传入的ID,原样返回,也可以为空 |
| data | json | 是一个json结构体,里面包含相应的翻译结果 |
| data.tl | String | 请求时的目标语言二字码 |
| data.sl | String | 请求时的源语言二字码 |
| data.tr | Array | 翻译结果,按请求时的词条顺序返回 |
HTTP协议接口,增加或修改术语库
http://fanyi.nxsun.com/customer/api/add/glossary
只支持POST方法发送请求
| 字段名 | 类型 | 必填参数 | 描述 | 备注 |
|---|---|---|---|---|
| sn | String | Y | 身份唯一标识 | UTF-8编码 |
| sw | Text | Y | 源词条 | 术语源词条 |
| sl | String | Y | 翻译源语言 | 语言列表(必须为二字吗) |
| tw | Text | Y | 翻译结果 | 对于语言的翻译结果 |
| tl | String | Y | 翻译目标语言 | 语言列表 |
| tt | String | Y | 时间戳,需要取整的字符串 | 时间戳是自1970年1月1日(00:00:00 GMT) 以来的秒数或毫秒数,它也被称为Unix时间戳 |
| hk | String | Y | MD5(timestamp+API_KEY) | 在时间戳timestamp后拼接API_KEY,并对 拼接字符串计算MD5,MD5使用字符串格式 |
注:术语不要包含特殊字符,否则可能不能正确的应用到正式的翻译结果,尽可能是短词条或短句
返回结果是json格式,包含以下字段:
| 字段名 | 类型 | 描述 |
|---|---|---|
| status | INT | 0表示成功,-1表示失败 |
| msg | String | 请求状态信息;success,error |
| status (int) | 备注 |
|---|---|
| 1 | 请求成功,但是翻译失败 |
| 0 | 请求成功,并且翻译成功 |
| -1 | 发生未知错误,保留记录,联系NxSun |
源语言语种不确定时可设置为 auto,目标语言语种不可设置为 auto。
| 语言二字码 | 名称 |
|---|---|
| el | 希腊语 |
| eo | 世界语 |
| en | 英语 |
| cn | 简体中文 |
| af | 南非荷兰语 |
| vi | 越南语 |
| ca | 加泰罗尼亚语 |
| it | 意大利语 |
| iw | 希伯来语 |
| cy | 威尔士语 |
| ar | 阿拉伯语 |
| ga | 爱尔兰语 |
| cs | 捷克语 |
| et | 爱沙尼亚语 |
| gl | 加利西亚语 |
| id | 印尼语 |
| es | 西班牙语 |
| ru | 俄语 |
| nl | 荷兰语 |
| pt | 葡萄牙语 |
| no | 挪威语 |
| tw | 繁体中文 |
| tr | 土耳其语 |
| lt | 立陶宛语 |
| lv | 拉托维亚语 |
| tl | 菲律宾语 |
| th | 泰语 |
| ro | 罗马尼亚语 |
| is | 冰岛语 |
| pl | 波兰语 |
| yi | 意第绪语 |
| be | 白俄罗斯语 |
| fr | 法语 |
| bg | 保加利亚语 |
| uk | 乌克兰语 |
| hr | 克罗地亚语 |
| de | 德语 |
| ht | 海地克里奥尔语 |
| da | 丹麦语 |
| fa | 波斯语 |
| hi | 印地语 |
| fi | 芬兰语 |
| hu | 匈牙利语 |
| ja | 日语 |
| sr | 塞尔维亚语 |
| sq | 阿尔巴尼亚语 |
| kk | 哈萨克语 |
| ko | 韩语 |
| sv | 瑞典语 |
| mk | 马其顿语 |
| sk | 斯洛伐克语 |
| mn | 蒙古语 |
| mt | 马耳他语 |
| ms | 马来语 |
| sl | 斯洛文尼亚语 |
| sw | 斯瓦希里语 |
| my | 缅甸语 |
| bn | 孟加拉语 |
| ur | 乌尔都语 |
Python 示例:
#coding=utf8
import json
import time
import requests
import hashlib
url = "http://fanyi.nxsun.com/customer/api/translate"
api_key = "xxxxxxxxxx"
def md5(data):
m = hashlib.md5()
m.update(data)
return m.hexdigest()
def translate(wd, sl, tl):
tt = str(int(time.time()*1000))
data = {
"q": wd,
"sl": sl,
"tl": tl,
"sn": "service_name",
"tt": tt,
"hk": md5(tt + api_key)
}
res = requests.post(url, data)
if res.status_code == 200:
result = json.loads(res.text)
if result["status"] == 0 and result["msg"] == "success":
print result
else:
print result
print "failure"
else:
print "failure"
translate(json.dumps(["This is a good book."]), "en", "ru")
C# 示例:(根据具体情况调试)
static public string GetMD5HashFromString(string str)
{
//需要将字符串转换成字节数组
byte[] bytValue = System.Text.Encoding.UTF8.GetBytes(str);
//创建MD5对象
MD5 md5 = MD5.Create();
//返回一个加密好的数组
byte[] retVal = md5.ComputeHash(bytValue);
string strNew = "";
for (int i = 0; i < retVal.Length; i++)
{
strNew += retVal[i].ToString("x2");
}
return strNew;
}
public static string GetTimeStamp(DateTime dt)
{
TimeSpan ts = dt - new DateTime(1970, 1, 1, 0, 0, 0, 0);
return Convert.ToInt64(ts.TotalSeconds).ToString();
}
private void button1_Click(object sender, EventArgs e)
{
String url = "http://fanyi.nxsun.com/customer/api/translate?";
string api_key = "xxxxxxxxxx";
DateTime now1 = DateTime.Now;
string data = "sn=XXXXXX&sl=en&tl=cn&q='hello world'&tt=" + GetTimeStamp(now1) + "&hk=" +
GetMD5HashFromString(GetTimeStamp(now1) + api_key);
url = url + data;
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.Method = "POST";
httpWebRequest.BeginGetResponse(new AsyncCallback(RequestTranslateCallBack), httpWebRequest);
}
JAVA 示例:
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import java.lang.String;
import java.lang.StringBuffer;
import java.util.List;
import java.security.MessageDigest;
import java.util.ArrayList;
public class httpPostJson {
private final static String[] hexDigits = {"0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
private static String byteArrayToHexString(byte[] b){
StringBuffer resultSb = new StringBuffer();
for(int i = 0; i < b.length; i++){
resultSb.append(byteToHexString(b[i]));
}
return resultSb.toString();
}
private static String byteToHexString(byte b){
int n = b;
if (n < 0)
n = 256 + n;
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
public static String encodeByMd5(String originString){
if (originString != null){
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] results = md.digest(originString.getBytes());
String resultString = byteArrayToHexString(results);
return resultString;
} catch (Exception ex){
ex.printStackTrace();
}
}
return null;
}
public static String translate(String word) {
try {
String URL = "http://fanyi.nxsun.com/customer/api/translate";
String sn = "xxxx";
String sl = "en";
String tl = "cn";
String q = word;
String api_key = "xxxxxxxxxx";
String tt = String.valueOf(System.currentTimeMillis());
String hk = encodeByMd5(tt + api_key);
//设置请求参数
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("q", q));
params.add(new BasicNameValuePair("sl", sl));
params.add(new BasicNameValuePair("tl", tl));
params.add(new BasicNameValuePair("sn", sn));
params.add(new BasicNameValuePair("tt", tt));
params.add(new BasicNameValuePair("hk", hk));
//创建post请求
HttpPost httppost = new HttpPost(URL);
//添加参数
httppost.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
//设置编码
HttpResponse response = new DefaultHttpClient().execute(httppost);
//发送post,并返回一个HttpResponse对象
if(response.getStatusLine().getStatusCode() == 200){
String result = EntityUtils.toString(response.getEntity());
return result;
}else{
return null;
}
} catch (Exception ex){
ex.printStackTrace();
}
return null;
}
public static void main(String[] args){
//注意,这里的翻译词条,可以是一个单个词条,也可以是json序列化的一个数组
//多个的时候,'["hello world", "this is a dog"]'
//单个词翻译
String word = "hello world";
String ret = translate(word);
System.out.println(ret);
//多词同时翻译
String words = '['+ "\"hello world\"" + "," + "\"this is dog\"" +']';
String rets = translate(words);
System.out.println(rets);
}
}
PHP 示例:
<?php
function translate($url, $sl, $tl, $sn, $api_key, $word) {
$postUrl = $url;
$tt = (string)mktime();
$hk = md5($tt.$api_key);
$curlPost = array(
'method' => 'POST',
'q' => $word,
'sl' => $sl,
'tl' => $tl,
'sn' => $sn,
'tt' => $tt,
'hk' => $hk,
'timeout' => 20 // 超时时间(单位:s)
);
$ch = curl_init();//初始化curl
curl_setopt($ch, CURLOPT_URL,$postUrl);//抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($ch);//运行curl
curl_close($ch);
return $data;
}
1.如果在一次请求中翻译多段文本?
将需要翻译的多段文本放在一个数组中,然后进行序列化成相应的字符串,提交翻译请求。
2.为什么返回总是授权失败?
首先,先检查你本机的时间是否正确。然后获取时间戳tt,需要取整的字符串。然后与分配的api_key字符串合并,计算MD5值为该次请求的hash_key值。
3.源语言是auto和指定语言有什么区别?
1) 设置为auto后,翻译引擎首先会去进行语言检测,确定源语言后,进行翻译,
这样就会比直接传入准确的源语言响应时间原理上来说会慢点,但是基本感受不出来;
2) 源语言的检测,也有精度问题,特短词条,特别是拉丁语系中,
多种语言都会出现的单词,会有检测错误的几率;
3) 请求auto,返回会是检测出来的源语言二字码。
3.对于自有专业术语库,能否应用到翻译中?
我们支持建立属于自己的专业术语库,并且翻译中会优先采用术语库中的翻译。术语库的建立,可以联系NxSun获取API接口。
4.什么收费模式?
我们统计请求的翻译请求接受到需要翻译的字符数(包括字符串中可能的格式字符数),按字符数收费。
5.一次请求中,翻译的词支持什么格式?
1)每次请求,都可以翻译多个词条,这些词条需要保存在数组中,然后对这个数组进行序列化。例如:'["hello world", "This is a book"]';
2)对于单个词条,支持格式:文本字符串、xml片段、html片段,json片段。