You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:22:31