日韩高清免费不卡一区,蜜桃精品人妻一区二区三区,三级黄色老熟妇视频网,台湾无码av一区二区三区

幫助與文檔 > 產(chǎn)品文檔 > 自然語(yǔ)言翻譯服務(wù) > API文檔 > 批量文本翻譯
批量文本翻譯

批量翻譯 API 簡(jiǎn)介

批量翻譯:支持一次傳入多個(gè)文本進(jìn)行批量翻譯,大幅減少http網(wǎng)絡(luò)應(yīng)答。適合多段文本批量翻譯的場(chǎng)景。

說明

Hi,您好,歡迎使用有道智云批量翻譯API接口服務(wù)。如果您想快速體驗(yàn)服務(wù),建議您前往翻譯體驗(yàn)中心 或者在體驗(yàn)中心右下側(cè)找到小程序二維碼,掃描進(jìn)行體驗(yàn)。

本文檔主要針對(duì)需要集成HTTP API的技術(shù)開發(fā)工程師,詳細(xì)描述批量翻譯能力相關(guān)的技術(shù)內(nèi)容。

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

商務(wù)郵箱: AIcloud_Business@corp.youdao.com

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

客服QQ:1906538062

智云翻譯技術(shù)交流QQ 1群: 652880659

智云翻譯技術(shù)交流QQ 2群: 669384425

智云翻譯技術(shù)交流QQ 3群: 807539209

智云翻譯技術(shù)交流QQ 4群: 936752411

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

溫馨提示:

  • 本文檔主要針對(duì)開發(fā)人員,接入測(cè)試前需要獲取 應(yīng)用ID應(yīng)用密鑰 ;如果您還沒有,請(qǐng)按照新手指南 獲取。
  • 平臺(tái)向每個(gè)賬戶贈(zèng)送50元的體驗(yàn)金,供用戶集成前測(cè)試所用,具體資費(fèi)規(guī)則詳見 批量翻譯服務(wù)報(bào)價(jià)

接口說明

批量翻譯API接口提供有道的翻譯服務(wù),包含了中英翻譯和小語(yǔ)種翻譯功能。您只需要通過調(diào)用批量翻譯API,傳入待翻譯的內(nèi)容,并指定要翻譯的源語(yǔ)言(支持源語(yǔ)言語(yǔ)種自動(dòng)檢測(cè))和目標(biāo)語(yǔ)言種類,就可以得到相應(yīng)的翻譯結(jié)果。

批量翻譯API HTTPS地址:

https://openapi.youdao.com/v2/api

協(xié)議須知

調(diào)用方在集成批量翻譯API時(shí),請(qǐng)遵循以下規(guī)則。

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

接口調(diào)用參數(shù)

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

字段名 類型 含義 必填 備注
q text 要翻譯的文本.可指定多個(gè) True q=蘋果&q=橘子
from text 源語(yǔ)言 True 語(yǔ)言列表 (可設(shè)置為auto)
to text 目標(biāo)語(yǔ)言 True 語(yǔ)言列表
appKey text 應(yīng)用標(biāo)識(shí)(應(yīng)用ID) True 可在 應(yīng)用管理 查看
salt text 隨機(jī)字符串,可使用UUID進(jìn)行生產(chǎn) True hfa12lak56ja9gjl
sign text 簽名信息:sha256(appKey+q+salt+密鑰) True xxxxx
ext text 翻譯結(jié)果音頻格式,支持mp3 false mp3
voice text 翻譯結(jié)果發(fā)音選擇,0為女聲,1為男聲,默認(rèn)為女聲 false 0
signType text 簽名類型 true v3
detectLevel text 語(yǔ)言檢測(cè)粒度描述。影響翻譯時(shí)i字段的內(nèi)容合并做語(yǔ)言檢測(cè),還是分別進(jìn)行檢測(cè);取值為0或1,取值為0時(shí)合并檢測(cè),取值為1時(shí)分別檢測(cè) false 1
detectFilter text 是否進(jìn)行語(yǔ)種檢測(cè),當(dāng)判定為非必要翻譯時(shí)返回原文,true:進(jìn)行過濾,false:不過濾 false 默認(rèn)true
verifyLang text 是否對(duì)語(yǔ)言方向進(jìn)行二次核實(shí)。當(dāng)用戶不確定傳入的參數(shù)是否正確時(shí),可將該參數(shù)置為true,表示需要進(jìn)行二次核實(shí),系統(tǒng)將額外返回一個(gè)檢測(cè)到的核實(shí)結(jié)果.默認(rèn)為false

簽名生成方法如下: signType=v3; sign=sha256(應(yīng)用ID+input+salt+curtime+應(yīng)用密鑰); 其中,input的計(jì)算方式為:input=q前10個(gè)字符 + q長(zhǎng)度 + q后10個(gè)字符(當(dāng)q長(zhǎng)度大于20)或 input=q字符串(當(dāng)q長(zhǎng)度小于等于20);

注意:

  1. voice 沒有男聲的,會(huì)輸出女聲。
  2. 發(fā)音需要在控制臺(tái)創(chuàng)建tts應(yīng)用才能使用,否則點(diǎn)擊發(fā)音會(huì)報(bào)110錯(cuò)誤。
  3. 接口salt+curtime來防重放(即一個(gè)請(qǐng)求不可以被請(qǐng)求2次),所以salt最好為UUID。

不同語(yǔ)言獲取時(shí)間戳,請(qǐng)參看此鏈接

如果對(duì)簽名有疑問,可以參看各語(yǔ)言demo。

輸出結(jié)果

返回的結(jié)果是json格式,包含字段與FROM和TO的值有關(guān),具體說明如下:

| 字段名 | 類型 | 含義 | 備注 | |------ |----- |----- |---- | |errorCode |text |錯(cuò)誤返回碼 |一定存在| |errorIndex |JSONArray |錯(cuò)誤結(jié)果的序號(hào) |結(jié)果部分出錯(cuò)時(shí)存在。序號(hào)與輸入的i字段順序一一對(duì)應(yīng),序號(hào)從0開始。JSONArray中元素為int類型| |translateResults |JSONArray |翻譯結(jié)果 |批量請(qǐng)求中存在正確結(jié)果時(shí),一定存在。JSONArray中元素為JSONObject類型,JSONObject中一定包含query、translation和type字段(均為String類型),分別表示翻譯原句、翻譯結(jié)果和翻譯所用的語(yǔ)言方向。|

示例

{
    "errorCode": 返回結(jié)果代碼,
    "errorIndex": [
        1 //序號(hào)從0開始
    ],
    "translateResults": [
        {
            "query": 第一個(gè)q字段中的原文句子,
            "translation": 第一個(gè)i字段對(duì)應(yīng)的譯文句子,
            "type": 第一個(gè)q字段實(shí)際翻譯語(yǔ)言方向,
            "verifyResult": 第一個(gè)q字段語(yǔ)言方向核實(shí)結(jié)果
            
        }, 
        {
            "query": 第二個(gè)q字段中的原文句子,
            "translation": 第二個(gè)q字段對(duì)應(yīng)的譯文句子,
            "type": 第二個(gè)q字段實(shí)際翻譯語(yǔ)言方向,
            "verifyResult": 第一個(gè)q字段語(yǔ)言方向核實(shí)結(jié)果
        }
    ...
    ]
}

支持語(yǔ)言

下表為各語(yǔ)言對(duì)應(yīng)代碼:

