五月天综合,欧美一区二区三区在线观看视频,久久中文字幕乱码久久午夜加勒比 ,亚洲一区 视频 在线

幫助與文檔 > 產品文檔 > 自然語言翻譯服務 > API文檔 > 文檔翻譯
文檔翻譯

文檔翻譯 API 簡介

說明

Hi,您好,歡迎使用有道智云文檔翻譯API接口服務。

本文檔主要針對需要集成HTTP API的技術開發(fā)工程師,詳細描述文檔翻譯能力相關的技術內容。

如果您有與我們商務合作的需求,可以通過以下方式聯(lián)系我們:

商務郵箱: AIcloud_Business@corp.youdao.com

如果您對文檔內容有任何疑問,可以通過以下幾種方式聯(lián)系我們:

客服QQ:1906538062

智云翻譯技術交流QQ 1群: 652880659

智云翻譯技術交流QQ 2群: 669384425

智云翻譯技術交流QQ 3群: 807539209

智云翻譯技術交流QQ 4群: 936752411

聯(lián)系郵箱: zhiyun@corp.youdao.com

溫馨提示:

  • 本文檔主要針對開發(fā)人員,接入測試前需要獲取應用ID和應用密鑰;如果您還沒有,請按照新手指南 獲取。
  • 平臺向每個賬戶贈送50元的體驗金,供用戶集成前測試所用,具體資費規(guī)則詳見 文檔翻譯服務報價

接口說明

文檔翻譯API接口提供有道的文檔翻譯服務。您只需要通過調用文檔翻譯API,傳入文檔的Base64編碼,指定源語言與目標語言,通過POST請求方式,就可以將文檔中的文字內容進行翻譯。

文檔翻譯 API HTTPS地址:

  • 文檔上傳接口

https://openapi.youdao.com/file_trans/upload

  • 進度查詢接口

https://openapi.youdao.com/file_trans/query

  • 文檔下載接口

https://openapi.youdao.com/file_trans/download

協(xié)議須知

調用方在集成文本翻譯API時,請遵循以下規(guī)則。

規(guī)則 描述
傳輸方式 HTTPS
請求方式 POST
字符編碼 統(tǒng)一使用UTF-8 編碼
請求格式 表單
響應格式 JSON

接口調用參數(shù)

調用API需要向接口發(fā)送以下字段來訪問服務。

  • 文檔上傳接口
字段名 類型 含義 必填 備注
q text 待翻譯文檔 True 文檔的Base64編碼,大小限制為40M(編碼后)
fileName text 文檔名稱 True
fileType text 文檔類型 True docx/pdf/doc/jpg/png/bmp/ppt/pptx/xlsx
langFrom text 源語言 True 見下方支持語言表
langTo text 目標語言 True 見下方支持語言表
appKey text 應用ID True 可在應用管理 查看
salt text UUID True uuid,唯一通用識別碼
curtime text 當前UTC時間戳(秒) True 時間戳timestamp
sign text 簽名 True sha256(應用ID+input+salt+curtime+應用密鑰)
docType text 服務器響應類型 True json
signType text 簽名類型 True v3
  • 進度查詢接口
字段名 類型 含義 必填 備注
flownumber text 文檔流水號 True 從文檔上傳接口獲取
appKey text 應用ID True 可在應用管理 查看
salt text UUID True
curtime text 當前UTC時間戳(秒) True
sign text 簽名 True sha256(應用ID+input+salt+curtime+應用密鑰)
docType text 服務器響應類型 True json
signType text 簽名類型 True v3
  • 文檔下載接口
字段名 類型 含義 必填 備注
flownumber text 文檔流水號 True 從文檔上傳接口獲取
downloadFileType text 下載類型 True word/ppt/xlsx/pdf
appKey text 應用ID True 可在應用管理 查看
salt text UUID True
curtime text 當前UTC時間戳(秒) True
sign text 簽名 True sha256(應用ID+input+salt+curtime+應用密鑰)
docType text 服務器響應類型 True json
signType text 簽名類型 True v3

簽名生成方法如下:

sha256(應用ID + input + salt + curtime + 應用密鑰)

