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

来源:互联网 发布:数据分析师职称评定 编辑:程序博客网 时间:2024/06/07 21:50

import httplibimport urllibimport base64import sysimport sslssl._create_default_https_context = ssl._create_unverified_contextdef 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


0 0