語(yǔ)言 代碼
中文 zh-CHS
中文繁體 zh-CHT
英文 en
日文 ja
韓文 ko
法文 fr
西班牙文 es
葡萄牙文 pt
意大利文 it
俄文 ru
越南文 vi
德文 de
阿拉伯文 ar
印尼文 id
南非荷蘭語(yǔ) af
波斯尼亞語(yǔ) bs
保加利亞語(yǔ) bg
粵語(yǔ) yue
加泰隆語(yǔ) ca
克羅地亞語(yǔ) hr
捷克語(yǔ) cs
丹麥語(yǔ) da
荷蘭語(yǔ) nl
愛沙尼亞語(yǔ) et
斐濟(jì)語(yǔ) fj
芬蘭語(yǔ) fi
希臘語(yǔ) el
海地克里奧爾語(yǔ) ht
希伯來語(yǔ) he
印地語(yǔ) hi
白苗語(yǔ) mww
匈牙利語(yǔ) hu
斯瓦希里語(yǔ) sw
克林貢語(yǔ) tlh
拉脫維亞語(yǔ) lv
立陶宛語(yǔ) lt
馬來語(yǔ) ms
馬耳他語(yǔ) mt
挪威語(yǔ) no
波斯語(yǔ) fa
波蘭語(yǔ) pl
克雷塔羅奧托米語(yǔ) otq
羅馬尼亞語(yǔ) ro
塞爾維亞語(yǔ)(西里爾文) sr-Cyrl
塞爾維亞語(yǔ)(拉丁文) sr-Latn
斯洛伐克語(yǔ) sk
斯洛文尼亞語(yǔ) sl
瑞典語(yǔ) sv
塔希提語(yǔ) ty
泰語(yǔ) th
湯加語(yǔ) to
土耳其語(yǔ) tr
烏克蘭語(yǔ) uk
烏爾都語(yǔ) ur
威爾士語(yǔ) cy
尤卡坦瑪雅語(yǔ) yua
阿爾巴尼亞語(yǔ) sq
阿姆哈拉語(yǔ) am
亞美尼亞語(yǔ) hy
阿塞拜疆語(yǔ) az
孟加拉語(yǔ) bn
巴斯克語(yǔ) eu
白俄羅斯語(yǔ) be
宿務(wù)語(yǔ) ceb
科西嘉語(yǔ) co
世界語(yǔ) eo
菲律賓語(yǔ) tl
弗里西語(yǔ) fy
加利西亞語(yǔ) gl
格魯吉亞語(yǔ) ka
古吉拉特語(yǔ) gu
豪薩語(yǔ) ha
夏威夷語(yǔ) haw
冰島語(yǔ) is
伊博語(yǔ) ig
愛爾蘭語(yǔ) ga
爪哇語(yǔ) jw
卡納達(dá)語(yǔ) kn
哈薩克語(yǔ) kk
高棉語(yǔ) km
庫(kù)爾德語(yǔ) ku
柯爾克孜語(yǔ) ky
老撾語(yǔ) lo
拉丁語(yǔ) la
盧森堡語(yǔ) lb
馬其頓語(yǔ) mk
馬爾加什語(yǔ) mg
馬拉雅拉姆語(yǔ) ml
毛利語(yǔ) mi
馬拉地語(yǔ) mr
蒙古語(yǔ) mn
緬甸語(yǔ) my
尼泊爾語(yǔ) ne
齊切瓦語(yǔ) ny
普什圖語(yǔ) ps
旁遮普語(yǔ) pa
薩摩亞語(yǔ) sm
蘇格蘭蓋爾語(yǔ) gd
塞索托語(yǔ) st
修納語(yǔ) sn
信德語(yǔ) sd
僧伽羅語(yǔ) si
索馬里語(yǔ) so
巽他語(yǔ) su
塔吉克語(yǔ) tg
泰米爾語(yǔ) ta
泰盧固語(yǔ) te
烏茲別克語(yǔ) uz
南非科薩語(yǔ) xh
意第緒語(yǔ) yi
約魯巴語(yǔ) yo
南非祖魯語(yǔ) zu
自動(dòng)識(shí)別 auto

其中auto可以識(shí)別中文、英文、日文、韓文、法文、西班牙文、葡萄牙文、俄文、越南文、德文、阿拉伯文、印尼文、意大利文,其他語(yǔ)種無法識(shí)別,為提高準(zhǔn)確率,請(qǐng)指定語(yǔ)種。

服務(wù)配置

單次查詢最大字符數(shù) 每小時(shí)最大查詢次數(shù) 每小時(shí)最大查詢字符數(shù) 支持語(yǔ)言
5000 100萬 120萬 詳見語(yǔ)種表

錯(cuò)誤代碼列表

