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

Twitter Ads API获取广告系列总花费及GUI显示ID技术求助

解决Twitter Ads API拉取广告系列花费及匹配GUI显示ID的问题

刚接触Twitter Ads API就遇到这俩问题确实头疼,我帮你拆解一下解决方案,顺便修正你的代码:

核心问题分析

你的代码里有两个关键问题:

  1. entity_ids参数格式不对,需要是逗号分隔的字符串,而不是你用map生成的迭代器
  2. 你没区分开API返回的广告系列编码ID和GUI里显示的legacy_id,这俩是不同字段

分步解决你的需求

1. 获取每个广告系列的花费

首先要确保请求参数正确,尤其是entity_ids的格式,同时要明确拉取spend这个具体指标(属于BILLING metric group)。另外建议用官方SDK提供的枚举值,避免字符串拼写错误。

2. 匹配GUI显示的正规广告系列ID

Twitter Ads API里,GUI中显示的数字ID对应的是广告系列对象的legacy_id字段,而id字段是API内部用的编码格式(比如8cdfn)。所以我们需要先获取所有广告系列的id和legacy_id映射关系,再和统计数据关联。


修改后的完整代码

from twitter_ads.client import Client
from twitter_ads.cursor import Cursor
from twitter_ads.http import Request
from twitter_ads.error import Error
from twitter_ads.campaign import Campaign
from twitter_ads.enum import METRIC_GROUP
from twitter_ads.enum import GRANULARITY

# 初始化客户端和账户
client = Client(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
account = client.accounts(ACCOUNT_ID)

# 第一步:获取所有广告系列,同时保存API编码ID和GUI显示的legacy_id
campaign_map = {}
for campaign in Cursor(Campaign, account):
    # 建立映射:API编码ID -> (GUI显示ID, 广告系列名称)
    campaign_map[campaign.id] = {
        'legacy_id': campaign.legacy_id,
        'name': campaign.name
    }

# 准备请求参数
resource = '/2/stats/accounts/{account_id}/'.format(account_id=account.id)
params = {
    'entity': 'CAMPAIGN',
    # 把API编码ID转成逗号分隔的字符串
    'entity_ids': ','.join(campaign_map.keys()),
    'start_time': '2017-12-10T00:00:00Z',  # 建议加上时区,避免歧义
    'end_time': '2017-12-16T23:59:59Z',
    'granularity': GRANULARITY.TOTAL.value,  # 使用枚举值的value属性
    'metric_groups': METRIC_GROUP.BILLING.value,
    'placement': 'PUBLISHER_NETWORK'
}

# 执行请求并处理响应
try:
    response = Request(client, 'get', resource, params=params).perform()
    stats_data = response.body['data']
    
    # 关联统计数据和GUI显示的ID
    result = []
    for stat in stats_data:
        campaign_info = campaign_map.get(stat['entity_id'])
        if campaign_info:
            result.append({
                'gui_campaign_id': campaign_info['legacy_id'],
                'campaign_name': campaign_info['name'],
                'total_spend': stat['metrics']['spend']['amount'],
                'currency': stat['metrics']['spend']['currency']
            })
    
    # 打印最终结果
    for item in result:
        print(f"广告系列ID(GUI): {item['gui_campaign_id']}")
        print(f"广告系列名称: {item['campaign_name']}")
        print(f"总花费: {item['total_spend']} {item['currency']}\n")
        
except Error as e:
    print(f"请求错误详情: {e.details}")
    raise

关键改动说明

  • 用Cursor(Campaign, account)遍历所有广告系列,获取legacy_id字段(就是你在GUI里看到的数字ID)
  • 将entity_ids转换为逗号分隔的字符串,符合API参数要求
  • 给时间参数加上时区后缀Z,避免时间范围解析错误
  • 把统计数据和广告系列的GUI ID、名称关联起来,输出更直观的结果
  • 使用官方枚举类的value属性,减少手动拼写错误的概率

内容的提问来源于stack exchange,提问作者Hussein Negm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:41:36