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

幫助與文檔 > 產(chǎn)品文檔 > 自然語言翻譯服務(wù) > API文檔 > 網(wǎng)頁翻譯
網(wǎng)頁翻譯

網(wǎng)頁翻譯 API 簡介

概念解釋

網(wǎng)頁翻譯:可對網(wǎng)頁html標簽自動識別,翻譯所需內(nèi)容。

說明

Hi,您好,歡迎使用有道智云網(wǎng)頁翻譯API接口服務(wù)。

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

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

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

如果您對文檔內(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

溫馨提示:

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

接口說明

網(wǎng)頁翻譯API接口提供有道的翻譯服務(wù),可對網(wǎng)頁html標簽自動識別,翻譯所需內(nèi)容,支持多語種進行翻譯,詳情參考支持的語種列表。

網(wǎng)頁翻譯API HTTPS地址:

https://openapi.youdao.com/translate_html

協(xié)議須知

調(diào)用方在集成網(wǎng)頁翻譯API時,請遵循以下規(guī)則。

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

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

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

字段名 類型 含義 必填 備注
q text 待翻譯文本 True 必須是UTF-8編碼
from text 源語言 True 參考下方 支持語言
to text 目標語言 True 參考下方 支持語言
appKey text 應(yīng)用ID True 可在應(yīng)用管理 查看
salt text UUID True uuid,唯一通用識別碼
sign text 簽名 True sha256(應(yīng)用ID+input+salt+curtime+應(yīng)用密鑰)
signType text 簽名類型 True v3
curtime text 當前UTC時間戳(秒) true TimeStamp
vocabId text 用戶上傳的術(shù)語表 false 用戶指定的術(shù)語表ID: out_id,支持英中互譯,更多語種方向請前往控制臺查詢

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

注意:

  1. 接口salt+curtime來防重放(即一個請求不可以被請求2次),所以salt最好為UUID。

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

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

用戶術(shù)語表使用

登錄控制臺,選擇網(wǎng)頁翻譯服務(wù),點擊右側(cè)的術(shù)語表,選擇新建,填寫表名稱和語言方向,添加需要的術(shù)語表獲取對應(yīng)詞表id即可。

輸出結(jié)果

正常返回

字段名 含義
data 翻譯結(jié)果
errorCode 錯誤碼
errorMessage 成功信息

異常返回

字段名 含義
errorCode 錯誤碼
errorMessage 錯誤信息

支持語言

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

中文名 代碼
阿拉伯文 ar
德文 de
英文 en
西班牙文 es
法文 fr
印度尼西亞語 id
意大利文 it
日文 ja
韓文 ko
荷蘭語 nl
葡萄牙文 pt
俄文 ru
泰語 th
越南語 vi
中文 zh-CHS
中文繁體 zh-CHT

**注意:**若列表語言出現(xiàn)不支持的問題,請參文檔下方或者考產(chǎn)品定價列表語種互譯的限制

以下場景語種間翻譯不支持

源語種中文名 代碼 目標語種中文名 代碼
德語 de 印地語 hi
英語 en 葡萄牙語 pt
印地語 hi 德語 de
印地語 hi 荷蘭語 nl
印地語 hi 葡萄牙語 pt
荷蘭語 nl 印地語 hi
葡萄牙語 pt 印地語 hi

服務(wù)配置

單次查詢最大字符數(shù) 支持語言
100萬 詳見語種表

錯誤代碼列表

錯誤碼 含義
101 缺少必填的參數(shù),首先確保必填參數(shù)齊全,然后確認參數(shù)書寫是否正確。
102 不支持的語言類型
103 翻譯文本過長
104 不支持的API類型
105 不支持的簽名類型
106 不支持的響應(yīng)類型
107 不支持的傳輸加密類型
108 應(yīng)用ID無效,注冊賬號,登錄后臺創(chuàng)建應(yīng)用并完成綁定,可獲得應(yīng)用ID和應(yīng)用密鑰等信息
109 batchLog格式不正確
110 無相關(guān)服務(wù)的有效應(yīng)用,應(yīng)用沒有綁定服務(wù)應(yīng)用,可以新建服務(wù)應(yīng)用。注:某些服務(wù)的翻譯結(jié)果發(fā)音需要tts服務(wù),需要在控制臺創(chuàng)建語音合成服務(wù)綁定應(yīng)用后方能使用。
111 開發(fā)者賬號無效
112 請求服務(wù)無效
113 q不能為空
114 不支持的圖片傳輸方式
116 strict字段取值無效,請參考文檔填寫正確參數(shù)值
201 解密失敗,可能為DES,BASE64,URLDecode的錯誤
202 簽名檢驗失敗,如果確認應(yīng)用ID和應(yīng)用密鑰的正確性,仍返回202,一般是編碼問題。請確保翻譯文本 q 為UTF-8編碼.
203 訪問IP地址不在可訪問IP列表
205 請求的接口與應(yīng)用的平臺類型不一致,確保接入方式(Android SDK、IOS SDK、API)與創(chuàng)建的應(yīng)用平臺類型一致。如有疑問請參考入門指南
206 因為時間戳無效導(dǎo)致簽名校驗失敗
207 重放請求(接口salt+curtime來防重放(即一個請求不可以被請求2次),所以salt最好為UUID。)
301 辭典查詢失敗
302 翻譯查詢失敗
303 服務(wù)端的其它異常
304 會話閑置太久超時
401 賬戶已經(jīng)欠費,請進行賬戶充值
402 offlinesdk不可用
405 鑒權(quán)失敗
500 翻譯失敗,請參考errorMessage
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 服務(wù)的異常
2411 訪問頻率受限,請稍后訪問
2412 超過最大請求字符數(shù)
3001 不支持的語音格式
3002 不支持的語音采樣率
3003 不支持的語音聲道
3004 不支持的語音上傳類型
3005 不支持的語言類型
3006 不支持的識別類型
3007 識別音頻文件過大
3008 識別音頻時長過長
3009 不支持的音頻文件類型
3010 不支持的發(fā)音類型
3201 解密失敗
3301 語音識別失敗
3302 語音翻譯失敗
3303 服務(wù)的異常
3411 訪問頻率受限,請稍后訪問
3412 超過最大請求字符數(shù)
4001 不支持的語音識別格式
4002 不支持的語音識別采樣率
4003 不支持的語音識別聲道
4004 不支持的語音上傳類型
4005 不支持的語言類型
4006 識別音頻文件過大
4007 識別音頻時長過長
4201 解密失敗
4301 語音識別失敗
4303 服務(wù)的異常
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 服務(wù)器內(nèi)部錯誤
9411 訪問頻率受限(超過最大調(diào)用次數(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 服務(wù)的異常
11411 訪問頻率受限,請稍后訪問
11412 超過最大請求時長
12001 圖片尺寸過大
12002 圖片base64解密失敗
12003 引擎服務(wù)器返回錯誤
12004 圖片為空
12005 不支持的識別圖片類型
12006 圖片無匹配結(jié)果
13001 不支持的角度類型
13002 不支持的文件類型
13003 表格識別圖片過大
13004 文件為空
13301 表格識別失敗
15001 需要圖片
15002 圖片過大(1M)
15003 服務(wù)調(diào)用失敗
17001 需要圖片
17002 圖片過大(1M)
17003 識別類型未找到
17004 不支持的識別類型
17005 服務(wù)調(diào)用失敗

errorMessage說明:

錯誤碼 含義
11 不支持的語言方向
12 輸入的html文本超過長度限制
14 不支持的翻譯內(nèi)容
30 翻譯失敗
31 部分翻譯成功

常用語言 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 Translate_htmlV3Demo {

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

private static final String YOUDAO_URL = "https://openapi.youdao.com/translate_html";

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 q = "待輸入的文字";
    String salt = String.valueOf(System.currentTimeMillis());
    String from = "源語言";
    String to = "目標語言";
    params.put("from",from);
    params.put("to",to);
    params.put("signType", "v3");
    String curtime = String.valueOf(System.currentTimeMillis() / 1000);
    params.put("curtime", curtime);
    String signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET;
    String sign = getDigest(signStr);
    params.put("appKey", APP_KEY);
    params.put("q", q);
    params.put("salt", salt);
    params.put("sign", sign);
    /** 處理結(jié)果 */
    requestForHttp(YOUDAO_URL,params);
}

public static void requestForHttp(String url,Map<String,String> params) 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));
    }
    httpPost.setEntity(new UrlEncodedFormEntity(paramsList,"UTF-8"));
    CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
    try{
        Header[] contentType = httpResponse.getHeaders("Content-Type");
        logger.info("Content-Type:" + contentType[0].getValue());
        if("audio/mp3".equals(contentType[0].getValue())){
            //如果響應(yīng)是wav
            HttpEntity httpEntity = httpResponse.getEntity();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            httpResponse.getEntity().writeTo(baos);
            byte[] result = baos.toByteArray();
            EntityUtils.consume(httpEntity);
            if(result != null){//合成成功
                String file = "合成的音頻存儲路徑"+System.currentTimeMillis() + ".mp3";
                byte2File(result,file);
            }
        }else{
            /** 響應(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();
    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;
    }
}

/**
*
* @param result 音頻字節(jié)流
* @param file 存儲路徑
*/
private static void byte2File(byte[] result, String file) {
    File audioFile = new File(file);
    FileOutputStream fos = null;
    try{
        fos = new FileOutputStream(audioFile);
        fos.write(result);

    }catch (Exception e){
        logger.info(e.toString());
    }finally {
        if(fos != null){
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}
    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));
    }
}