錯(cuò)誤碼 含義
101 缺少必填的參數(shù),首先確保必填參數(shù)齊全,然后確認(rèn)參數(shù)書寫是否正確。
102 不支持的語(yǔ)言類型
103 翻譯文本過長(zhǎng)
104 不支持的API類型
105 不支持的簽名類型
106 不支持的響應(yīng)類型
107 不支持的傳輸加密類型
108 應(yīng)用ID無效,注冊(cè)賬號(hào),登錄后臺(tái)創(chuàng)建應(yīng)用和實(shí)例并完成綁定,可獲得應(yīng)用ID和應(yīng)用密鑰等信息
109 batchLog格式不正確
110 無相關(guān)服務(wù)的有效實(shí)例,應(yīng)用沒有綁定服務(wù),可以新建服務(wù),綁定服務(wù)。注:某些服務(wù)的翻譯結(jié)果發(fā)音需要tts服務(wù),需要在控制臺(tái)創(chuàng)建語(yǔ)音合成實(shí)例綁定應(yīng)用后方能使用。
111 開發(fā)者賬號(hào)無效
112 請(qǐng)求服務(wù)無效
113 q不能為空
118 detectLevel取值錯(cuò)誤
201 解密失敗,可能為DES,BASE64,URLDecode的錯(cuò)誤
202 簽名檢驗(yàn)失敗,如果確認(rèn)應(yīng)用ID和應(yīng)用密鑰的正確性,仍返回202,一般是編碼問題。請(qǐng)確保翻譯文本 q 為UTF-8編碼.
203 訪問IP地址不在可訪問IP列表
205 請(qǐng)求的接口與應(yīng)用的平臺(tái)類型不一致,確保接入方式(Android SDK、IOS SDK、API)與創(chuàng)建的應(yīng)用平臺(tái)類型一致。如有疑問請(qǐng)參考入門指南
206 因?yàn)闀r(shí)間戳無效導(dǎo)致簽名校驗(yàn)失敗
207 重放請(qǐng)求(接口salt+curtime來防重放(即一個(gè)請(qǐng)求不可以被請(qǐng)求2次),所以salt最好為UUID。)
301 辭典查詢失敗
302 翻譯查詢失敗
303 服務(wù)端的其它異常
304 翻譯失敗,請(qǐng)聯(lián)系技術(shù)同學(xué)
401 賬戶已經(jīng)欠費(fèi),請(qǐng)進(jìn)行賬戶充值
402 offlinesdk不可用
411 訪問頻率受限,請(qǐng)稍后訪問
412 長(zhǎng)請(qǐng)求過于頻繁,請(qǐng)稍后訪問

常用語(yǔ)言 Demo

java 示例

package com.youdao.ai;
 
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.IOException;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
 
public class BatchV3Demo {
 
    private static Logger logger = LoggerFactory.getLogger(BatchV3Demo.class);
 
    private static final String YOUDAO_URL = "https://openapi.youdao.com/v2/api";
 
    private static final String APP_KEY = "您的應(yīng)用ID";
 
    private static final String APP_SECRET = "您的應(yīng)用密鑰";
 
    public static void main(String[] args) throws IOException {
        Map<String, String> params = new HashMap<String, String>();
        String[] qArray = {"待輸入的文字1", "待輸入的文字2", "待輸入的文字3"};
        String salt = String.valueOf(System.currentTimeMillis());
        params.put("from", "源語(yǔ)言");
        params.put("to", "目標(biāo)語(yǔ)言");
        params.put("signType", "v3");
        String curtime = String.valueOf(System.currentTimeMillis() / 1000);
        params.put("curtime", curtime);
        String signStr = APP_KEY + truncate(qArray) + salt + curtime + APP_SECRET;
        String sign = getDigest(signStr);
        params.put("appKey", APP_KEY);
        params.put("salt", salt);
        params.put("sign", sign);
        params.put("vocabId", "您的用戶詞表ID");
        /** 處理結(jié)果 */
        requestForHttp(YOUDAO_URL, params, qArray);
    }
 
    public static void requestForHttp(String url, Map<String, String> params, String[] qArray) throws IOException {
 
        /** 創(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));
        }
        for (int i = 0; i < qArray.length; i++) {
            paramsList.add(new BasicNameValuePair("q", qArray[i]));
        }
        httpPost.setEntity(new UrlEncodedFormEntity(paramsList, "UTF-8"));
        CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
        try {
            Header[] contentType = httpResponse.getHeaders("Content-Type");
            System.out.println("Content-Type:" + contentType[0].getValue());
            /** 響應(yīng)不是音頻流,直接顯示結(jié)果 */
            HttpEntity httpEntity = httpResponse.getEntity();
            String json = EntityUtils.toString(httpEntity, "UTF-8");
            EntityUtils.consume(httpEntity);
            logger.info(json);
            System.out.println(json);
        } finally {
            try {
                if (httpResponse != null) {
                    httpResponse.close();
                }
            } catch (IOException e) {
                logger.info("## release resouce error ##" + e);
            }
        }
    }
 
    /**
     * 生成加密字段
     */
    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 truncate(String[] qArray) {
        if (qArray == null) {
            return null;
        }
        String batchQStr = String.join("", qArray);
        int len = batchQStr.length();
        return len <= 20 ? batchQStr : (batchQStr.substring(0, 10) + len + batchQStr.substring(len - 10, len));
    }
}

python2 示例

# -*- coding: utf-8 -*-
import sys
import uuid
import requests
import hashlib
import time
 
reload(sys)
sys.setdefaultencoding('utf-8')
 
YOUDAO_URL = 'https://openapi.youdao.com/v2/api'
APP_KEY = '您的應(yīng)用ID'
APP_SECRET = '您的應(yīng)用密鑰'
 