其中,input的計算方式為:

  • 文檔上傳接口

input = Base64(q)字符串(當Base64(q)長度小于等于20) 或 input = Base64(q)前10個字符前10個字符 + Base64(q)長度 + Base64(q)后十個字符(當Base64(q)長度大于20)

  • 其它接口

input = flownumber字符串(當flownumber長度小于等于20)。 或 input = flownumber前10個字符前10個字符 + flownumber長度 + flownumber后十個字符(當flownumber長度大于20)

不同語言獲取時間戳,請參看 此鏈接

如果對簽名有疑問,可以參看文檔末尾各語言demo。

輸出結果

返回的結果是json格式,具體說明如下:

  • 文檔上傳
字段名 類型 字段說明
errorCode text 錯誤碼,一定存在
flownumber text 文檔流水號,上傳成功一定存在
  • 進度查詢接口
字段名 類型 字段說明
errorCode text 錯誤碼,一定存在
status text 進度狀態(tài)碼,查詢成功一定存在
statusString text 進度狀態(tài)描述,查詢成功一定存在
  • 文檔下載接口 若Content-Typeapplication/json,表示下載失敗,返回值為json,否則返回值為文件流。
字段名 類型 字段說明
errorCode text 錯誤碼,下載失敗時存在

示例

  • 文檔上傳接口

返回結果:

{
    "errorCode": "0",   //錯誤碼
    "flownumber": "C9193F8204484E51B7DDA604137AEE3D"   //文檔流水號
}
  • 進度查詢接口

返回結果:

{
    "errorCode": "0",   //錯誤碼
    "status": 1,   //狀態(tài)碼
    "statusString": "上傳中'   //狀態(tài)描述
}
  • 文檔下載接口

失敗時返回結果:

{
    "errorCode": "0"   //錯誤碼
}

支持的語言表

源語言 目標語言
中文 英文
英文 中文
中文 日語
日語 中文
中文 韓語
韓語 中文
中文 俄語
俄語 中文
中文 法語
法語 中文
中文 泰語
泰語 中文
越南語 中文
印尼語 中文
阿拉伯語 中文
德語 中文
意大利語 中文
荷蘭語 中文
西班牙語 英文
葡萄牙語 中文
英文 法語
法語 英文
英文 泰語
泰語 英文
印地語 英文
越南語 英文
阿拉伯語 英文
日語 英文
俄語 英文
韓語 英文

下表為各語言對應代碼:

英文名 中文名 代碼
Arabic 阿拉伯語 ar
German 德語 de
English 英語 en
Spanish 西班牙語 es
French 法語 fr
Indonesian 印度尼西亞語 id
Italian 意大利語 it
Japanese 日語 ja
Korean 韓語 ko
Dutch 荷蘭語 nl
Portuguese 葡萄牙語 pt
Russian 俄語 ru
hai 泰語 th
Vietnamese 越南語 vi
Chinese 中文 zh-CHS
Hindi 印地語 hi
Dutch 荷蘭語 nl

文檔狀態(tài)碼

狀態(tài)碼 含義
1 上傳中
2 轉換中
3 翻譯中
4 已完成
5 生成中
-1 上傳失敗
-2 轉換失敗
-3 翻譯失敗
-4 已取消
-5 生成失敗
-10 翻譯失敗
-11 文件被刪除

服務配置

上傳格式 下載格式 單文檔大小(M) 支持語言
Word/PDF Word 40M內(編碼后) 中英互譯

錯誤代碼列表

