接口接收参数:
1.数据体:data = {"xxxx": "xxxx"} or {}
2.分配给外部的密钥:secret = "iamsecret"
3.接口方法路径(不包含host):api_path = "/xxx/xxx?xx=xxx"
计算步骤:
1.将api_path转换为全小写形式:lower_api_path
2.将请求method方法转为小写形式:lower_method(例如:"delete"/"post"/...)
3.将data转换为json的字符串形式:sort_json_str;以python为例:json.dumps(dict(data), sort_keys=True).replace(' ', '')
4.按照如下顺序连接字符串:lower_api_path + lower_method + sort_json_str + secret + X-TIMESTAM(X-TIMESTAMP:接口秒级时间戳,距当前时间60s内有效;得到sign:/xxx/xxx?xx=xxx{"xxxx": "xxxx"}iamsecret1489133053)
5.将sign以utf8编码,计算md5得到X-TOKEN:ddc6457fd0b373475ac65912b797ef05
请求接口时应该加入如下头部信息:
import time
import json
import hashlib
import requests
from urllib.parse import urljoin
def encode_with_md5(s):
m = hashlib.md5()
m.update(s.encode('utf-8'))
return m.hexdigest()
def headers_need_sign(ak, secret, method, url, data):
headers = {}
t = int(time.time())
data = json.dumps(dict(data), sort_keys=True).replace(' ', '')
ori_sign = '{0}{1}{2}{3}{4}'.format(url.lower(), method.lower(), data, secret, t)
sign = encode_with_md5(ori_sign)
headers["X-APP-ID"] = ak
headers["X-TOKEN"] = sign
headers["X-TIMESTAMP"] = str(t)
return headers
if __name__ == '__main__':
ak = '37514ac0-3fce-4f4c-bc3f-86eba37da7dd'
secret = 'bb81b706-ef1f-443e-9e86-9df8399f796b'
method = 'POST'
host = 'https://nebula-agent.xingyun3d.com'
url = '/xxx/xxx?x=xx&z=zz'
req_data = {
"data1": "data1",
"data2": "data2",
}
# 计算获取请求headers
req_headers = headers_need_sign(ak, secret, method, url, req_data)
# 请求接口
req_url = urljoin(host, url)
resp = requests.request(method, req_url, json=req_data, headers=req_headers)
host: https://nebula-agent.xingyun3d.com
请求路径:wss://{host}/user/v1/ws/tts
请求参数Params
参数名 | 类型 | 名称 | 是否必填 | 备注 |
---|---|---|---|---|
tts_vcn | string | 音色 | 必填 | 含义:用于合成的音色名称 |
text | text | 语料 | 必填 | 含义:用于合成音频的语料内容 |
Message
参数名 | 类型 | 名称 | 是否必填 | 备注 |
---|---|---|---|---|
text | text | 语料 | 必填 | 含义:用于合成音频的语料内容 |
返回参数
一级参数名 | 类型 | 名称 | 备注 |
---|---|---|---|
error_code | int | 错误码 | 0:成功 其他:错误 |
error_reason | string | 错误原因 | |
data | string | 音频数据 | |
start_time | float | 语音开始秒数 | |
end_time | float | 语音结束秒数 | |
inference_end | bool | 是否结束 |
host: https://nebula-agent.xingyun3d.com
请求路径:Post: /user/v1/tts_task/create_tts_task
请求参数
参数名 | 类型 | 名称 | 是否必填 | 备注 |
---|---|---|---|---|
audio_name | string | 音频名称 | 非必填 | 1.含义:输出的音频名称=下载文件名 2.非必填项 3.音频名称生成规则为 时间 |
tts_vcn | string | 音色 | 必填 | 含义:用于合成的音色名称 |
text | text | 语料 | 必填 | 含义:用于合成音频的语料内容 |
返回参数
一级参数名 | 二级参数名 | 类型 | 名称 | 备注 |
---|---|---|---|---|
error_code | int | 错误码 | 0:成功 其他:错误 | |
error_reason | string | 错误原因 | ||
data | dict | |||
task_id | int | 任务ID |
host: https://nebula-agent.xingyun3d.com
请求路径:GET: /user/v1/tts_task/get_tts_task
请求参数
参数名 | 类型 | 名称 | 是否必填 | 备注 |
---|---|---|---|---|
task_id | int | 任务ID | 必填 |
返回参数
一级参数名 | 二级参数名 | 类型 | 名称 | 备注 |
---|---|---|---|---|
error_code | int | 错误码 | 0:成功 其他:错误 | |
error_reason | string | 错误原因 | ||
data | dict | |||
task_id | int | 任务ID | ||
synth_status | string | 任务状态 | 1.not_send:排队中 2.processing:合成中 3.finished:已完成 4.error:合成失败 5.canceled:合成取消 | |
file_oss | string | 文件路径 | 1.当任务状态为已完成,该字段才有数值 | |
synth_start_time | datetime | 合成开始时间 | ||
synth_finish_time | datetime | 合成完成时间 | 当任务状态为已完成,该字段才有数值 | |
error_reason | string | 错误日志 |
host: https://nebula-agent.xingyun3d.com
请求路径:Post: /user/v1/tts_task/cancel_tts_task
请求参数
参数名 | 类型 | 名称 | 是否必填 | 备注 |
---|---|---|---|---|
task_id | int | 任务ID | 必填 |
返回参数
一级参数名 | 二级参数名 | 类型 | 名称 | 备注 |
---|---|---|---|---|
error_code | int | 错误码 | 0:成功 其他:错误 | |
error_reason | string | 错误原因 |
错误码Code | 错误码描述 |
---|---|
20001 | 应用不存在或无法使用 |
40001 | 试听错误,请联系客服 |
40002 | 创建任务失败,请重新发起或联系客服处理 |
40003 | 语音合成任务未找到 |
wss://{host}/user/v1/ws/tts
Params: tts_vcn: XMOV_LV_TTS__13
Message:
{
"text": "这是一个测试数据"
}
Messages:
{
"data_type": "CHAR_TIME_MAP",
"data": "[[\"\这\", 0.0, 0.13492637276649475], [\"\是\", 0.13492637276649475, 0.2383104532957077], [\"\一\", 0.2383104532957077, 0.3133762061595917], [\"\个\", 0.3133762061595917, 0.40454187691211707], [\"\测\", 0.40454187691211707, 0.6611631065607071], [\"\试\", 0.6611631065607071, 0.7994877487421036], [\"\数\", 0.7994877487421036, 0.9844612509012223], [\"\据\", 0.9844612509012223, 1.209628227353096], [\"[PUNC]\", 1.209628227353096, 1.725]]",
"start_time": 0.0,
"end_time": 0.0,
"sentence_index": -1,
"char_index": -1,
"inference_end": false,
"flush_buffer": false,
"req_id": "ws-tts-564c57d3-6c50-4c01-90a4-4016547f6625-0"
}
{
"data_type": "AUDIO",
"data": "AAAA",
"start_time": 0.0,
"end_time": 1.725000023841858,
"sentence_index": -1,
"char_index": -1,
"inference_end": false,
"flush_buffer": false,
"req_id": "ws-tts-564c57d3-6c50-4c01-90a4-4016547f6625-0"
}
{
"data_type": "CHAR_TIME_MAP",
"data": "",
"start_time": 0.0,
"end_time": 0.0,
"sentence_index": -1,
"char_index": -1,
"inference_end": false,
"flush_buffer": true,
"req_id": "ws-tts-564c57d3-6c50-4c01-90a4-4016547f6625-0"
}
{
"data_type": "AUDIO",
"data": "",
"start_time": 0.0,
"end_time": 0.0,
"sentence_index": -1,
"char_index": -1,
"inference_end": true,
"flush_buffer": false,
"req_id": "ws-tts-564c57d3-6c50-4c01-90a4-4016547f6625-0"
}
Post: /user/v1/tts_task/create_tts_task
Body:
{
"text": "在这里提醒大家,入冬之后呢要注意早睡晚起,保证充足的睡眠。可以适当地运动,强度达到身体微微发热、微微出汗就好啦,不宜过度地运动哈。愿你们在这个寒冷的季节里,心怀温暖,身体健康,家庭幸福。",
"tts_vcn": "XMOV_LV_TTS__13"
}
Response:
{
"error_code": 0,
"error_reason": "",
"data": {
"task_id": 10
}
}
GET: /user/v1/tts_task/get_tts_task
Params: task_id: 135 # 任务id
Response:
{
"error_code": 0,
"error_reason": "",
"data": {
"id": 10,
"synth_status": "waiting",
"file_oss": "",
"synth_start_time": None,
"synth_finish_time": None,
"error_reason": "",
}
}
Post: /user/v1/tts_task/cancel_tts_task
{
task_id: 10 # 任务id
}
Response:
{
"error_code": 0,
"error_reason": ""
}