python2示例

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

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

YOUDAO_URL = 'https://openapi.youdao.com/translate_html'
APP_KEY = '您的應(yīng)用ID'
APP_SECRET = '您的應(yīng)用密鑰'


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)


def connect():
    q = "待輸入的文字"

    data = {}
    data['from'] = '源語言'
    data['to'] = '目標語言'
    data['signType'] = 'v3'
    curtime = str(int(time.time()))
    data['curtime'] = curtime
    salt = str(uuid.uuid1())
    signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET
    sign = encrypt(signStr)
    data['appKey'] = APP_KEY
    data['q'] = q
    data['salt'] = salt
    data['sign'] = sign

    response = do_request(data)
    contentType = response.headers['Content-Type']
    if contentType == "audio/mp3":
        millis = int(round(time.time() * 1000))
        filePath = "合成的音頻存儲路徑" + str(millis) + ".mp3"
        fo = open(filePath, 'wb')
        fo.write(response.content)
        fo.close()
    else:
        print response.content


if __name__ == '__main__':
    connect()

python3示例

# -*- coding: utf-8 -*-
import sys
import uuid
import requests
import hashlib
import time
from importlib import reload

import time

reload(sys)

YOUDAO_URL = 'https://openapi.youdao.com/translate_html'
APP_KEY = '您的應(yīng)用ID'
APP_SECRET = '您的應(yīng)用密鑰'


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)