錯誤碼 含義
101 缺少必填的參數(shù),首先確保必填參數(shù)齊全,然后,確認參數(shù)書寫是否正確。
102 不支持的語言類型
103 翻譯文本過長
104 不支持的API類型
105 不支持的簽名類型
106 不支持的響應類型
107 不支持的傳輸加密類型
108 應用ID無效,注冊賬號,登錄后臺創(chuàng)建應用和實例并完成綁定,可獲得應用ID和應用密鑰等信息
109 batchLog格式不正確
110 無相關服務的有效實例,應用沒有綁定服務實例,可以新建服務實例,綁定服務實例。注:某些服務的翻譯結果發(fā)音需要tts實例,需要在控制臺創(chuàng)建語音合成實例綁定應用后方能使用。
111 開發(fā)者賬號無效
112 請求服務無效
113 q不能為空
114 不支持的圖片傳輸方式
201 解密失敗,可能為DES,BASE64,URLDecode的錯誤
202 簽名檢驗失敗,如果確認應用ID和應用密鑰的正確性,仍返回202,一般是編碼問題。請確保翻譯文本 q 為UTF-8編碼.
203 訪問IP地址不在可訪問IP列表
205 請求的接口與應用的平臺類型不一致,確保接入方式(Android SDK、IOS SDK、API)與創(chuàng)建的應用平臺類型一致。如有疑問請參考入門指南
206 因為時間戳無效導致簽名校驗失敗
207 重放請求(接口salt+curtime來防重放(即一個請求不可以被請求2次),所以salt最好為UUID。)
301 辭典查詢失敗
302 翻譯查詢失敗
303 服務端的其它異常
304 會話閑置太久超時
401 賬戶已經欠費停
402 offlinesdk不可用
411 訪問頻率受限,請稍后訪問
412 長請求過于頻繁,請稍后訪問
1001 無效的OCR類型
1002 不支持的OCR image類型
1003 不支持的OCR Language類型
1004 識別圖片過大
1201 圖片base64解密失敗
1301 OCR段落識別失敗
1411 訪問頻率受限
1412 超過最大識別字節(jié)數(shù)
2003 不支持的語言識別Language類型
2004 合成字符過長
2005 不支持的音頻文件類型
2006 不支持的發(fā)音類型
2201 解密失敗
2301 服務的異常
2411 訪問頻率受限,請稍后訪問
2412 超過最大請求字符數(shù)
3001 不支持的語音格式
3002 不支持的語音采樣率
3003 不支持的語音聲道
3004 不支持的語音上傳類型
3005 不支持的語言類型
3006 不支持的識別類型
3007 識別音頻文件過大
3008 識別音頻時長過長
3009 不支持的音頻文件類型
3010 不支持的發(fā)音類型
3201 解密失敗
3301 語音識別失敗
3302 語音翻譯失敗
3303 服務的異常
3411 訪問頻率受限,請稍后訪問
3412 超過最大請求字符數(shù)
4001 不支持的語音識別格式
4002 不支持的語音識別采樣率
4003 不支持的語音識別聲道
4004 不支持的語音上傳類型
4005 不支持的語言類型
4006 識別音頻文件過大
4007 識別音頻時長過長
4201 解密失敗
4301 語音識別失敗
4303 服務的異常
4411 訪問頻率受限,請稍后訪問
4412 超過最大請求時長
5001 無效的OCR類型
5002 不支持的OCR image類型
5003 不支持的語言類型
5004 識別圖片過大
5005 不支持的圖片類型
5006 文件為空
5201 解密錯誤,圖片base64解密失敗
5301 OCR段落識別失敗
5411 訪問頻率受限
5412 超過最大識別流量
9001 不支持的語音格式
9002 不支持的語音采樣率
9003 不支持的語音聲道
9004 不支持的語音上傳類型
9005 不支持的語音識別 Language類型
9301 ASR識別失敗
9303 服務器內部錯誤
9411 訪問頻率受限(超過最大調用次數(shù))
9412 超過最大處理語音長度
10001 無效的OCR類型
10002 不支持的OCR image類型
10004 識別圖片過大
10201 圖片base64解密失敗
10301 OCR段落識別失敗
10411 訪問頻率受限
10412 超過最大識別流量
11001 不支持的語音識別格式
11002 不支持的語音識別采樣率
11003 不支持的語音識別聲道
11004 不支持的語音上傳類型
11005 不支持的語言類型
11006 識別音頻文件過大
11007 識別音頻時長過長,最大支持30s
11201 解密失敗
11301 語音識別失敗
11303 服務的異常
11411 訪問頻率受限,請稍后訪問
11412 超過最大請求時長
12001 圖片尺寸過大
12002 圖片base64解密失敗
12003 引擎服務器返回錯誤
12004 圖片為空
12005 不支持的識別圖片類型
12006 圖片無匹配結果
13001 不支持的角度類型
13002 不支持的文件類型
13003 表格識別圖片過大
13004 文件為空
13301 表格識別失敗
15001 需要圖片
15002 圖片過大(1M)
15003 服務調用失敗
17001 需要圖片
17002 圖片過大(1M)
17003 識別類型未找到
17004 不支持的識別類型
17005 服務調用失敗
18001 需要參數(shù)
18002 需要流水號
18003 需要文件名
18004 需要文件類型
18005 需要源語言
18006 需要目標語言
18007 需要翻譯文件
18008 上傳文件失敗
18009 錯誤的流水號
18010 未完成
18011 轉換失敗
18012 找不到文件
18013 需要文件下載類型
18014 不支持的語言
18015 不支持的文件類型
18016 不支持的下載類型
18017 文件過大