def connect():
    qArray = ["待輸入的文字1", "待輸入的文字2", "待輸入的文字3"]
 
    data = {}
    data['from'] = '源語(yǔ)言'
    data['to'] = '目標(biāo)語(yǔ)言'
    data['signType'] = 'v3'
    curtime = str(int(time.time()))
    data['curtime'] = curtime
    salt = str(uuid.uuid1())
    signStr = APP_KEY + truncate(''.join(qArray)) + salt + curtime + APP_SECRET
    sign = encrypt(signStr)
    data['appKey'] = APP_KEY
    data['salt'] = salt
    data['q'] = qArray
    data['sign'] = sign
    data['vocabId'] = "您的用戶詞表ID"
 
    response = do_request(data, qArray)
    contentType = response.headers['Content-Type']
    print contentType
    print response.content
 
 
def encrypt(signStr):
    hash_algorithm = hashlib.sha256()
    hash_algorithm.update(signStr.encode('utf-8'))
    return hash_algorithm.hexdigest()
 
 
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 do_request(data, qArray):
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    return requests.post(YOUDAO_URL, data  = data, headers = headers)
 
if __name__ == '__main__':
    connect()

python3 示例

# -*- coding: utf-8 -*-
import sys
import uuid
import requests
import hashlib
import time
from importlib import reload
 
reload(sys)
 
YOUDAO_URL = 'https://openapi.youdao.com/v2/api'
APP_KEY = '您的應(yīng)用ID'
APP_SECRET = '您的應(yīng)用密鑰'
 
 
def connect():
    qArray = ["待輸入的文字1", "待輸入的文字2", "待輸入的文字3"]
 
    data = {}
    data['from'] = 'zh-CHS'
    data['to'] = 'en'
    data['signType'] = 'v3'
    curtime = str(int(time.time()))
    data['curtime'] = curtime
    salt = str(uuid.uuid1())
    signStr = APP_KEY + truncate(''.join(qArray)) + salt + curtime + APP_SECRET
    sign = encrypt(signStr)
    data['appKey'] = APP_KEY
    data['q'] = qArray
    data['salt'] = salt
    data['sign'] = sign
    data['vocabId'] = "您的用戶詞表ID"
    response = do_request(data)
    contentType = response.headers['Content-Type']
    print(contentType)
    print(response.content)
 
 
def encrypt(signStr):
    hash_algorithm = hashlib.sha256()
    hash_algorithm.update(signStr.encode('utf-8'))
    return hash_algorithm.hexdigest()
 
 
def truncate(q):
    if q is None:
        return None
    size = len(q)
    return q if size <= 20 else q[0:10] + str(size) + q[size - 10:size]
 
 
def do_request(data):
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    return requests.post(YOUDAO_URL, data = data, headers = headers)
 
 
if __name__ == '__main__':
    connect()

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 BatchV3DemoInternalTest
    {
        public static void Main()
        {
            Dictionary<String, String> dic = new Dictionary<String, String>();
            string url = "https://openapi.youdao.com/v2/api";
            string[] qArray = {"待輸入的文字1", "待輸入的文字2", "待輸入的文字3"};
            string appKey = "您的應(yīng)用ID";
            string appSecret = "您的應(yīng)用密鑰";
            string salt = DateTime.Now.Millisecond.ToString();
            dic.Add("from", "源語(yǔ)言");
            dic.Add("to", "目標(biāo)語(yǔ)言");
            dic.Add("signType", "v3");
            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);
            dic.Add("curtime", curtime);
            string signStr = appKey + Truncate(string.Join("", qArray)) + salt + curtime + appSecret;;
            string sign = ComputeHash(signStr, new SHA256CryptoServiceProvider());
            dic.Add("appKey", appKey);
            dic.Add("salt", salt);
            dic.Add("sign", sign);
            dic.Add("vocabId", "您的用戶詞表ID");
            Post(url, dic, qArray);
        }
 
        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 void Post(string url, Dictionary<String, String> dic, string[] qArray)
        {
            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++;
            }
            foreach (var item in qArray)
            {
                builder.Append("&");
                builder.AppendFormat("q={0}", System.Web.HttpUtility.UrlEncode(item));
            }
            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();
                            }
                            Console.WriteLine(result);
        }
 
        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));
        }
    }
}

php示例