def connect():
    q = "待輸入的文字"

    data = {}
    data['from'] = '源語言'
    data['to'] = '目標語言'
    data['signType'] = 'v3'
    curtime = str(int(time.time()))
    data['curtime'] = curtime
    salt = str(uuid.uuid1())
    signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET
    sign = encrypt(signStr)
    data['appKey'] = APP_KEY
    data['q'] = q
    data['salt'] = salt
    data['sign'] = sign

    response = do_request(data)
    contentType = response.headers['Content-Type']
    if contentType == "audio/mp3":
        millis = int(round(time.time() * 1000))
        filePath = "合成的音頻存儲路徑" + str(millis) + ".mp3"
        fo = open(filePath, 'wb')
        fo.write(response.content)
        fo.close()
    else:
        print(response.content)


if __name__ == '__main__':
    connect()

php示例

<?php
define("CURL_TIMEOUT",   2000);
define("URL",            "https://openapi.youdao.com/translate_html");
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'] = '源語言';
    $args['to'] = '目標語言';
    $args['signType'] = 'v3';
    $curtime = strtotime("now");
    $args['curtime'] = $curtime;
    $signStr = APP_KEY . truncate($q) . $salt . $curtime . SEC_KEY;
    $args['sign'] = hash("sha256", $signStr);
    $ret = call(URL, $args);
    return $ret;
}