常用語言 Demo

Java 示例

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

public class Demo {

    private static Logger logger = LoggerFactory.getLogger(Demo.class);

    private static final String YOUDAO_URL_UPLOAD = "https://openapi.youdao.com/file_trans/upload";

    private static final String YOUDAO_URL_QUERY = "https://openapi.youdao.com/file_trans/query";

    private static final String YOUDAO_URL_DOWNLOAD = "https://openapi.youdao.com/file_trans/download";

    private static final String APP_KEY = "您的應用ID";

    private static final String APP_SECRET = "您的應用密鑰";

    public static void main(String[] args) throws IOException {
        upload();
        query();
        download();
    }
    
    public static void upload() throws IOException {
        Map<String,String> params = new HashMap<String,String>();
        String q = loadAsBase64("文件的路徑");
        String salt = String.valueOf(System.currentTimeMillis());
        String curtime = String.valueOf(System.currentTimeMillis() / 1000);
        String signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET;
        String sign = getDigest(signStr);
        params.put("q", q);
        params.put("fileName", "文件名稱");
        params.put("fileType", "文件類型");
        params.put("langFrom", "源語言");
        params.put("langTo", "目標語言");
        params.put("appKey", APP_KEY);
        params.put("salt", salt);
        params.put("curtime", curtime);
        params.put("sign", sign);
        params.put("docType", "json");
        params.put("signType", "v3");
        String result = requestForHttp(YOUDAO_URL_UPLOAD, params);
        /** 處理結果 */
        System.out.println(result);
    }
    
    public static void query() throws IOException {
        Map<String,String> params = new HashMap<String,String>();
        String flownumber = "文件流水號";
        String salt = String.valueOf(System.currentTimeMillis());
        String curtime = String.valueOf(System.currentTimeMillis() / 1000);
        String signStr = APP_KEY + truncate(flownumber) + salt + curtime + APP_SECRET;
        String sign = getDigest(signStr);
        params.put("flownumber", flownumber);
        params.put("appKey", APP_KEY);
        params.put("salt", salt);
        params.put("curtime", curtime);
        params.put("sign", sign);
        params.put("docType", "json");
        params.put("signType", "v3");
        String result = requestForHttp(YOUDAO_URL_QUERY, params);
        /** 處理結果 */
        System.out.println(result);
    }
    
    public static void download() throws IOException {
        Map<String,String> params = new HashMap<String,String>();
        String flownumber = "文件流水號";
        String salt = String.valueOf(System.currentTimeMillis());
        String curtime = String.valueOf(System.currentTimeMillis() / 1000);
        String signStr = APP_KEY + truncate(flownumber) + salt + curtime + APP_SECRET;
        String sign = getDigest(signStr);
        params.put("flownumber", flownumber);
        params.put("downloadFileType", "文件下載類型");
        params.put("appKey", APP_KEY);
        params.put("salt", salt);
        params.put("curtime", curtime);
        params.put("sign", sign);
        params.put("docType", "json");
        params.put("signType", "v3");
        String result = requestForHttp(YOUDAO_URL_DOWNLOAD, params);
        /** 處理結果 */
        System.out.println(result);
    }

