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

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

批量翻譯 API 簡介

批量翻譯:支持一次傳入多個文本進行批量翻譯,大幅減少http網絡應答。適合多段文本批量翻譯的場景。

說明

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

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

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

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

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

客服QQ:1906538062

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

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

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

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

聯系郵箱: zhiyun@corp.youdao.com

溫馨提示:

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

接口說明

批量翻譯API接口提供有道的翻譯服務,包含了中英翻譯和小語種翻譯功能。您只需要通過調用批量翻譯API,傳入待翻譯的內容,并指定要翻譯的源語言(支持源語言語種自動檢測)和目標語言種類,就可以得到相應的翻譯結果。

批量翻譯API HTTPS地址:

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

協議須知

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

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

接口調用參數

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

字段名類型含義必填備注
qtext要翻譯的文本.可指定多個Trueq=蘋果&q=橘子
fromtext源語言True語言列表 (可設置為auto)
totext目標語言True語言列表
appKeytext應用標識(應用ID)True可在 應用管理 查看
salttext隨機字符串,可使用UUID進行生產Truehfa12lak56ja9gjl
signtext簽名信息:sha256(appKey+q+salt+密鑰)Truexxxxx
exttext翻譯結果音頻格式,支持mp3falsemp3
voicetext翻譯結果發(fā)音選擇,0為女聲,1為男聲,默認為女聲false0
signTypetext簽名類型truev3
detectLeveltext語言檢測粒度描述。影響翻譯時i字段的內容合并做語言檢測,還是分別進行檢測;取值為0或1,取值為0時合并檢測,取值為1時分別檢測false1
detectFiltertext是否進行語種檢測,當判定為非必要翻譯時返回原文,true:進行過濾,false:不過濾false默認true
verifyLangtext是否對語言方向進行二次核實。當用戶不確定傳入的參數是否正確時,可將該參數置為true,表示需要進行二次核實,系統將額外返回一個檢測到的核實結果.默認為false

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

注意:

  1. voice 沒有男聲的,會輸出女聲。
  2. 發(fā)音需要在控制臺創(chuàng)建tts應用才能使用,否則點擊發(fā)音會報110錯誤。
  3. 接口salt+curtime來防重放(即一個請求不可以被請求2次),所以salt最好為UUID。

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

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

輸出結果

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

字段名類型含義備注
errorCodetext錯誤返回碼一定存在
errorIndexJSONArray錯誤結果的序號結果部分出錯時存在。序號與輸入的i字段順序一一對應,序號從0開始。JSONArray中元素為int類型
translateResultsJSONArray翻譯結果批量請求中存在正確結果時,一定存在。JSONArray中元素為JSONObject類型,JSONObject中一定包含query、translation和type字段(均為String類型),分別表示翻譯原句、翻譯結果和翻譯所用的語言方向。

示例

{
    "errorCode": 返回結果代碼,
    "errorIndex": [
        1 //序號從0開始
    ],
    "translateResults": [
        {
            "query": 第一個q字段中的原文句子,
            "translation": 第一個i字段對應的譯文句子,
            "type": 第一個q字段實際翻譯語言方向,
            "verifyResult": 第一個q字段語言方向核實結果
            
        }, 
        {
            "query": 第二個q字段中的原文句子,
            "translation": 第二個q字段對應的譯文句子,
            "type": 第二個q字段實際翻譯語言方向,
            "verifyResult": 第一個q字段語言方向核實結果
        }
    ...
    ]
}

支持語言

下表為各語言對應代碼:

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

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

服務配置

單次查詢最大字符數每小時最大查詢次數每小時最大查詢字符數支持語言
5000100萬120萬詳見語種表

錯誤代碼列表