// 發(fā)起網(wǎng)絡(luò)請求
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 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);
    }
}

// 輸入
$q = "待輸入的文字";

$ret = do_request($q);
print_r($ret);
$ret = json_decode($ret, true);
?>

c#示例

using System;
using System.IO;
using System.Web;
using System.Net;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Security.Cryptography;

namespace zhiyun_csharp_demo
{
    class Translate_htmlV3Demo
    {
        public static void Main()
        {
            Dictionary<String, String> dic = new Dictionary<String, String>();
            string url = "https://openapi.youdao.com/translate_html";
            string q = "待輸入的文字";
            string appKey = "您的應(yīng)用ID";
            string appSecret = "您的應(yīng)用密鑰";
            string salt = DateTime.Now.Millisecond.ToString();
            string from = "源語言";
            string to = "目標語言";
            dic.Add("from",from);
            dic.Add("to",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(q) + salt + curtime + appSecret;;
            string sign = ComputeHash(signStr, new SHA256CryptoServiceProvider());
            dic.Add("q", System.Web.HttpUtility.UrlEncode(q));
            dic.Add("appKey", appKey);
            dic.Add("salt", salt);
            dic.Add("sign", sign);
            Post(url, dic);
        }

        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 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();
          if (resp.ContentType.ToLower().Equals("audio/mp3"))
            {
                SaveBinaryFile(resp, "合成的音頻存儲路徑");
            }
            else {
                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));
        }

        private static bool SaveBinaryFile(WebResponse response, string FileName)
        {
            string FilePath = FileName + DateTime.Now.Millisecond.ToString() + ".mp3";
            bool Value = true;
            byte[] buffer = new byte[1024];

            try
            {
                if (File.Exists(FilePath))
                    File.Delete(FilePath);
                Stream outStream = System.IO.File.Create(FilePath);
                Stream inStream = response.GetResponseStream();

                int l;
                do
                {
                    l = inStream.Read(buffer, 0, buffer.Length);
                    if (l > 0)
                        outStream.Write(buffer, 0, l);
                }
                while (l > 0);

                outStream.Close();
                inStream.Close();
            }
            catch
            {
                Value = false;
            }
            return Value;
        }
    }
}
国产精品粉嫩懂色av| 最新日本一区二区三区免费看| 少妇毛片一区二区三区免费视频| 精品免费福利片国产| 久久久国产调教性奴| 国产精品久久一区二区三区夜色| 上萬網友分享a级国产乱| 日本男人捅女人机机| 亚洲 自拍 欧美 一区| 人人摸人 人干人人草操| 欧美性做爰片免费视频看| 好嗨哟直播看片在线观看| 欧美一区二区三区男人的天堂| 三级片在线无码播放| 一区二区三区av精品| 鸡巴插骚逼视频欧美风格| 男人草女人的视频免费看| 久久久国产精品2020| 看一下日本人插逼逼洞视频| 美女被插入小穴爆操视频| 美女日逼视频免费| 男生用鸡巴操女生的视频| 骚货 淫水 国产| 亚洲国产一区二区不卡在线资源| 色熟妇人妻久久中文字幕| 欧美黄色三级成人小视频| 这里只有久久精品| 多男用舌头伺候一女| 日逼动态视频免费看| 3色w九九久久男人皇宫宕| 激烈18禁高潮视频免费| 99热这里只有精品97| av日韩在线观看一区二区三区| 大玩具猛插大bb| 国产羞羞的视频在线观看| 亚洲乱码专区一区二区三区四区| 男的日女生批网页| 少妇无套带白浆嗯呢啊污| 日本欧美一区二区三区| 亚洲av无一区二区三区综合| 99久久国产综合精品女|