    public static String requestForHttp(String url,Map<String,String> params) throws IOException {
        String result = "";

        /** 創(chuàng)建HttpClient */
        CloseableHttpClient httpClient = HttpClients.createDefault();

        /** httpPost */
        HttpPost httpPost = new HttpPost(url);
        List<NameValuePair> paramsList = new ArrayList<NameValuePair>();
        Iterator<Map.Entry<String,String>> it = params.entrySet().iterator();
        while(it.hasNext()){
            Map.Entry<String,String> en = it.next();
            String key = en.getKey();
            String value = en.getValue();
            paramsList.add(new BasicNameValuePair(key,value));
        }
        httpPost.setEntity(new UrlEncodedFormEntity(paramsList,"UTF-8"));
        CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
        try{
            HttpEntity httpEntity = httpResponse.getEntity();
            result = EntityUtils.toString(httpEntity,"UTF-8");
            EntityUtils.consume(httpEntity);
        }finally {
            try{
                if(httpResponse!=null){
                    httpResponse.close();
                }
            }catch(IOException e){
                logger.info("## release resouce error ##" + e);
            }
        }
        return result;
    }

    /**
     * 生成加密字段
     */
    public static String getDigest(String string) {
        if (string == null) {
            return null;
        }
        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        byte[] btInput = string.getBytes(StandardCharsets.UTF_8);
        try {
            MessageDigest mdInst = MessageDigest.getInstance("SHA-256");
            mdInst.update(btInput);
            byte[] md = mdInst.digest();
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (byte byte0 : md) {
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
    }

    public static String loadAsBase64(String imgFile)
  {//將文件轉化為字節(jié)數(shù)組字符串,并對其進行Base64編碼處理

    File file = new File(imgFile);
    if(!file.exists()){
        logger.error("文件不存在");
        return null;
    }
    InputStream in = null;
    byte[] data = null;
      //讀取文件字節(jié)數(shù)組
    try
    {
        in = new FileInputStream(imgFile);
        data = new byte[in.available()];
        in.read(data);
        in.close();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
      //對字節(jié)數(shù)組Base64編碼
    return Base64.getEncoder().encodeToString(data);//返回Base64編碼過的字節(jié)數(shù)組字符串
  }

  public static String truncate(String q) {
        if (q == null) {
            return null;
        }
        int len = q.length();
        String result;
        return len <= 20 ? q : (q.substring(0, 10) + len + q.substring(len - 10, len));
    }
}

Python 示例

# -*- coding: utf-8 -*-
import sys
import uuid
import requests
import base64
import hashlib
import time

reload(sys)
sys.setdefaultencoding('utf-8')

YOUDAO_URL_UPLOAD = 'https://openapi.youdao.com/file_trans/upload'
YOUDAO_URL_QUERY = 'https://openapi.youdao.com/file_trans/query'
YOUDAO_URL_DOWNLOAD = 'https://openapi.youdao.com/file_trans/download'
APP_KEY = '您的應用ID'
APP_SECRET = '您的應用密鑰'


def truncate(q):
    if q is None:
        return None
    q_utf8 = q.decode("utf-8")
    size = len(q_utf8)
    return q_utf8 if size <= 20 else q_utf8[0:10] + str(size) + q_utf8[size - 10:size]


def encrypt(signStr):
    hash_algorithm = hashlib.sha256()
    hash_algorithm.update(signStr.encode('utf-8'))
    return hash_algorithm.hexdigest()


def do_request(url, data):
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    return requests.post(url, data=data, headers=headers)


def upload():
    f = open(r'文件的路徑', 'rb')  # 二進制方式打開文件
    q = base64.b64encode(f.read())  # 讀取文件內容,轉換為base64編碼
    f.close()
    salt = str(uuid.uuid1())
    curtime = str(int(time.time()))
    signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET
    sign = encrypt(signStr)

    data = {}
    data['q'] = q
    data['fileName'] = '文件名稱'
    data['fileType'] = '文件類型'
    data['langFrom'] = '源語言'
    data['langTo'] = '目標語言'
    data['appKey'] = APP_KEY
    data['salt'] = salt
    data['curtime'] = curtime
    data['sign'] = sign
    data['docType'] = 'json'
    data['signType'] = 'v3'

    response = do_request(YOUDAO_URL_UPLOAD, data)
    print response.content


def query():
    flownumber = '文件流水號'
    salt = str(uuid.uuid1())
    curtime = str(int(time.time()))
    signStr = APP_KEY + truncate(flownumber) + salt + curtime + APP_SECRET
    sign = encrypt(signStr)

    data = {}
    data['flownumber'] = flownumber
    data['appKey'] = APP_KEY
    data['salt'] = salt
    data['curtime'] = curtime
    data['sign'] = sign
    data['docType'] = 'json'
    data['signType'] = 'v3'

    response = do_request(YOUDAO_URL_QUERY, data)
    print response.content


def download():
    flownumber = '文件流水號'
    salt = str(uuid.uuid1())
    curtime = str(int(time.time()))
    signStr = APP_KEY + truncate(flownumber) + salt + curtime + APP_SECRET
    sign = encrypt(signStr)

    data = {}
    data['flownumber'] = flownumber
    data['downloadFileType'] = '文件下載類型'
    data['appKey'] = APP_KEY
    data['salt'] = salt
    data['curtime'] = curtime
    data['sign'] = sign
    data['docType'] = 'json'
    data['signType'] = 'v3'

    response = do_request(YOUDAO_URL_DOWNLOAD, data)
    print response.content


if __name__ == '__main__':
    upload()
    query()
    download()

C# 示例

using System;
using System.IO;
using System.Net;
using System.Text;
using System.Collections.Generic;
using System.Security.Cryptography;

namespace zhiyun_csharp_demo
{
    class Demo
    {
        public static void Main()
        {
            Upload();
            Query();
            Download();
        }
        
        protected static void Upload() {
            Dictionary dic = new Dictionary();
            string appKey = "您的應用ID";
            string appSecret = "您的應用密鑰";
            string url = "https://openapi.youdao.com/file_trans/upload";
            string q = LoadAsBase64("文件的路徑");
            string salt = DateTime.Now.Millisecond.ToString();
            TimeSpan ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc));
            long millis = (long) ts.TotalMilliseconds;
            string curtime = Convert.ToString(millis / 1000);
            string signStr = appKey + Truncate(q) + salt + curtime + appSecret;;
            string sign = ComputeHash(signStr, new SHA256CryptoServiceProvider());
            dic.Add("q", System.Web.HttpUtility.UrlEncode(q));
            dic.Add("fileName", "文件名稱");
            dic.Add("fileType", "文件類型");
            dic.Add("langFrom", "源語言");
            dic.Add("langTo", "目標語言");
            dic.Add("appKey", appKey);
            dic.Add("salt", salt);
            dic.Add("curtime", curtime);
            dic.Add("sign", sign);
            dic.Add("docType", "json");
            dic.Add("signType", "v3");
            string result = Post(url, dic);
            Console.WriteLine(result);
        }
        
        protected static void Query() {
            Dictionary dic = new Dictionary();
            string appKey = "您的應用ID";
            string appSecret = "您的應用密鑰";
            string url = "https://openapi.youdao.com/file_trans/query";
            string flownumber = "文件流水號";
            string salt = DateTime.Now.Millisecond.ToString();
            TimeSpan ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc));
            long millis = (long) ts.TotalMilliseconds;
            string curtime = Convert.ToString(millis / 1000);
            string signStr = appKey + Truncate(flownumber) + salt + curtime + appSecret;;
            string sign = ComputeHash(signStr, new SHA256CryptoServiceProvider());
            dic.Add("flownumber", flownumber);
            dic.Add("appKey", appKey);
            dic.Add("salt", salt);
            dic.Add("curtime", curtime);
            dic.Add("sign", sign);
            dic.Add("docType", "json");
            dic.Add("signType", "v3");
            string result = Post(url, dic);
            Console.WriteLine(result);
        }
        