<?php
define("CURL_TIMEOUT",   2000);
define("URL",            "https://openapi.youdao.com/v2/api");
define("APP_KEY",        "您的應(yīng)用ID"); // 替換為您的應(yīng)用ID
define("SEC_KEY",        "您的應(yīng)用密鑰"); // 替換為您的密鑰
 
function do_request($q)
{
    $salt = create_guid();
    $args = array(
        'q' => $q,
        'appKey' => APP_KEY,
        'salt' => $salt,
    );
    $args['from'] = '源語(yǔ)言';
    $args['to'] = '目標(biāo)語(yǔ)言';
    $args['signType'] = 'v3';
    $curtime = strtotime("now");
    $args['curtime'] = $curtime;
    $signStr = APP_KEY . truncate(implode("", $q)) . $salt . $curtime . SEC_KEY;
    $args['sign'] = hash("sha256", $signStr);
    $args['vocabId'] = '您的用戶詞表ID';
    $ret = call(URL, $args);
    return $ret;
}
 
// 發(fā)起網(wǎng)絡(luò)請(qǐng)求
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 .= 'q='.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 create_guid_section($characters){
    $return = "";
    for($i = 0; $i < $characters; $i++)
    {
        $return .= dechex(mt_rand(0,15));
    }
    return $return;
}
 
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);
    }
}
 
// 輸入
$qArray = array("待輸入的文字1", "待輸入的文字2", "待輸入的文字3");
 
$ret = do_request($qArray);
print_r($ret);
$ret = json_decode($ret, true);
?>

js示例

<!doctype html>
<head>
    <meta charset="utf-8"/>
</head>
<body>
<div>可打開瀏覽器控制臺(tái)查看結(jié)果</div>
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/crypto-js/4.0.0/crypto-js.js"></script>
<script type="text/javascript">
    var appKey = '您的應(yīng)用ID';
    var key = '您的應(yīng)用密鑰';//注意:暴露appSecret,有被盜用造成損失的風(fēng)險(xiǎn)
    var salt = (new Date).getTime();
    var curtime = Math.round(new Date().getTime() / 1000);
    var query = ['待輸入的文字1', '待輸入的文字2', '待輸入的文字3'];
    var from = '源語(yǔ)言';
    var to = '目標(biāo)語(yǔ)言';
    var str1 = appKey + truncate(query.join("")) + salt + curtime + key;
    var vocabId = '您的用戶詞表ID';
 
    var sign = CryptoJS.SHA256(str1).toString(CryptoJS.enc.Hex);
    $.ajax({
        url: 'https://openapi.youdao.com/v2/api',
        type: 'post',
        dataType: 'jsonp',
        traditional: true,
        data: {
            q: query,
            appKey: appKey,
            salt: salt,
            from: from,
            to: to,
            sign: sign,
            signType: "v3",
            curtime: curtime,
            vocabId: vocabId,
        },
        success: function (data) {
            console.log(data);
        }
    });
 
    function truncate(q) {
        var len = q.length;
        if (len <= 20) return q;
        return q.substring(0, 10) + len + q.substring(len - 10, len);
    }
</script>
</body>
欧美 日韩 激情 在线| 国产亚洲一区二区手机在线观看| 涩涩屋操美女视频| 裸体午夜一级视频| 欧美国产中文高高靖| 大鸡巴操淫逼视频| 老太太在丛林日老B| —级v免费大片欧美| 久久一区二区三区精华液介绍| 中文字幕人妻一区二区三区人妻| 日韩欧美一级特黄大片欧| 91精品国产综合久久久蜜| 中国老女人 操逼 视频| 护士毛片在线看中文字幕| 国产精品无码av在线一区| 快日我啊好爽日我逼| 日本免费精品一区二区三区四区| 欧美大鸡巴操大骚逼| 人人妻人人澡精品99| 国产亚洲精品一区久久| 精品久久av免费一区二区三区| 欧亚洲嫩模精品一区三区| 日本 日韩 欧美| 我最爱操女人的骚逼| 亚洲精品一区二区精华液| 欧美人人做人人爽人人喊| 黄色三极片在线观看| 人人超级碰青青精品| 日本a国产精品久久久久| 女人操女人大逼大片| 欧美精品视频在线| 国产亚洲精品高清视频免费| 亚洲国产成人久久成人52| 久久久久久国产A免费观看| 国产污污污在线观看视频| 亚洲男性天堂一区二区三区| 任你橹在线久久精品9| 男人几把操女人嫩穴| 粗大长内射女人视频| 三级成人国产高清视频| 午夜精品在线视频|