一、百度api调用
官方的api调用模板(python)链接:https://cloud.baidu.com/doc/APIGUIDE/s/3k1mz24k5:建议看一次视频,大概知道下面每个变量是什么!
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
本示例代码仅作参考。如果您是业务调用,建议对body体也做加密。
注意:本示例用到的鉴权方式不适用于一部分产品(语音识别、人脸识别等)。请查阅您使用产品的API文档,如果鉴权方式基于Access Key(包括Access Key ID(AK)和Secret Access Key(SK)),
且最终认证字符串为bce-auth-v{version}/{accessKeyId}/{timestamp}/{expirationPeriodInSeconds}/{signedHeaders}/{signature},则适用本示例。
此外,部分产品在AK/SK加密之外,还会要求额外的认证,例如百度信息流推广API需要您将百度推广账号的信息填到body体里。请注意查阅文档。
'''
import hashlib
import hmac
import urllib
import time
# 1.AK/SK、host、method、URL绝对路径、querystring
AK = "input your AK"
SK = "input your SK"
host = "bcc.bj.baidubce.com"
method = "PUT"
query = "modifyAttribute"
URI = "/v2/instance/i-YufwpQAe"
# 2.x-bce-date
x_bce_date = time.gmtime()
x_bce_date = time.strftime('%Y-%m-%dT%H:%M:%SZ',x_bce_date)
# 3.header和signedHeaders
header = {
"Host":host,
"content-type":"application/json;charset=utf-8",
"x-bce-date":x_bce_date
}
signedHeaders = "content-type;host;x-bce-date"
# 4.认证字符串前缀
authStringPrefix = "bce-auth-v1" + "/" +AK + "/" +x_bce_date + "/" +"1800"
# 5.生成CanonicalRequest
#5.1生成CanonicalURI
CanonicalURI = urllib.parse.quote(URI) # windows下为urllib.parse.quote,Linux下为urllib.quote
#5.2生成CanonicalQueryString
CanonicalQueryString = query # 如果您调用的接口的query比较复杂的话,需要做额外处理
#5.3生成CanonicalHeaders
result = []
for key,value in header.items():
tempStr = str(urllib.parse.quote(key.lower(),safe="")) + ":" + str(urllib.parse.quote(value,safe=""))
result.append(tempStr)
result.sort()
CanonicalHeaders = "\n".join(result)
#5.4拼接得到CanonicalRequest
CanonicalRequest = method + "\n" + CanonicalURI + "\n" + CanonicalQueryString +"\n" + CanonicalHeaders
# 6.生成signingKey
signingKey = hmac.new(SK.encode('utf-8'),authStringPrefix.encode('utf-8'),hashlib.sha256)
# 7.生成Signature
Signature = hmac.new((signingKey.hexdigest()).encode('utf-8'),CanonicalRequest.encode('utf-8'),hashlib.sha256)
# 8.生成Authorization并放到header里
header['Authorization'] = authStringPrefix + "/" +signedHeaders + "/" +Signature.hexdigest()
# 9.发送API请求并接受响应
import requests
import json
body={
"name" : "QQQQQQ"
}
url = "http://"+host + URI
r = requests.put(url,headers = header,data=json.dumps(body))
print(r.text)
二、使用步骤
一般照着官方文档改就行了。视频分析api文档链接
https://cloud.baidu.com/doc/VCA/s/Tjwvybmvd
1.先获取ak sk
即AK ,SK的值为:
AK = "df2d24431e184818b3a7695e6737fac9"
SK = "*****"
2.获取api的服务域名
即为host的取值
host = "vca.bj.baidubce.com"
3.看公共请求头部分
这一部分,可以说几乎不用改。
4.发送请求
查询视频分析中间任务结果
MCA 对视频的分析过程,会涉及很多中间任务的执行。发起视频分析时选用的分析模板定义了需要执行的中间任务集合。
根据视频路径查询指定类型的中间任务分析结果。
对照图,我们可以修改以下几个内容
method = "GET"
query = "bos://tv-movies/看美剧学英语 四级词汇 2 ___iz01zkbd1ji.mp4" # 指的视频地址
URI = "/v1/media/speech" # speech为类型(type),在下面的文档可以看到 类型的种类
修改5.2 query 因为官方代码太老了,方法已经不能用(格式参考如下图)
#5.2生成CanonicalQueryString query 默认为 "source=bos://tv-movies/vedio___143bgsu17na.ts"
CanonicalQueryString = str(urllib.parse.quote('source',safe="")) +'=' +str(urllib.parse.quote(query,safe="")) # 如果您调用的接口的query比较复杂的话,需要做额外处理
最后,修改url链接,加上CanonicalQueryString,这样才是完整的链接,才可以进行访问
url = "http://"+host + URI+"?"+CanonicalQueryString
可以对请求进行解析。获取想要的值
r=requests.get(url,headers=header)
for i in json.loads(r.json()['result']):
print(i['statement'])