錯誤碼含義
101缺少必填的參數,首先確保必填參數齊全,然后確認參數書寫是否正確。
102不支持的語言類型
103翻譯文本過長
104不支持的API類型
105不支持的簽名類型
106不支持的響應類型
107不支持的傳輸加密類型
108應用ID無效,注冊賬號,登錄后臺創(chuàng)建應用和實例并完成綁定,可獲得應用ID和應用密鑰等信息
109batchLog格式不正確
110無相關服務的有效實例,應用沒有綁定服務,可以新建服務,綁定服務。注:某些服務的翻譯結果發(fā)音需要tts服務,需要在控制臺創(chuàng)建語音合成實例綁定應用后方能使用。
111開發(fā)者賬號無效
112請求服務無效
113q不能為空
118detectLevel取值錯誤
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賬戶已經欠費,請進行賬戶充值
402offlinesdk不可用
411訪問頻率受限,請稍后訪問
412長請求過于頻繁,請稍后訪問

常用語言 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 = "您的應用ID";
 
    private static final String APP_SECRET = "您的應用密鑰";
 
    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", "源語言");
        params.put("to", "目標語言");
        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");
        /** 處理結果 */
        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());
            /** 響應不是音頻流,直接顯示結果 */
            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 = '您的應用ID'
APP_SECRET = '您的應用密鑰'
 
def connect():
    qArray = ["待輸入的文字1", "待輸入的文字2", "待輸入的文字3"]
 
    data = {}
    data['from'] = '源語言'
    data['to'] = '目標語言'
    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 = '您的應用ID'
APP_SECRET = '您的應用密鑰'
 
 
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 = "您的應用ID";
            string appSecret = "您的應用密鑰";
            string salt = DateTime.Now.Millisecond.ToString();
            dic.Add("from", "源語言");
            dic.Add("to", "目標語言");
            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",        "您的應用ID"); // 替換為您的應用ID
define("SEC_KEY",        "您的應用密鑰"); // 替換為您的密鑰
 
function do_request($q)
{
    $salt = create_guid();
    $args = array(
        'q' => $q,
        'appKey' => APP_KEY,
        'salt' => $salt,
    );
    $args['from'] = '源語言';
    $args['to'] = '目標語言';
    $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ā)起網絡請求
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>可打開瀏覽器控制臺查看結果</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 = '您的應用ID';
    var key = '您的應用密鑰';//注意:暴露appSecret,有被盜用造成損失的風險
    var salt = (new Date).getTime();
    var curtime = Math.round(new Date().getTime() / 1000);
    var query = ['待輸入的文字1', '待輸入的文字2', '待輸入的文字3'];
    var from = '源語言';
    var to = '目標語言';
    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>
国产在线一区二区三区欧美| 欧美日韩精品一区二区三区激情在线| 精品国产日本一区二区| 欧美日韩精品一区二区三区激情在线| 国产精品一区二区97| 国产一区二区综合资源| 国产精品久久久久久久久久一区| 女人和男人三级黄片子| 漫画韩漫画免费在线观看| 暗呦交小U女国产精品视频| 国产亚洲一区二区三区午夜| 亚洲欧洲日韩综合网站| 成人精品黄色一二三区| 97精品国产自产在线观看| 日本无人区一区二区三区| 日韩欧美一级视频观看| 日本大香焦免费视频| 中文字幕一区二区三区免费看| 亚洲欧美成人久久一区二区三区| 日本色一区二区三区四区五区| 日本精品最新字幕一区二区| 黑人操亚洲女一级黄色片| 亚洲gv永久无码天堂网| 久久久久无码精品国产app| 国产精品毛片大码女人| 国语自产精品视频二区在线| 日本精品最新字幕一区二区| 免费看中文字幕一级高清| 一区二区久久久久久久久| 人妻少妇精品视频无码专区| 日韩欧美一级视频观看| 日韩一区二区合集影院在线观看| 日韩一区二区三区在线观看视频| 夜鲁夜鲁在线视频维| 中文字幕人妻乱一区二区三区| 中国女人free性hd国语| 日本无人区一区二区三区| 亚洲精品一区二区三区中文字幕| 久久秘一区二区三区| 午夜福利国产观看视频1| 人人公开免费看操视频|