腾讯AI开放平台的签名算法(Python)
最近接到一个任务,要求使用python进行语音合成,实现班级点名的功能。后来使用了pyttsx库,发现这个库合成的语音听起来不清晰,于是果断抛弃。然后就想起了使用腾讯的语音合成api,发现腾讯优图的语音合成还是比较清晰的。本来腾讯ai开放平台的api使用起来不难,但就是计算 “sign” 这个签名时有些不好理解。这里只对这个签名的算法进行讲解。
官方提供的介绍如下:
下面分步介绍:
# 在执行这一步时首先要保证parms里的所有必须参数(sign除外)都已经完整
# 我的params如下:
params = {'app_id' : self.APP_ID,'time_stamp' : time_stamp,'nonce_str' : nonce_str,'text' : self.TEXT,'model_type' : self.model_type, # 语音 0~2。0:女。1:女英文。2:男'speed' : self.speed, # 语速 -2:0.6,-1:0.8, 0:正常, 1:1.2倍,2:1.5倍};
# 其中的time_stamp和nonce_str需要实时计算。方法如下:time_stamp = int(time.time()); # 获得时间戳(秒级),防止请求重放nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 10)); # 获得随机字符串,保证签名不被预测。"""将<key, value>请求参数对按key进行字典升序排序,得到有序的参数对列表N将列表N中的参数对按URL键值对的格式拼接成字符串,得到字符串T(如:key1=value1&key2=value2),URL键值拼接过程value部分需要URL编码,URL编码算法用大写字母,例如%E8,而不是小写%e8"""# 获得sign对应的值before_sign = '';# 对key排序拼接for key in sorted(params):before_sign += f'{key}={quote(str(params[key]).encode("utf8"))}&';
# 将应用秘钥以app_key为键名,拼接到before_sign的末尾before_sign += f"app_key={self.APP_KEY}";
# 对获得的before_sign进行MD5加密(结果大写),得到借口请求签名sign = hashlib.md5(before_sign.encode("utf-8")).hexdigest().upper();# 将请求签名添加进参数字典params["sign"] = sign;
最后附上完整代码:
# 获得时间戳(秒级),防止请求重放time_stamp = int(time.time());# 获得随机字符串,保证签名不被预测nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 10))# 组合参数(缺少sign,其值要根据以下获得)params = {'app_id' : self.APP_ID,'time_stamp' : time_stamp,'nonce_str' : nonce_str,'text' : self.TEXT,'model_type' : self.model_type, # 语音 0~2。0:女。1:女英文。2:男'speed' : self.speed, # 语速 -2:0.6,-1:0.8, 0:正常, 1:1.2倍,2:1.5倍};# 获得sign对应的值before_sign = '';# 对key排序拼接for key in sorted(params):before_sign += f'{key}={quote(str(params[key]).encode("utf8"))}&';# 将应用秘钥以app_key为键名,拼接到before_sign的末尾before_sign += f"app_key={self.APP_KEY}";# 对获得的before_sign进行MD5加密(结果大写),得到借口请求签名sign = hashlib.md5(before_sign.encode("utf-8")).hexdigest().upper();# 将请求签名添加进参数字典params["sign"] = sign;
腾讯AI开放平台的签名算法(Python)相关推荐
- 腾讯AI开放平台 SDK
腾讯AI开放平台 SDK Tencent AI open platform sdk Special thanks to the generous sponsorship by: Requirement ...
- python3调用腾讯AI开放平台
CSDN上偶遇一文说明如何调用腾讯AI开放平台API,因为喜欢python3,所以用python3实现了下. 用qq登录获取自己的id和key. 参考点击打开链接. 首先获取请求参数.新建了个文件md ...
- 腾讯AI开放平台的接口调用指南
最近无意发现腾讯AI开放平台上提供了大量好玩的人工智能云服务,而且是完全免费的.只需要用QQ号登录即可.这么好的东西,作为一个程序员,当然要试试了! 从上图可以看出腾讯AI开放平台提供的人工智能服务主 ...
- 腾讯ai开放平台 手册_创建手册以实现大规模开放
腾讯ai开放平台 手册 "是的,但是你实际上是怎么做到的呢?" 在Opensource.com以及无数的会议和研讨会上,这是我们社区领域最常见的问题. 人们倾向于理解为什么在工作场 ...
- 腾讯AI开放平台使用尝试:代理后的文本翻译API使用方式
这篇文章介绍一下如何结合代理服务器使用腾讯AI开放平台提供的文本翻译API. 目录 事前准备 请求参数 返回格式 示例代码 使用示例 常见问题 结果确认 总结 参考内容 事前准备 实现需要申请申请账号 ...
- 腾讯AI开放平台使用尝试:账号开通/应用创建/能力开通
这篇文章记录一下使用腾讯AI开放平台的使用:如何进行账号开通.应用创建和能力开通. 目录 文档中心地址 注册成为开发者 步骤1:点击控制台 步骤2: 通过QQ账号关联 创建应用并开通能力 步骤1: 创 ...
- 腾讯AI开放平台的使用
一.腾讯AI开放平台 https://ai.qq.com/ 二.腾讯AI平台支持的功能 三.签名机制 1.计算步骤 用于计算签名的参数在不同接口之间会有差异,但算法过程固定如下4个步骤.1.将< ...
- 腾讯开发平台php,腾讯AI开放平台 Tencent AI open platform
腾讯AI开放平台 SDK Tencent AI open platform sdk Special thanks to the generous sponsorship by: Requirement ...
- php图像识别api,使用腾讯AI开放平台api进行图片OCR文字识别
重要:本文最后更新于2019-05-20 08:46:46,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗. 其实图片的文字识别其实还算简单,一般是根据特定字体制作出字码文件,然后分割 ...
最新文章
- NSWindow添加NSViewController
- 如何创建高性能、可扩展的Node.js应用?
- LAS点云查看 转换格式
- php通过条件来定义const,php用const出错是什么原因
- Django-组件拾遗
- sg nc的java下载,01_SG-NC-客户端安装说明及培训材料下载 3
- 算法导论第22章部分答案
- 七牛 html 上传,在七牛上传之后如何自己自定义上传完成处理并在页面显示。_html/css_WEB-ITnose...
- ISA——防火墙策略的执行过程
- SQL高级查询—实验报告
- 《社会动物——爱、性格和成就的潜在根源》读后感及摘录(2)
- Windows10系统变慢,用上这19招,电脑性能大幅度提升!
- 关于Java的抽象类与接口
- verilog对信号二分频 时钟分频信号作为时钟使能信号
- 1790D Matryoshkas
- Xen与XenServer的区别
- 局域网在线设备扫描工具 v1.0
- HM二次开发 - Data Names及其使用
- mysql优化总结(四)
- VSTO开发入门教程(bili网站搜罗VSTO免费视频资源)
热门文章
- 计算机音乐会议,全国声音与音乐技术会议6thConferenceonSoundandMusic.PDF
- 红外对管应用电路_红外对管的原理及应用
- 2019微博#让红包飞#圆满收官 4.6亿网友嗨抢锦鲤红包
- JVM之本地方法接口和本地方法栈
- .net framework 4.8是什么,用于哪些方面,作用在哪
- 有了电脑怎么搞?我有办法(第一部分)-涵子的个人想法
- 蔚来的“未来”有多远?
- luogu1889 士兵站队
- Allegro导入PADS文件
- java连接couchdb,Java CouchDB连接详细实现步骤