6 月 21 日,腾讯云在 2017「云 未来」峰会上推出了战略新品——智能云,宣布将腾讯积累近 20 年的 AI 能力向政府、企业和开发者开放,其中首批开放计算机视觉、智能语音识别、自然语言处理的三大核心能力。腾讯云技术社区陆续推出了系列文章,向普通开发者分享如何快速接入并使用这三大 AI 能力,节省自身的开发成本,同时极大提升开发效率和用户体验。
本文将为广大云开发者介绍如何使用万象优图服务的 Python SDK。
1、开发准备
在使用万象优图服务的 python sdk 前,你需要先下载 python sdk,下载地址:github地址
1.1 前期准备
获取项目ID(appid),bucket,secret_id和secret_key;
1.2 获取SDK方法
- pip获取:
在开发环境命令行直接执行下面的命令即可导入 python-sdk 包。
pip install tencentyun
然后,参考api说明和sdk中提供的sample,开发代码即可。sample对应v1版本的restful api, samplev2对应v2版本的restful api。
- 直接下载源码集成:
您也可以直接下载github上提供的源代码,集成到您的开发环境即可(依赖requests)。
2、 API详细说明
2.1 生成签名
1.接口说明
签名生成方法,可以在服务端生成签名,供移动端app使用。
其中签名分为2种: 多次有效签名(有一定的有效时间) 单次有效签名(绑定资源url,只能生效一次) 签名的详细描述及使用场景参见鉴权服务技术方案。
2. 方法
签名函数会自动根据传入的URL,进行不同方式的签名,这里对使用者是透明的。
V2加强版的签名:
def get_app_sign_v2(bucket, fileid, expired)
V2版本的签名:
def app_sign_v2(self, url, expired=0)
V1版本的签名:
def app_sign(self, url, expired=0)
3. 参数和返回值
参数说明:
参数名 | 类型 | 必须 | 默认值 | 参数描述 |
---|---|---|---|---|
url | String | 是 | 无 | 需要操作的url |
expired | Int | 是 | 无 | 签名过期时间戳 |
返回值:
参数名 | 类型 | 参数描述 |
---|---|---|
httpcode | Int | http响应码,请求正常时为200 |
code | Int | API 错误码,成功时为0 |
message | String | API错误信息 |
data | Array | API 返回数据 |
data.sign | String | 签名串 |
示例代码:
代码语言:javascript复制# 生成私密下载url
auth = tencentyun.Auth(secret_id,secret_key)
expired = int(time.time()) 999
sign = auth.get_app_sign_v2(bucket, fileid, expired)
download_url = statRet['data']['download_url']
print 'download_url:', download_url '?sign=' sign
# 生成上传签名
fileid = 'sample' str(int(time.time()))
expired = int(time.time()) 999
sign = auth.get_app_sign_v2(bucket, fileid, expired)
print fileid, sign
2.2 图片上传
1. 接口说明
用于图片的上传,调用者可以通过此接口上传图片并获得图片的url和唯一标识fileid(用于调用其他api)。
2. 方法
代码语言:javascript复制def upload(self, filepath, bucket, fileid='', userid='0', magic_context='', params={})
def upload_binary(self, file_binary, bucket, fileid = '', userid = '0', magic_context = '', params = {})
3. 参数和返回值
参数说明:
参数名 | 类型 | 必须 | 默认值 | 参数描述 |
---|---|---|---|---|
filePath | String | 是 | 无 | 本地图片文件路径 |
file_binary | String | 是 | 无 | base64编码后的字符串数据 |
bucket | String | 是 | 无 | 空间名称 |
fileid | String | 否 | 空 | 用户自定义文件名 |
userid | String | 否 | 0 | 开发者的账号体系的userid, 如果没有,请使用默认值0 |
magicContext | String | 否 | 空 | 上传成功后,用户自定义的回调参数 |
params | array | 否 | 空数组 | 可选处理项,目前支持params[‘get’] => array() 用于指定上传是url中携带的get请求参数 |
返回值:
参数名 | 类型 | 参数描述 |
---|---|---|
httpcode | Int | http响应码,请求正常时为200 |
code | Int | API 错误码,成功时为0 |
message | String | API错误信息 |
data | Dict | API 返回数据 |
data.url | String | 图片的管理URL |
data.downloadUrl | String | 图片的下载和访问URL |
data.fileid | String | 图片的唯一ID |
data.info.0.0.width | int | 图片宽度 |
data.info.0.0.height | int | 图片高度 |
示例代码:
代码语言:javascript复制image = tencentyun.ImageV2(appid,secret_id,secret_key)
obj = image.upload('/tmp/amazon.jpg', bucket, fileid);
print obj
2.3 图片复制
1. 接口说明
用于图片的复制,调用者可以通过此接口复制已经上传的图片并获得新图片的url和唯一标识fileid(用于调用其他api)。
2. 方法
代码语言:javascript复制def copy(self, bucket, fileid, userid='0')
3. 参数和返回值
参数说明:
参数名 | 类型 | 必须 | 默认值 | 参数描述 |
---|---|---|---|---|
bucket | String | 是 | 无 | 空间名称 |
fileid | String | 是 | 无 | 图片唯一ID |
userid | String | 否 | 0 开发者的账号 | 体系的userid, 如果没有,请使用默认值0 |
返回值:
参数名 | 类型 | 参数描述 |
---|---|---|
httpcode | Int | http响应码,请求正常时为200 |
code | Int | API 错误码,成功时为0 |
message | String | API错误信息 |
data | Dict | API 返回数据 |
data.downloadUrl | String | 图片的下载和访问URL |
data.url | String | 管理url |
示例代码:
代码语言:javascript复制// 复制
copyRet = image.copy(bucket, fileid)
download_url = copyRet['data']['download_url']
print copyRet
2.4 图片查询
1. 接口说明
用于图片的查询,调用者可以通过此接口查询已经上传的图片并获得图片的各种参数信息。
2. 方法
def stat(self, bucket, fileid, userid='0')
3. 参数和返回值
参数说明:
参数名 | 类型 | 必须 | 默认值 | 参数描述 |
---|---|---|---|---|
bucket | String | 是 | 无 | 空间名称 |
fileid | String | 是 | 无 | 图片唯一ID |
userid | String | 否 | 0 | 开发者的账号体系的userid, 如果没有,请使用默认值0 |
返回值:
参数名 | 类型 | 参数描述 |
---|---|---|
httpcode | Int | http响应码,请求正常时为200 |
code | Int | API 错误码,成功时为0 |
message | String | API错误信息 |
data | Dict | API 返回数据 |
data.downloadUrl | String | 图片的下载和访问URL |
data.url | String | 管理url |
data.fileid | String | 图片的唯一ID |
data.upload_time | String | 图片的上传时间 |
data.size | String | 图片的大小(Bytes) |
data.md5 | String | 图片的md5值 |
data.md5 | String | 图片的md5值 |
data.width | String | 图片的宽度(pixels) |
data.height | String | 图片的高度(pixels) |
示例代码:
代码语言:javascript复制 // 查询管理信息
statRet = image.stat(bucket, fileid)
2.5 图片删除
1. 接口说明
用于图片的删除,调用者可以通过此接口删除已经上传的图片。
2. 方法
def delete(self, bucket, fileid, userid='0')
3. 参数和返回值
参数说明:
参数名 | 类型 | 必须 | 默认值 | 参数描述 |
---|---|---|---|---|
bucket | String | 是 | 无 | 空间名称 |
fileid | String | 是 | 无 | 图片唯一ID |
userid | String | 否 | 0 | 开发者的账号体系的userid, 如果没有,请使用默认值0 |
返回值:
参数名 | 类型 | 参数描述 |
---|---|---|
httpcode | Int | http响应码,请求正常时为200 |
code | Int | API 错误码,成功时为0 |
message | String | API错误信息 |
data | Dict | 空字典 |
示例代码:
print image.delete(bucket, fileid)
2.6 图片下载
图片的下载直接使用图片下载url进行下载,
请求示例:
代码语言:javascript复制GET test0706-10000037.image.myzijiebao.com/tencentyunRestfulAPITest HTTP/1.1
Host: test0706-10000037.image.myzijiebao.com
如果在控制台上面设置了空间样式或者样式下载别名,并且设置了样式分隔符,则访问样式图片的方式如下:
download_url 样式分隔符 样式名。
注:空间样式和样式下载别名的名字统称样式名。 例如设置了样式名“160x160.jpeg”,样式分隔符“/”,则样式图片的访问方式如下:
代码语言:javascript复制GET v2test-10000812.image.myzijiebao.com/tencentyunRestfulAPITest/160x160.jpeg HTTP/1.1
Host: v2test-10000812.image.myzijiebao.com/
若开启了token防盗链,图片下载只能是私密下载,即必须download_url ?sign=[签名]。 请求示例:
代码语言:javascript复制GET http://test0706-10000037.image.myzijiebao.com/951b0e3b-db35-40e2-8c31-ed38dab5ae69?sign=Ea5aPdBMeVm5O
T332nSYh1nqyJhhPTEwMDAwMDM3JmI9dGVzdDA3MDYmaz1BS0lEcG9LQmZNSzdhWWNZTmxxeG5FdFlBMWFqQXFqaTJQN1QmZT0xNDQy
MjE0NzMwJnQ9MTQ0MTg1NDczMCZyPTE0NDE4NTQ3MzAmdT0wJmY9 HTTP/1.1
Host: test0706-10000037.image.myzijiebao.com