灵云 Machine Translation HTTP 开发手册
灵云翻译API通过HTTP接口对外提供多语种互译服务。
支持翻译方向:
简体中文与英文、维吾尔语、日语、韩语、俄语、法语之间的互译。
服务接口地址
http://api.hcicloud.com:8880/mt/translate
快速体验
接入方式申请
- 注册灵云开放平台
- 创建应用,按提示一次输入应用名称等信息
- 选择机器翻译能力并提交
- 应用创建后,在应用详情->应用授权界面中查看appKey与devKey
其中devKey 涉及调用者的身份认证,需妥善保管,切勿丢失。
CURL 访问示例
翻译中文你好为英文:
计算翻译请求所需的SESSION_KEY:
# 当前时间,格式必须按 yyyy-MM-dd HH:mm:ss
request_date='2019-04-02 10:10:11'
devkey=YOUR_DEVEKEY
# 连接这两个值,计算得出一个32位md5值,作为发起访问的`SESSION_KEY`
SESSION_KEY=md5('2019-04-02 10:10:11YOUR_DEVEKEY')
发起请求:
curl -X POST \
  http://api.hcicloud.com:8880/mt/translate \
  -H 'x-app-key: YOUR_APPKEY' \
  -H 'x-request-date: 2019-04-02 10:10:11' \
  -H 'x-result-format: json' \
  -H 'x-sdk-version: 8.0' \
  -H 'x-session-key: SESSION_KEY' \
  -H 'x-task-config: capkey=mt.cloud.translate,property=cn2en' \
  -H 'x-udid: 0:00ffbed8861abfebfbff000306c3' \
  -d '你好'
