python3:调用阿里云小蜜代码示例
2018-02-12 16:40
573 查看
最近有一个项目需要调用阿里云小蜜,我就拿python调用了一下,然后在官网居然没有找到很好的sample code。就只能自己硬着头皮写一下啦import base64
import urllib.parse
import hmac
from hashlib import sha1
import requests
import uuid
import time
import hmac,ssl
ALIYUN_ACCESS_KEY_ID="your id"
ALIYUN_ACCESS_KEY_SECRET="your secret"
# 解决 访问ssl网站证书的问题
try:
_create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
# Legacy Python that doesn't verify HTTPS certificates by default
pass
else:
# Handle target environment that doesn't support HTTPS verification
ssl._create_default_https_context = _create_unverified_https_context
D = {
'Format':'JSON',
'Version':'2017-10-11',
'SignatureMethod':'HMAC-SHA1'
}
timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
D['SignatureNonce']=str(uuid.uuid1())
D['SignatureVersion']=1.0
D['AccessKeyId']=ALIYUN_ACCESS_KEY_ID
D['Timestamp']=timestamp
def percent_encode(encodeStr):
encodeStr = str(encodeStr)
res = urllib.parse.quote(encodeStr)
res = res.replace('+', '%20')
res = res.replace('*', '%2A')
res = res.replace('%7E', '~')
return res
def sign(parameters):
sortedParameters = sorted(parameters.items(), key=lambda parameters: parameters[0])
print(sortedParameters)
canonicalizedQueryString = ''
for (k, v) in sortedParameters:
canonicalizedQueryString += '&' + percent_encode(k) + '=' + percent_encode(v)
stringToSign = 'GET&%2F&' + percent_encode(canonicalizedQueryString[1:]) # 使用get请求方法
bs = ALIYUN_ACCESS_KEY_SECRET + '&'
bs = bytes(bs, encoding='utf8')
stringToSign = bytes(stringToSign, encoding='utf8')
h = hmac.new(bs, stringToSign, sha1)
# 进行编码
signature = base64.b64encode(h.digest()).strip()
return signature
D['Action']="Chat"
D['InstanceId']="your instance id" #你阿里云的机器人实例id
D['Utterance']="电脑黑屏了怎么办"
D['Signature'] = sign(D)
sortedParameters = sorted(D.items(), key=lambda D: D[0])
# print(D["Signature"])
# print(sortedParameters)
url = 'https://chatbot.cn-shanghai.aliyuncs.com/?' + urllib.parse.urlencode(sortedParameters)
print(url)
r = requests.get(url)
print(r.text)
运行成功了,我的输出为:{"SessionId":"672d532e9e1e40c09563828f54ee5b05","Messages":[{"Text":{},"Type":"Knowledge","Knowledge":{"Id":"74952","Content":"亲,先确认一下是否是没有接入电源,电量过低导致的黑屏,如果不是请到IT服务台报修,IT管理员会根据检测情况处理哦。","AnswerSource":"KnowledgeBase","Title":"电脑黑屏了怎么办","Summary":"亲,先确认一下是否是没有接入电源,电量过低导致的黑屏,如果不是请到IT服务台报修,IT管理员会根据检测情况处理哦。"}}],"MessageId":"0bb0e211d48d42acaf7f6e1924f7482c","RequestId":"D241002A-FADE-4C86-8180-9CD0B857017E"}
[2].python3 获取阿里云ECS 实例及监控的方法.https://www.cnblogs.com/IPYQ/p/5996868.html
[3].签名机制.https://help.aliyun.com/document_detail/60762.html?spm=a2c4g.11186623.6.553.lFcX1e
import urllib.parse
import hmac
from hashlib import sha1
import requests
import uuid
import time
import hmac,ssl
ALIYUN_ACCESS_KEY_ID="your id"
ALIYUN_ACCESS_KEY_SECRET="your secret"
# 解决 访问ssl网站证书的问题
try:
_create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
# Legacy Python that doesn't verify HTTPS certificates by default
pass
else:
# Handle target environment that doesn't support HTTPS verification
ssl._create_default_https_context = _create_unverified_https_context
D = {
'Format':'JSON',
'Version':'2017-10-11',
'SignatureMethod':'HMAC-SHA1'
}
timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
D['SignatureNonce']=str(uuid.uuid1())
D['SignatureVersion']=1.0
D['AccessKeyId']=ALIYUN_ACCESS_KEY_ID
D['Timestamp']=timestamp
def percent_encode(encodeStr):
encodeStr = str(encodeStr)
res = urllib.parse.quote(encodeStr)
res = res.replace('+', '%20')
res = res.replace('*', '%2A')
res = res.replace('%7E', '~')
return res
def sign(parameters):
sortedParameters = sorted(parameters.items(), key=lambda parameters: parameters[0])
print(sortedParameters)
canonicalizedQueryString = ''
for (k, v) in sortedParameters:
canonicalizedQueryString += '&' + percent_encode(k) + '=' + percent_encode(v)
stringToSign = 'GET&%2F&' + percent_encode(canonicalizedQueryString[1:]) # 使用get请求方法
bs = ALIYUN_ACCESS_KEY_SECRET + '&'
bs = bytes(bs, encoding='utf8')
stringToSign = bytes(stringToSign, encoding='utf8')
h = hmac.new(bs, stringToSign, sha1)
# 进行编码
signature = base64.b64encode(h.digest()).strip()
return signature
D['Action']="Chat"
D['InstanceId']="your instance id" #你阿里云的机器人实例id
D['Utterance']="电脑黑屏了怎么办"
D['Signature'] = sign(D)
sortedParameters = sorted(D.items(), key=lambda D: D[0])
# print(D["Signature"])
# print(sortedParameters)
url = 'https://chatbot.cn-shanghai.aliyuncs.com/?' + urllib.parse.urlencode(sortedParameters)
print(url)
r = requests.get(url)
print(r.text)
运行成功了,我的输出为:{"SessionId":"672d532e9e1e40c09563828f54ee5b05","Messages":[{"Text":{},"Type":"Knowledge","Knowledge":{"Id":"74952","Content":"亲,先确认一下是否是没有接入电源,电量过低导致的黑屏,如果不是请到IT服务台报修,IT管理员会根据检测情况处理哦。","AnswerSource":"KnowledgeBase","Title":"电脑黑屏了怎么办","Summary":"亲,先确认一下是否是没有接入电源,电量过低导致的黑屏,如果不是请到IT服务台报修,IT管理员会根据检测情况处理哦。"}}],"MessageId":"0bb0e211d48d42acaf7f6e1924f7482c","RequestId":"D241002A-FADE-4C86-8180-9CD0B857017E"}
参考文献
[1].会话.https://help.aliyun.com/document_detail/60463.html?spm=a2c4g.11186623.6.555.rdcox6[2].python3 获取阿里云ECS 实例及监控的方法.https://www.cnblogs.com/IPYQ/p/5996868.html
[3].签名机制.https://help.aliyun.com/document_detail/60762.html?spm=a2c4g.11186623.6.553.lFcX1e
相关文章推荐
- C调用Python函数相关代码示例剖析
- linux平台下C语言调用python代码示例
- python调用Delphi写的Dll代码示例
- python调用 C/C++ 代码示例
- 基于python的短信接口调用代码示例模板
- 调用阿里云API 的demo示例(java/python)
- Python脚本调用C#代码数据交互示例(hello world)
- python3调用R的示例代码
- C调用Python函数相关代码示例剖析
- json 的跨域调用 python代码示例
- eoLinker-API_Shop_短信服务接口-调用示例代码,支持PHP、Python、Java等语言
- json的键名为数字时的调用方式(示例代码)
- 阿里云对象存储OSS配置介绍设置,上传代码示例
- EzHttp 流传输调用代码示例
- Python中使用插入排序算法的简单分析与代码示例
- 从 stdin 读取输入的C程序示例 && python脚本调用可执行文件
- python读取与写入csv格式文件的示例代码
- Java调用带SoapHeader头验证的.net Webservice示例代码
- com组件调用代码示例----续
- 【python】查看和添加路径,直接调用自己的代码