|
10鱼币
使用百度云的在线语音合成时,出现以下错误:
- tts api error:{"error_code":100,"error_msg":"Invalid parameter"}
- file saved as : error.txt
- Press any key to continue . . .
复制代码
代码源码:
- # -*- coding: UTF-8 -*-
- import sys
- import json
- # 保证兼容python2以及python3
- IS_PY3 = sys.version_info.major == 3
- if IS_PY3:
- from urllib.request import urlopen
- from urllib.request import Request
- from urllib.error import URLError
- from urllib.parse import urlencode
- from urllib.parse import quote_plus
- else:
- import urllib2
- from urllib import quote_plus
- from urllib2 import urlopen
- from urllib2 import Request
- from urllib2 import URLError
- from urllib import urlencode
- # 替换你的 API_KEY
- API_KEY = 'xxxxxxxxxxxxxxxxx'
- # 替换你的 SECRET_KEY
- SECRET_KEY = 'xxxxxxxxxxxxxxxxxxx'
- # 大姚的订单信息内容文本
- TEXT = ''内容已省去'''
- TTS_URL = 'https://aip.baidubce.com/rpc/2.0/tts/v1/create'
- """ TOKEN start """
- TOKEN_URL = 'http://openapi.baidu.com/oauth/2.0/token'
- """
- 获取token
- """
- def fetch_token():
- params = {'grant_type': 'client_credentials',
- 'client_id': API_KEY,
- 'client_secret': SECRET_KEY}
- post_data = urlencode(params)
- if (IS_PY3):
- post_data = post_data.encode('utf-8')
- req = Request(TOKEN_URL, post_data)
- try:
- f = urlopen(req, timeout=5)
- result_str = f.read()
- except URLError as err:
- print('token http response http code : ' + str(err.code))
- result_str = err.read()
- if (IS_PY3):
- result_str = result_str.decode()
- result = json.loads(result_str)
- if ('access_token' in result.keys() and 'scope' in result.keys()):
- if not 'audio_tts_post' in result['scope'].split(' '):
- print ('please ensure has check the tts ability')
- exit()
- return result['access_token']
- else:
- print ('please overwrite the correct API_KEY and SECRET_KEY')
- exit()
- """ TOKEN end """
- if __name__ == '__main__':
- token = fetch_token()
- tex = quote_plus(TEXT) # 此处TEXT需要两次urlencode
- params = {
- 'access_token':token,
- 'text': tex,
- 'format':"mp3-48k",
- 'voice':5003,
- 'lang': "zh"
- }
- data = urlencode(params)
- req = Request(TTS_URL, data.encode('utf-8'))
- has_error = False
- try:
- f = urlopen(req)
- result_str = f.read()
- headers = dict((name.lower(), value) for name, value in f.headers.items())
- has_error = ('content-type' not in headers.keys() or headers['content-type'].find('audio/') < 0)
- except URLError as err:
- print('http response http code : ' + str(err.code))
- result_str = err.read()
- has_error = True
- save_file = "error.txt" if has_error else u'大姚的订单信息.mp3'
- with open(save_file, 'wb') as of:
- of.write(result_str)
- if has_error:
- if (IS_PY3):
- result_str = str(result_str, 'utf-8')
- print("tts api error:" + result_str)
- print("file saved as : " + save_file)
复制代码
应该是请求的链接不合法,有没有大神知道如何写合法链接?万分感谢!
这是相关文档:
https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu
https://cloud.baidu.com/doc/SPEECH/s/1ku59x8ey |
|