        protected static void Download() {
            Dictionary dic = new Dictionary();
            string appKey = "您的應用ID";
            string appSecret = "您的應用密鑰";
            string url = "https://openapi.youdao.com/file_trans/download";
            string flownumber = "文件流水號";
            string salt = DateTime.Now.Millisecond.ToString();
            TimeSpan ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc));
            long millis = (long) ts.TotalMilliseconds;
            string curtime = Convert.ToString(millis / 1000);
            string signStr = appKey + Truncate(flownumber) + salt + curtime + appSecret;;
            string sign = ComputeHash(signStr, new SHA256CryptoServiceProvider());
            dic.Add("flownumber", flownumber);
            dic.Add("downloadFileType", "文件下載類型");
            dic.Add("appKey", appKey);
            dic.Add("salt", salt);
            dic.Add("curtime", curtime);
            dic.Add("sign", sign);
            dic.Add("docType", "json");
            dic.Add("signType", "v3");
            string result = Post(url, dic);
            Console.WriteLine(result);
        }

        protected static string ComputeHash(string input, HashAlgorithm algorithm)
        {
          Byte[] inputBytes = Encoding.UTF8.GetBytes(input);
          Byte[] hashedBytes = algorithm.ComputeHash(inputBytes);
          return BitConverter.ToString(hashedBytes).Replace("-", "");
        }

        protected static string Truncate(string q)
        {
            if (q == null)
            {
               return null;
            }
            int len = q.Length;
            return len <= 20 ? q : (q.Substring(0, 10) + len + q.Substring(len - 10, 10));
        }

        protected static string LoadAsBase64(string filename)
        {
            try
            {
                FileStream filestream = new FileStream(filename, FileMode.Open);
                byte[] arr = new byte[filestream.Length];
                filestream.Position = 0;
                filestream.Read(arr, 0, (int)filestream.Length);
                filestream.Close();
                return Convert.ToBase64String(arr);
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        protected static string Post(string url, Dictionary dic)
        {
            string result = "";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            StringBuilder builder = new StringBuilder();
            int i = 0;
            foreach (var item in dic)
            {
                if (i > 0)
                    builder.Append("&");
                builder.AppendFormat("{0}={1}", item.Key, item.Value);
                i++;
            }
            byte[] data = Encoding.UTF8.GetBytes(builder.ToString());
            req.ContentLength = data.Length;
            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();
            }
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            Stream stream = resp.GetResponseStream();
            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                result = reader.ReadToEnd();
            }
            return result;
        }
    }
}

