第三章 关于千川market API 获取在投计划数据
在完成前面第二章获取到acces_token再结合我们的广告户ID我们就能获取到相应的计划数据,先看下文档https://open.oceanengine.com/labels/12/docs/1697466345527308主要用到的是数据报表下的接口的调用。
第一步导入相应包
# coding=utf-8
import time
import http.client
import sys,os
import random
from random import sample
import requests
import json
from six import string_types
from six.moves.urllib.parse import urlencode, urlunparse # noqa
import datetime
import re
第二步 需要获取在投计划的ad_id
#获取广告账户下所有计划,消耗的降序排列
def get_all_ad(access_token,advertiser_id):
# print("获取所有计划中")
import requests
open_api_url_prefix = "https://ad.oceanengine.com/open_api/"
uri = "v1.0/qianchuan/ad/get/"
url = open_api_url_prefix + uri
params = {
"advertiser_id": advertiser_id,
"page_size":200,
"order_type":"DESC",
# "page":1,
"filtering":{
"status":"DELIVERY_OK",
"marketing_goal":"LIVE_PROM_GOODS"
}
}
headers = {"Access-Token": access_token}
rsp = requests.get(url,json=params,headers=headers)
# print(rsp)
rsp_data = rsp.json()
rsp_data_com_json=json.dumps(rsp_data,indent=2,ensure_ascii=False)
user_dic = json.loads(rsp_data_com_json)
ads_id_list=user_dic['data']['list']
ad_count=len(ads_id_list)
i=0
excel_ad_id_list=[]
while i<ad_count:
excel_ad_id_list.append(ads_id_list[i]['ad_id'])
i=i+1
return excel_ad_id_list
返回得到的是在投计划的list,在逐一进行查询每一条计划的数据
第三步 查询在投计划的数据
下面这个传入的参数是ad_id_list,返回的是所有在投计划的数据,需要进行拆解
#获取广告计划数据
def get_ad_report_all_video(access_token,advertiser_id,ad_id_list,fields,start_date,end_date):
import requests
open_api_url_prefix = "https://ad.oceanengine.com/open_api/"
uri = "v1.0/qianchuan/report/ad/get/"
url = open_api_url_prefix + uri
params = {
"advertiser_id":advertiser_id,
# "fields":fields,
"fields":fields,
"page_size":100,
"start_date":start_date,
"end_date":end_date,
"filtering": {
"ad_ids":ad_id_list,
"marketing_goal":"VIDEO_PROM_GOODS"
}
}
headers = {"Access-Token": access_token}
rsp = requests.get(url, json=params, headers=headers)
rsp_data = rsp.json()
# print("rsp_data",rsp_data)
return rsp_data
第四步 将上一步的数据进行拆分并上传到服务器上,由于是个人私人服务器,所以此处我隐去上传接口,大家可以换成自己的。在拆分单条计划的时候,额外得去获取计划的类型,托管/非托管,放量/控本,直投/素材等,以便我们下一章需要进行调控计划的判断数据和参数
#通过调用查询的计划消耗数据结果,传入解析,并上传到服务器存储
def update_ad_id_server(rsp_data_com):
# print("update_ad_id_server is going")
get_weburl_1="你自己的服务器网址"
insert_ad_id_tb_server="你自己的服务器的网页端口"
# print(rsp_data_com)
rsp_data_com_json=json.dumps(rsp_data_com,indent=2,ensure_ascii=False)
user_dic = json.loads(rsp_data_com_json)
cjson=checkJSON()
list_cjson=cjson.getKeys(rsp_data_com)
list_in=cjson.isExtend(rsp_data_com,'list')
if list_in:
ads_id_list=user_dic['data']['list']
m=0
while m<len(ads_id_list):
try:
advertiser_id=str(ads_id_list[m]["advertiser_id"])
ad_id=str(ads_id_list[m]["ad_id"])
stat_cost=str(ads_id_list[m]["stat_cost"])
show_cnt=str(ads_id_list[m]["show_cnt"])
ctr=str(ads_id_list[m]["ctr"])
cpm_platform=str(ads_id_list[m]["cpm_platform"])
click_cnt=str(ads_id_list[m]["click_cnt"])
pay_order_count=str(ads_id_list[m]["pay_order_count"])
pay_order_amount=str(ads_id_list[m]["pay_order_amount"])
dy_follow=str(ads_id_list[m]["dy_follow"])
convert_cnt=str(ads_id_list[m]["convert_cnt"])
convert_cost=str(ads_id_list[m]["convert_cost"])
convert_rate=str(ads_id_list[m]["convert_rate"])
if stat_cost != "0":
#先获取是否放量计划
smart_bid_type=get_smart_bid_type(access_token,ad_id,advertiser_id)
#再获取转化目标
my_external_action=get_external_action(access_token,ad_id,advertiser_id)
# print("smart_bid_type",smart_bid_type)
if smart_bid_type == "SMART_BID_CUSTOM":
#如果是控本计划
if my_external_action=="AD_CONVERT_TYPE_LIVE_SUCCESSORDER_PAY":
# #获取控本单条计划的出价和预算
my_cpa_bid,my_budget=get_cpa_budget(access_token,ad_id,advertiser_id)
budget=str(my_budget)
cpa_bid=str(my_cpa_bid)
elif my_external_action=="AD_CONVERT_TYPE_LIVE_PAY_ROI":
my_roi_goal,my_budget=get_my_roi_goal_budget(access_token,ad_id,advertiser_id)
budget=str(my_budget)
cpa_bid=str(my_roi_goal)
else:
cpa_bid="0"
budget="0"
#是直推还是视频
yn_video_material=get_yn_video_material(access_token,ad_id,advertiser_id)
# shipin_lable=yn_video_material
# print(ad_id,":",yn_video_material)
kongben_lable="y"
get_url=get_weburl_1+insert_ad_id_tb_server+"name="+app_user+"&advertiser_id="+advertiser_id+"&ad_id="+ad_id+"&cpa_bid="+cpa_bid+"&budget="+budget+"&stat_cost="+stat_cost+"&show_cnt="+show_cnt+"&ctr="+ctr+"&cpm_platform="+cpm_platform+"&click_cnt="+click_cnt+"&pay_order_count="+pay_order_count+"&pay_order_amount="+pay_order_amount+"&dy_follow="+dy_follow+"&convert_cnt="+convert_cnt+"&convert_cost="+convert_cost+"&convert_rate="+convert_rate+"&shipin_lable="+yn_video_material+"&kongben_lable="+kongben_lable
response = requests.get(get_url,timeout=200)
get_info_get=response.text
# print(get_info_get)
if "OK" in get_info_get:
print("...")
else:
print("-_-!!!")
else:
# #获取放量单条计划的预算
my_budget=get_budget(access_token,ad_id,advertiser_id)
budget=str(my_budget)
cpa_bid="9999.99"
#是直推还是视频
yn_video_material=get_yn_video_material(access_token,ad_id,advertiser_id)
# shipin_lable=yn_video_material
kongben_lable="n"
get_url=get_weburl_1+insert_ad_id_tb_server+"name="+app_user+"&advertiser_id="+advertiser_id+"&ad_id="+ad_id+"&cpa_bid="+cpa_bid+"&budget="+budget+"&stat_cost="+stat_cost+"&show_cnt="+show_cnt+"&ctr="+ctr+"&cpm_platform="+cpm_platform+"&click_cnt="+click_cnt+"&pay_order_count="+pay_order_count+"&pay_order_amount="+pay_order_amount+"&dy_follow="+dy_follow+"&convert_cnt="+convert_cnt+"&convert_cost="+convert_cost+"&convert_rate="+convert_rate+"&shipin_lable="+yn_video_material+"&kongben_lable="+kongben_lable
response = requests.get(get_url,timeout=200)
get_info_get=response.text
# print(get_info_get)
if "OK" in get_info_get:
print("...")
else:
print("-_-!!!")
else:
print("-_-???")
except:
print("= =b")
finally:
m=m+1
else:
print("没有list")
第五步 服务器端的代码编写,主要涉及到php和mysql的,再次就不做过多的讨论,因为我也是简单部署能满足自己的使用需求,大家可以自行查询资料进行部署。
如果小伙伴没有相应的服务器可以联系我,软件程序可以免费使用,分摊下个人私人服务器的费用即可。计划数据查询网站链接参考如下:
http://www.qcapi.top/demo.php
点击搜索可以查询近200条数据,将要查询的计划ID复制查询可查看该计划近200条数据。
在完成了计划数据的获取,储存到服务器数据库后,就可以智能调控计划的逻辑了。就是网页显示每条计划实时的建议。因此第四章是重点。