如何通过Python获取DV360(DoubleClick Bid Manager API)报告数据?已能获取元数据但失败
搞定DV360 API获取报告具体数据的问题
嘿,我看你现在的代码只能拿到报告的元数据(query ID和标题),没法获取到实际的报告内容对吧?别着急,咱们一步步来解决:
先确认报告状态再说
DV360的报告是异步生成的,不是创建完就能拿到数据的。所以第一步得先检查你的报告是不是已经生成完成了,用getquery接口就能查:
def check_query_status(query_id): response = doubleclick_bid_manager.queries().getquery(queryId=query_id).execute() # 报告状态常见的有 RUNNING(生成中)、DONE(已完成)、FAILED(失败) print(f"当前报告状态: {response['metadata']['status']}") return response['metadata']['status'] # 替换成你之前拿到的具体query ID target_query_id = "你的query_id" status = check_query_status(target_query_id)
只有当状态显示DONE的时候,咱们才能去拿完整的报告数据哦。
两种方法获取报告数据
方法一:直接拿最新的报告数据
每个query都会记录最新生成的报告ID,咱们先通过getquery拿到这个ID,再调用getreport接口获取数据:
def fetch_latest_report_data(query_id): # 先获取query的详细信息,拿到最新报告ID query_info = doubleclick_bid_manager.queries().getquery(queryId=query_id).execute() latest_report_id = query_info['latestReportRunId'] # 调用接口获取报告数据 report_result = doubleclick_bid_manager.reports().getreport(reportId=latest_report_id).execute() # 报告的实际数据存在'rows'字段里,你可以按需处理 if 'rows' in report_result: print("报告数据如下:") for row in report_result['rows']: # row是列表格式,对应你报告里的每一列 print('\t'.join(row)) else: print("这份报告里没有数据哦") # 调用函数拿数据 fetch_latest_report_data(target_query_id)
方法二:列出所有历史报告,再选对应的数据
如果需要查看历史报告,先列出该query下的所有报告运行记录,再挑已完成的来获取数据:
def list_all_reports(query_id): response = doubleclick_bid_manager.reports().listreports(queryId=query_id).execute() if 'reports' in response: print("该query下的所有报告记录:") for report in response['reports']: print(f"报告ID: {report['reportId']} | 状态: {report['status']} | 生成时间: {report['metadata']['runTime']}") return response['reports'] else: print("这个query还没有生成任何报告哦") return [] # 获取报告列表后,筛选已完成的报告 all_reports = list_all_reports(target_query_id) if all_reports: done_reports = [report for report in all_reports if report['status'] == 'DONE'] if done_reports: # 比如选第一个已完成的报告 selected_report_id = done_reports[0]['reportId'] report_data = doubleclick_bid_manager.reports().getreport(reportId=selected_report_id).execute() # 这里可以继续处理拿到的report_data
几个要注意的点
- 确保你的服务账号已经开通了DoubleClick Bid Manager API,并且有查看对应报告的权限,不然会拿不到数据哦
- 如果报告数据量特别大,记得用
pageToken分页获取,逻辑和你之前遍历query列表的方式一样 - 有些大报告会存在Google Cloud Storage里,这时候
getreport返回的googleCloudStoragePathForLatestReport就是文件路径,你需要额外处理GCS的文件下载
内容的提问来源于stack exchange,提问作者s_khan92
相关产品推荐
相关产品推荐