PHP 示例

<?php
define("CURL_TIMEOUT",   2000);
define("URL_UPLOAD",     "https://openapi.youdao.com/file_trans/upload");
define("URL_QUERY",      "https://openapi.youdao.com/file_trans/query");
define("URL_DOWNLOAD",   "https://openapi.youdao.com/file_trans/download");
define("APP_KEY",        "您的應用ID"); // 替換為您的應用ID
define("SEC_KEY",        "您的應用密鑰"); // 替換為您的密鑰

function upload()
{
     $file = "文件的路徑";
     $fp = fopen($file, "r") or die("Can't open file");
     // base64編碼
     $q = base64_encode(fread($fp, filesize($file)));
     fclose($fp);
     $salt = create_guid();
     $curtime = strtotime("now");
     $signStr = APP_KEY . truncate($q) . $salt . $curtime . SEC_KEY;
     $args = array(
        'appKey' => APP_KEY,
        'salt' => $salt,
     );
     $args['q'] = $q;
     $args['fileName'] = '文件名稱';
     $args['fileType'] = '文件類型';
     $args['langFrom'] = '源語言';
     $args['langTo'] = '目標語言';
     $args['curtime'] = $curtime;
     $args['sign'] = hash("sha256", $signStr);
     $args['docType'] = 'json';
     $args['signType'] = 'v3';
     $ret = call(URL_UPLOAD, $args);
     print_r($ret);
     $ret = json_decode($ret, true);
     return $ret;
}

function query()
{
     $flownumber = "文件流水號";
     $salt = create_guid();
     $curtime = strtotime("now");
     $signStr = APP_KEY . truncate($flownumber) . $salt . $curtime . SEC_KEY;
     $args = array(
        'appKey' => APP_KEY,
        'salt' => $salt,
     );
     $args['flownumber'] = $flownumber;
     $args['curtime'] = $curtime;
     $args['sign'] = hash("sha256", $signStr);
     $args['docType'] = 'json';
     $args['signType'] = 'v3';
     $ret = call(URL_QUERY, $args);
     print_r($ret);
     $ret = json_decode($ret, true);
     return $ret;
}

