您的位置:首页 > 编程语言 > Python开发

对python调用微软API代码的理解

2016-11-22 16:16 447 查看
import httplib
import urllib
import base64
import sys
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

def emotion():
# print "success"
headers = {
'Content-Type': 'application/octet-stream',
'Ocp-Apim-Subscription-Key': '6b106d11b891490298ebecbc1f99eb85', }
##确定使用类型是json还是stream,输入密钥
params = urllib.urlencode(
{"url": "https://api.projectoxford.ai/emotion/v1.0/recognize"})
##输入Request URL,urlencode函数,可以把key-value这样的键值对转换成我们想要的格式,返回的是a=1&b=2这样的字符串
f = urllib.urlopen("http://127.0.0.1:8090/?action=snapshot")
s = f.read()
w = open("snapshot.jpg", "wb")
w.write(s)
##将图片传给定地址,'wb'是以二进制写入(原文档没有给出127.0.0.1这个地址,此处为猜测)
fp = open("snapshot.jpg", "rb")
##'rb'即为用二进制打开文件
fp.seek(0, 0)
##进行此操作后读取文件的指针仍在开头,seek(offset,whence=0)offset:开始的偏移量,也就是代表需要移动偏移的字节数whence:给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。默认为0。
d = []
##定义列表d并把最重最终获得的二进制代码传到d中
d = fp.read()
##进行文件的读写操作,最终目的是为了获得{body},即d
try:
conn = httplib.HTTPSConnection('api.projectoxford.ai')
conn.request("POST", "/emotion/v1.0/recognize?%s" % params, d, headers)
##将一系列的头,需要的URL,检测的图片的二进制代码post到微软网站
response = conn.getresponse()
data = response.read()
print(data)
conn.close()
##获取的微软API返回的参数并储存到data中
except Exception as e:
print("[Errno {0}] {1}".format(e.errno, e.strerror))
##如果发生错误的话就输出错误类型
data = eval(data)
##利用eval函数可以把返回的字符串转换为python能够识别的列表形式
num = len(data)
##计算列表元素,而非字符串个数
ret = []
for i in range(0, num):
ret.append(sorted(data[i]["scores"],reverse=True,key=lambda x: data[i]["scores"][x])[0])
ret = str(ret)
##对其进行sorted排序,最终只返回最大的那个,建立ret列表,重新转换为字符串,sorted排序:data为列表可迭代对象,reverse控制降序排列,key写了一个匿名函数确定了排序的规则,最后[0]限定了只添加第一个即为最大的那个元素
return ret
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: