对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
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
相关文章推荐
- eoLinker-API_Shop_短信服务接口-调用示例代码,支持PHP、Python、Java等语言
- jenkins的api调用python篇(三)秀代码
- deepMind Lab 可以调用的python API 文档 ,从deepMindlab的代码上直接复制粘贴的,方便今后查看。
- 使用C#调用系统API实现内存注入的代码
- 飞信API(附带调用示例代码C#)
- python调用C和C++代码(BOOST)
- 如何让python调用C和C++代码
- MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API
- linux 下python 调用C++ .so如何debug c++代码
- c++调用python完整代码(开发环境vs2008)
- 在.NET代码里调用Network Monitor API.
- 新浪微博PC客户端(DotNet WinForm C# 版,C#调用新浪微博API代码,源码下载)—— 初探 (第二部分内置链接)
- 使用PB调用API自动更新(非FTP模式)(七、下载代码)
- python调用C和C++代码
- API编程系列之一:窥豹——API调用优美代码赏析
- vc中调用python代码
- VFP调用API实现代码模拟鼠标.键盘动作
- MSIL 教程(二):数组、分支、循环、使用不安全代码和如何调用Win32 API
- VFP调用API实现代码模拟鼠标.键盘动作
- 在Python代码中调用WPS