function download()
{
     $flownumber = "文件流水號";
     $salt = create_guid();
     $curtime = strtotime("now");
     $signStr = APP_KEY . truncate($flownumber) . $salt . $curtime . SEC_KEY;
     $args = array(
        'appKey' => APP_KEY,
        'salt' => $salt,
     );
     $args['flownumber'] = $flownumber;
     $args['downloadFileType'] = '文件下載類型';
     $args['curtime'] = $curtime;
     $args['sign'] = hash("sha256", $signStr);
     $args['docType'] = 'json';
     $args['signType'] = 'v3';
     $ret = call(URL_DOWNLOAD, $args);
     print_r($ret);
     $ret = json_decode($ret, true);
     return $ret;
}

// 發(fā)起網絡請求
function call($url, $args=null, $method="post", $testflag = 0, $timeout = CURL_TIMEOUT, $headers=array())
{
    $ret = false;
    $i = 0;
    while($ret === false)
    {
        if($i > 1)
            break;
        if($i > 0)
        {
            sleep(1);
        }
         $ret = callOnce($url, $args, $method, false, $timeout, $headers);
         $i++;
    }
    return $ret;
}

function callOnce($url, $args=null, $method="post", $withCookie = false, $timeout = CURL_TIMEOUT, $headers=array())
{
    $ch = curl_init();
    if($method == "post")
    {
        $data = convert($args);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_POST, 1);
    }
    else
    {
        $data = convert($args);
        if($data)
        {
            if(stripos($url, "?") > 0)
            {
                 $url .= "&$data";
            }
            else
            {
                 $url .= "?$data";
            }
        }
    }
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if(!empty($headers))
    {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }
    if($withCookie)
    {
        curl_setopt($ch, CURLOPT_COOKIEJAR, $_COOKIE);
    }
    $r = curl_exec($ch);
    curl_close($ch);
    return $r;
}

function convert(&$args)
{
    $data = '';
    if (is_array($args))
    {
        foreach ($args as $key=>$val)
        {
            if (is_array($val))
            {
                foreach ($val as $k=>$v)
                {
                     $data .= $key.'['.$k.']='.rawurlencode($v).'&';
                }
            }
            else
            {
                     $data .="$key=".rawurlencode($val)."&";
            }
        }
        return trim($data, "&");
    }
    return $args;
}

// uuid generator
function create_guid(){
    $microTime = microtime();
    list($a_dec, $a_sec) = explode(" ", $microTime);
    $dec_hex = dechex($a_dec* 1000000);
    $sec_hex = dechex($a_sec);
    ensure_length($dec_hex, 5);
    ensure_length($sec_hex, 6);
    $guid = "";
    $guid .= $dec_hex;
    $guid .= create_guid_section(3);
    $guid .= '-';
    $guid .= create_guid_section(4);
    $guid .= '-';
    $guid .= create_guid_section(4);
    $guid .= '-';
    $guid .= create_guid_section(4);
    $guid .= '-';
    $guid .= $sec_hex;
    $guid .= create_guid_section(6);
    return $guid;
}

function truncate($q) {
    $len = abslength($q);
    return $len <= 20 ? $q : (mb_substr($q, 0, 10) . $len . mb_substr($q, $len - 10, $len));
}

function abslength($str)
{
    if(empty($str)){
        return 0;
    }
    if(function_exists('mb_strlen')){
        return mb_strlen($str,'utf-8');
    }
    else {
        preg_match_all("/./u", $str, $ar);
        return count($ar[0]);
    }
}

function ensure_length(&$string, $length){
    $strlen = strlen($string);
    if($strlen < $length)
    {
         $string = str_pad($string, $length, "0");
    }
    else if($strlen > $length)
    {
         $string = substr($string, 0, $length);
    }
}

function create_guid_section($characters){
    $return = "";
    for($i = 0; $i < $characters; $i++)
    {
         $return .= dechex(mt_rand(0,15));
    }
    return $return;
}
// 輸入
upload();
query();
download();
?>