啦啦啦,巨量千川的M-API的实践在上一份使用教程之后正式开始记录设计思路及具体步骤啦!详细的其实还是要看一下巨量引擎工作台中的开发文档API接口 - 商业开放平台,本文所讲述的代码片段基本都是根据需求进行的改版,可以直接套用的代码段哦~
上次有小伙伴私信问我回调地址具体怎么设置,这里统一回复一下有疑问的小伙伴,随便设置!是的,你没看错,你可以随便打一个网址,类似于www.xiaobai这样的URL,即使他没有被注册,也是能够获取到auth_code验证码的。他会直接体现在网址中,只需要手动复制一下就可以啦!
巨量千川开发者文档API接口 - 商业开放平台
首先先剖析一下这部分的开发思路:首先账户信息这一块肯定是首要获取的,巨量千川平台所有的账户又都是绑定到抖音小店的,而且授权也是根据小店来进行授权的,这就导致我们想要获取到账户信息的话,首先要查看小店端的接口是否有可以返回账户信息的。之后拿到绑定在小店下面的账户ID,再根据账户ID去获取所需要的账户名称,这样最基础的账户部分的信息就获取完毕了,当然,如果还需要其他账户相关的字段数据,也只需要加请求参数就可以了。获取账户信息之后就可以发起具体的计划请求啦~后面只需要设置自己需要的参数就可以成功返回了。
首先是老样子,获取到最新的auth_code,和需要获取数据的小店代码,我这边就不过多展示了。(在巨量引擎首页点击生态服务,找到开发者,即可进入,选择巨量千川应用,然后点击授权跳转,就可以拿到auth_code。授权完毕后刷新网页,就可以在下面看到授权的小店,复制小店ID成一个数组就好了。所有的参数都要求是字符串形式的哦,直接复制的需要加上单引号)
正式开始:为了避免需要人工重复的点击授权申请,巨量引擎也给了一个refresh_token用于超时刷新。首先使用auth_code外部验证码获取到内部access_token值和用于刷新access_token的refresh_token。请求参考代码我放在下面啦!
#!获取access_token值
def get_access_token(APP_ID,secret,auth_code):
open_api_url_prefix = 'https://ad.oceanengine/open_api/'
uri = 'oauth2/access_token/'
url = open_api_url_prefix + uri
data = {
'app_id': APP_ID,
'secret': secret,
'grant_type': 'auth_code',
'auth_code': auth_code
}
#发起请求
rsp = requests.post(url, json=data)
#返回值是json字符串,所以必须要把他解码才可以成正常的字典才可以继续操作
rsp_data = rsp.json()
#查看返回值是否正确
#print(rsp_data)
return rsp_data
#!刷新access_token
def refresh_access_token(APP_ID,secret,refresh_token):
open_api_url_prefix = 'https://ad.oceanengine/open_api/'
uri = 'oauth2/refresh_token/'
refresh_token_url = open_api_url_prefix + uri
data = {
'appid': APP_ID,
'secret': secret,
'grant_type': 'refresh_token',
'refresh_token': refresh_token,
}
rsp = requests.post(refresh_token_url, json=data)
rsp_data = rsp.json()
#print(rsp_data)
return rsp_data
很好,现在已经完成了最重要的两个方法的撰写!接下来就按部就班的进行填参数就可以了。那么首先要写一个调用函数去判断当前的access_token值是否可用,根据开发文档的返回参数可以通过message的值进行判断,如果是"OK"那就是正常返回,那么我们就把最新的access_token和refresh_token给return出来,如果不是那么返回就有问题啦!(如果是第一次使用的话,没有refresh_值,那么只能重新获取auth_code重新获取一遍咯~这也是没办法的事情)返回错误的话就调用refresh_token去发起刷新access_token请求,然后再把返回值return出来。(在开发过程中代码优先级问题一定要注意!)
#!获取到最新的access_token和refresh_token
def get_token(rsp_data,refresh_token):
if rsp_data['message'] == 'OK':
access_token=rsp_data['data']['access_token']
refresh_token=rsp_data['data']['refresh_token']
return access_token,refresh_token
else :
get_refresh_yn=input('是否马上更新y/n:')
if get_refresh_yn == 'y':
rsp_data=refresh_access_token(APP_ID,secret,refresh_token)
#print(rsp_data)
if rsp_data['message'] == 'OK':
access_token=rsp_data['data']['access_token']
refresh_token=rsp_data['data']['refresh_token']
return access_token,refresh_token
if rsp_data['message'] == 'refresh_token已过期':
print('refresh_token过期啦!请重新授权!')
else:
print('授权码已失效,请重新获取!')
请求成功,那么在你的终端上就会把access_token和refresh_token打印出来啦!一定要记得及时更新本地代码中refresh_token的值。
下一步就是根据小店ID获取到绑定在小店下的账户ID啦!(因为开发文档其实是有说明的,一次最多绑定十个不同的小店,但是经过本人验证,其实多几家店也可以,只是容易access_token过期,需要重新验证auth_code)
#获取店铺下的所有广告账户ID
def get_advertiser(access_token,shop_id):
open_api_url_prefix = 'https://ad.oceanengine/open_api/'
uri = 'v1.0/qianchuan/shop/advertiser/list/'
url = open_api_url_prefix + uri
params = {
'shop_id':shop_id,
# 'page': 1,
'page_size': 100,
}
headers = {'Access-Token': access_token}
rsp = requests.get(url, json=params, headers=headers)
rsp_data = rsp.json()
return rsp_data
这样就会返回所有的账户ID啦!然后我们进行一个循环取数,分别把账户ID取出来进行账户(广告主)详情查询,就可以得到我们需要的账户名啦!
#获取账户名
def get_advertiser_info(access_token,advertiser_id):
open_api_url_prefix = 'https://ad.toutiao/open_api/'
uri = '2/advertiser/public_info/'
url = open_api_url_prefix + uri
params = {
'advertiser_ids': [advertiser_id]
}
headers = {'Access-Token': access_token}
rsp = requests.get(url, json=params, headers=headers)
rsp_data = rsp.json()
#print(rsp_data)
advertiser_name = rsp_data['data'][0]['name']
return advertiser_name
那么具体怎么循环,以及具体的计划数据如何请求~看下一篇~~~