You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Facebook API获取广告及创意图片遇阻:无法获取广告创意

解决Facebook API拉取广告创意失败的问题

嘿,我看你已经能通过Facebook Ads API拿到广告的基础洞察数据了,但卡在获取广告创意(尤其是图片)这一步对吧?我来帮你捋捋常见的问题和解决办法!

1. 核心问题:广告创意需要单独指定字段

你当前的fields列表里只包含了广告的基础绩效数据,Facebook的广告创意(包括图片)并不在默认的insights接口返回里,得额外指定相关字段才行。而且要注意:直接在insights请求里加creative字段,返回的只是创意的ID,你还得用这个ID去单独请求创意的详情内容。

2. 分步实现的代码示例

第一步:获取广告数据并带上创意ID

先修改你的字段列表,把creative加进去,这样拿到的每条广告数据里都会包含对应的创意ID:

from facebookads.adobjects.adaccount import AdAccount
from facebookads.adobjects.adcreative import AdCreative

FacebookAdsApi.init(access_token=access_token) 

# 新增creative字段到字段列表
fields = [
    'ad_id', 'ad_name', 'impressions', 'clicks', 'spend', 
    'campaign_name', 'reach', 'relevance_score', 'creative'
] 

params = {
    'time_range': {'since': date,'until': date},
    'filtering': [],
    'level': 'ad',
    'breakdowns': [],
} 

# 拉取带创意ID的广告洞察数据
ad_insights = AdAccount(ad_account_id).get_insights(
    fields=fields,
    params=params,
)

第二步:通过创意ID提取图片链接

遍历拿到的广告数据,用AdCreative对象去请求创意的详情,然后根据创意的类型提取图片URL(不同类型的创意,图片字段位置不一样):

for ad in ad_insights:
    # 从广告数据里取出创意ID
    creative_id = ad['creative']['id']
    
    # 请求创意的详情,指定需要的字段
    creative = AdCreative(creative_id).get(fields=[
        'object_story_spec', 'image_url', 'images'
    ])
    
    # 分情况提取图片链接,避免报错
    # 情况1:直接返回单图链接
    if 'image_url' in creative:
        print(f"广告{ad['ad_id']}的图片:{creative['image_url']}")
    # 情况2:创意基于页面帖子,图片在object_story_spec里
    elif 'object_story_spec' in creative and 'link_data' in creative['object_story_spec']:
        link_data = creative['object_story_spec']['link_data']
        if 'image_url' in link_data:
            print(f"广告{ad['ad_id']}的图片:{link_data['image_url']}")
    # 情况3:多图创意,图片在images字段里
    elif 'images' in creative:
        for img_info in creative['images'].values():
            print(f"广告{ad['ad_id']}的图片:{img_info['url']}")

3. 常见失败原因排查

  • 权限不够:确保你的access_token有ads_read权限,并且目标广告账户已经授权给你的应用。可以用Facebook Graph API Explorer测试下能不能单独请求AdCreative的字段,验证权限是否正常。
  • 创意类型不匹配:有些广告是视频、轮播或者纯文本创意,本身没有图片字段,所以要加判断避免KeyError
  • API版本问题:不同版本的Facebook API字段可能有变动,建议使用较新的稳定版本(比如v18.0),避免因版本兼容问题导致字段无法获取。

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

火山引擎 最新活动