响应:
{
    "ResponseInfo": {
        "ResCode": "Success", 
        "ResMessage": "Success", 
        "ErrorNo": "0", 
        "Result_Token": "2_141_50_5665_20190402190936_2503817", 
        "ResultText": "Hello.", 
        "Score": "100"
    }
}
Java 语言示例
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TranslateDemo{
    public static void main(String[] args) throws Exception{
        String appkey = "YOUR_APPKEY";
        String devkey = "YOUR_DEVKEY";
        String translateUrl = "http://api.hcicloud.com:8880/mt/translate";
        String transData = "你好";
        String property = "cn2en";  // 翻译方向:中文到英文
        // 计算出session key
        Date currentTime = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String requestDate = dateFormat.format(currentTime);
        String sessionKey = MD5(requestDate+devkey);
        // 创建连接
        URL url=new URL(translateUrl);
        HttpURLConnection httpConn=(HttpURLConnection)url.openConnection();
        httpConn.setDoOutput(true);
        httpConn.setDoInput(true);
        httpConn.setRequestMethod("POST");
        // 设置请求参数,均为Header参数
        httpConn.setRequestProperty("x-app-key", appkey);
        httpConn.setRequestProperty("x-request-date", requestDate);
        httpConn.setRequestProperty("x-result-format", "json");
        httpConn.setRequestProperty("x-sdk-version", "7.0");
        httpConn.setRequestProperty("x-session-key", sessionKey);
        httpConn.setRequestProperty("x-task-config", "capkey=mt.cloud.translate,property="+property);
        httpConn.setRequestProperty("x-udid", "101:1234567890");
        httpConn.setRequestProperty("Charset", "UTF-8");
        // 发起连接
        httpConn.connect();
        // 发送待翻译的内容
        PrintWriter printWriter = new PrintWriter(httpConn.getOutputStream());
        printWriter.print(transData);
        printWriter.flush();
        printWriter.close();
        //获得响应状态
        int resultCode=httpConn.getResponseCode();
        StringBuffer stringBuffer=new StringBuffer();
        BufferedReader responseReader=new BufferedReader(new InputStreamReader(httpConn.getInputStream(),"UTF-8"))  ;
        String readLine = responseReader.readLine();
        responseReader.close();
        System.out.println(readLine);
    }
    public static String MD5(String key) {
        char hexDigits[] = {
                '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
                };
        try {
            byte[] btInput = key.getBytes();
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            mdInst.update(btInput);
            byte[] md = mdInst.digest();
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (Exception e) {
            return null;
        }
    }
}
Python 语言示例
Python2.6
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import hashlib
import time
import json
import urllib2
appkey = 'YOUR_APPKEY'
devkey = 'YOUR_DEVKEY'
url = 'http://api.hcicloud.com:8880/mt/translate'
requestDate = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
sessionKey = hashlib.md5(requestDate+devkey).hexdigest()
headers = {'x-app-key': appkey,\
        'x-request-date' : requestDate, \
        'x-result-format': 'json', \
        'x-sdk-version' : '7.0', \
        'x-session-key' : sessionKey, \
        'x-task-config': 'capkey=mt.cloud.translate,property=cn2en',\
        'x-udid':'101:1234567890'}
transdata = '你好'
request = urllib2.Request(url=url, data=transdata, headers=headers)
result = urllib2.urlopen(request).read()
mtresult = json.loads(result)
print json.dumps(mtresult,indent=1,ensure_ascii=False, encoding='UTF-8')
接口说明
接口请求
开发者通过POST请求发送指定字段来访问翻译服务。
HTTP POST
翻译API 通过此地址提供服务
http://api.hcicloud.com:8880/mt/translate
HTTP POST Request Headers
翻译接口的访问参数包含在Header中,如下表所示:
| 顺序 | 名称 | 值(例子) | 含义 | 备注 | 
|---|---|---|---|---|
| 1 | x-app-key | defa1234 | 应用标识 | 必选, 由灵云开放平台提供 | 
| 2 | x-sdk-version | 5.0 | sdk版本号 | 必选, 使用http接口时,可以指定为5.0 | 
| 3 | x-request-date | 2019-4-02 10:10:11 | 请求时间 | 必选,时间格式参考例子中的格式 | 
| 4 | x-task-config | capkey=mt.cloud.translate,property=cn2en | 任务参数信息 | 必选, 为name=value形式,多个参数以逗号隔开。 详见x-task-config 参数说明 | 
| 5 | x-session-key | 18EA9384AA34 | 请求数据签名 | 必选, x-session-key生成算法说明: x-session-key =md5(x-request-date + devkey) | 
| 6 | x-udid | 101:1234567890 | 设备标识 | 必选, 如使用设备取设备标识号, 如不使用设备设置为例子中的默认值 | 
| 7 | x-result-format | json | 返回结果的格式 | 非必选。 默认为xml, 支持json | 
HTTP POST Request Body
需要翻译文本,使用utf-8编码
请求样例
POST
http://api.hcicloud.com:8880/mt/Translate
Request Header
x-app-key: b95*****
x-sdk-version: 5.0
x-request-date: 2019-4-02 10:10:11
x-task-config: capkey=mt.cloud.translate,property=cn2en
x-session-key: 5474998d4c58b98172ab208bca2*****
x-udid: 101:1234567890
x-result-format:json
Host: api.hcicloud.com:8880
Content-Length: 6
Request Body
你好
接口应答
HTTP POST Response Headers
包含Response body的内容类型Content-type为 text/xml
HTTP POST Response Body
为json或xml格式的结果,根元素ResponseInfo描述如下:
| 顺序 | 名称 | 值(例子) | 含义 | 备注 | 
|---|---|---|---|---|
| 1 | ResCode | Success (FAILED) | 成功(处理中,失败) | 必选 | 
| 2 | ResMessage | 成功(处理中,失败) | 成功(处理中,失败) | 必选 | 
| 3 | Result_Token | 1_8_20_21608_20131118192712_0 | 结果令牌 | 成功时必选 | 
| 4 | ResultText | 你好 | 识别结果 | 成功时必选 | 
| 5 | Score | 5 | 结果评分 | 成功时必选 | 
| 6 | ErrorNo | 8 | 失败时错误码 | 失败时必选 | 
应答成功样例
Reponse
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 02 Apr 2019 09:46:35 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 165
Connection: keep-alive
time_used: 852
{
   "ResponseInfo": {
       "ResCode": "Success", 
       "ResMessage": "Success", 
       "ErrorNo": "0", 
       "Result_Token": "2_141_50_5646_20190402174635_2535917", 
       "ResultText": "Hello.", 
       "Score": "100"
   }
}
应答失败样例(填写了错误的appkey)
Response
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 02 Apr 2019 10:57:03 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 99
Connection: keep-alive
time_used: 1
{
    "ResponseInfo": {
        "ResCode": "Failed", 
        "ErrorNo": 20402, 
        "ResMessage": "Bad Value for Header x-app-key"
    }
}
x-task-config 参数说明
目前支持的参数为capkey与property
capkey 指定所需的翻译能力:
| capkey | 备注 | 
|---|---|
| mt.cloud.translate | 机器翻译,用 property字段区分翻译种类 | 
property 翻译属性:
| property | 备注 | 
|---|---|
| cn2en | 简体中文到英文 | 
| cn2uy | 简体中文到维吾尔文 | 
| cn2ja | 简体中文到日语 | 
| cn2ko | 简体中文到韩语 | 
| cn2ru | 简体中文到俄语 | 
| cn2fr | 简体中文到法语 | 
| en2cn | 英文到简体中文 | 
| uy2cn | 维吾尔文到简体中文 | 
| ja2cn | 日语到简体中文 | 
| ko2cn | 韩语到简体中文 | 
| ru2cn | 俄语到简体中文 | 
| fr2cn | 法语到简体中文 | 
响应代码ErrorNo
| 返回代码 | 错误原因说明 | 
|---|---|
| 0 | 成功 | 
| 10001 | 无资源可用 | 
| 10002 | 请求文本为空 | 
| 10003 | 解析参数错误 | 
| 10004 | 引擎错误,处理失败 | 
| 10005 | 请求文本非UTF-8编码 | 
| 10006 | 参数capkey缺失. | 
| 10007 | 参数capkey错误 | 
| 10008 | 参数property缺失. | 
| 10009 | 参数property错误 | 
| 10010 | 请求文本过长 |