qq_36115281 2023-09-22 14:59 采纳率: 0%
浏览 7
已结题

Facebook 获取广告

目前通过调用face book的 /act_{ad_account_id}/ads接口获取到广告账号下面的广告,返回的广告数量有几千条但是大部分是没有用的。
用这几千条广告都去调用一次广告详情接口的话又会出现访问次数过多的限制所以想在获取广告ID时就过滤掉数据。想知道怎么过滤出存在点击次数的广告。
代码调用的接口:https://graph.facebook.com/v17.0/act_%7Bad_account_id%7D/ads?fields=id,name,status,creative{image_url},adset{end_time,updated_time},updated_time,effective_status&filtering=[{%27field%27:%27adset.updated_time%27,%27operator%27:%27GREATER_THAN%27,%27value%27:%272023-09-21%27}]&level=campaign&access_token=
目前只通过updatetime过滤了一次数据。想知道有没有更好的办法

  • 写回答

10条回答 默认 最新

  • 专家-赤兔[在线] 2023-09-22 15:16
    关注
    获得0.75元问题酬金

    引用 皆我百晓生 小程序回应内容作答:
    根据你提供的信息,目前你已经通过 "updatetime" 进行了一次数据过滤,但是想知道是否有更好的方法来过滤具有点击次数的广告。

    对于这个问题,你可以尝试以下方法来过滤具有点击次数的广告:

    1. 使用 Facebook Ads Insights API:通过调用 Facebook Ads Insights API,你可以获取到广告的更详细的指标数据,包括点击次数。你可以调用 /act_{ad_account_id}/insights 接口,并在返回的数据中查找点击次数指标(例如,clicks)。根据点击次数的值,来确定广告是否有点击次数,从而进行过滤。

    2. 设置其他过滤条件:除了 "updatetime" 外,你可以根据其他指标或过滤条件进行进一步的过滤,以筛选出具有点击次数的广告。例如,你可以考虑添加过滤条件来筛选出有点击行为的广告,如 impressions > 0clicks > 0

    3. 筛选有效广告状态:根据你的需求,你可以通过设置 effective_status 的过滤条件来只获取处于有效状态的广告。有效状态包括广告投放中的状态,如 "ACTIVE"、"RUNNING" 等,这些广告可能更有可能有点击次数。

    通过使用以上方法之一或组合,你可以更有效地过滤出具有点击次数的广告。请根据实际需求选择适合的方法来处理数据。

    评论
  • Leodong. 2023-09-22 16:19
    关注
    获得0.60元问题酬金

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    根据您的描述,您想要过滤出存在点击次数的广告,以减少调用广告详情接口的次数。除了使用更新时间(updated_time)进行过滤之外,您还可以使用Facebook广告的统计数据来判断是否存在点击次数。以下是一个可能的解决方案:

    1. 在获取广告列表时,通过添加insights字段来获取广告的统计数据,包括点击次数。
    2. 对于每个广告,检查其统计数据中的点击次数。如果点击次数大于零,则表示该广告存在点击次数。
    3. 只保留存在点击次数的广告,过滤掉没有点击的广告。

    下面是修改后的代码示例:

    const axios = require('axios');
    
    async function getAds(adAccountId, accessToken) {
      const apiUrl = `https://graph.facebook.com/v17.0/act_${adAccountId}/ads`;
      const fields = 'id,name,status,creative{image_url},adset{end_time,updated_time},updated_time,effective_status';
      const filtering = `[{'field':'adset.updated_time','operator':'GREATER_THAN','value':'2023-09-21'}]`;
      const level = 'campaign';
    
      try {
        const response = await axios.get(apiUrl, {
          params: {
            fields,
            filtering,
            level,
            access_token: accessToken
          }
        });
    
        const ads = response.data.data;
        const filteredAds = [];
    
        for (const ad of ads) {
          const insightsUrl = `https://graph.facebook.com/v17.0/${ad.id}/insights`;
          const insightsResponse = await axios.get(insightsUrl, {
            params: {
              fields: 'clicks',
              access_token: accessToken
            }
          });
    
          const insights = insightsResponse.data.data;
          if (insights.length > 0 && insights[0].clicks > 0) {
            filteredAds.push(ad);
          }
        }
    
        return filteredAds;
      } catch (error) {
        console.error('Error retrieving ads:', error);
        return [];
      }
    }
    
    // 示例用法
    const adAccountId = '{ad_account_id}';
    const accessToken = 'YOUR_ACCESS_TOKEN';
    
    getAds(adAccountId, accessToken)
      .then(filteredAds => {
        console.log('Filtered Ads:', filteredAds);
      })
      .catch(error => {
        console.error('Error:', error);
      });
    

    请替换{ad_account_id}为您的广告账号ID,并将YOUR_ACCESS_TOKEN替换为您的访问令牌。这段代码会获取广告列表,并对每个广告调用广告统计数据接口以获取点击次数。只有点击次数大于零的广告才会被保留下来并存储在filteredAds数组中。

    请注意,由于Facebook的API和限制可能会有变化,上述代码仅供参考,并可能需要根据实际情况进行调整。您可能需要查阅Facebook的开发文档以获取最新的API信息和限制。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论
  • 小明说Java 2023-09-22 16:30
    关注
    获得0.45元问题酬金

    建议去官网看看,有技术文档的

    评论
  • 数据大魔王 2023-09-22 18:48
    关注
    获得0.90元问题酬金

    使用 /act_{ad_account_id}/insights 接口:使用此接口可以检索广告的性能数据,包括点击次数。您可以指定查询的时间范围和所需的性能指标。

    设置查询条件:在查询时,设置筛选条件,以仅检索具有点击次数的广告。例如,您可以使用 action_type 字段来筛选出点击次数大于零的广告。

    以下是一个示例查询:

    https://graph.facebook.com/v17.0/act_{ad_account_id}/insights
    ?fields=ad_id,ad_name,clicks
    &time_range={"since":"2023-09-01","until":"2023-09-21"}
    &filtering=[{"field":"action_type","operator":"IN","value":["link_click"]}]
    &access_token=your_access_token
    
    
    
    评论
  • 呈两面包夹芝士 2023-09-22 20:04
    关注
    获得0.45元问题酬金

    引自GPT
    你可以在获取到广告ID后,通过调用广告详情接口来获取广告的详细信息,然后根据返回的数据中点击次数(如果存在的话)来判断是否需要过滤掉这个广告ID。

    具体步骤如下:

    1. 首先,你需要修改你的请求URL,将fields参数改为id,name,status,creative{image_url},adset{end_time,updated_time},updated_time,effective_status,clicks,这样你就可以获取到广告的点击次数。

    2. 然后,你可以发送一个GET请求到https://graph.facebook.com/v17.0/act_%7Bad_account_id%7D/ads/{ad_id},其中{ad_id}是你从上一步获取到的广告ID。

    3. 如果返回的数据中包含clicks字段,并且其值大于0,那么你就保留这个广告ID,否则就过滤掉它。

    以下是修改后的代码:

    import requests
    
    # 获取广告ID
    response = requests.get(f"https://graph.facebook.com/v17.0/act_{ad_account_id}/ads?fields=id,name,status,creative{image_url},adset{end_time,updated_time},updated_time,effective_status,clicks&filtering=[{%27field%27:%27adset.updated_time%27,%27operator%27:%27GREATER_THAN%27,%27value%27:%272023-09-21%27}]&level=campaign&access_token={access_token}")
    ads = response.json()
    
    # 过滤广告ID
    valid_ads = []
    for ad in ads['data']:
        ad_id = ad['id']
        response = requests.get(f"https://graph.facebook.com/v17.0/act_{ad_account_id}/ads/{ad_id}")
        data = response.json()
        if 'clicks' in data and data['clicks'] > 0:
            valid_ads.append(ad_id)
    
    print(valid_ads)
    

    注意:这种方法可能会导致你的API调用次数过多,因此你可能需要考虑使用分页或者其他方法来减少API调用次数。

    评论
  • 心梓知识 2023-09-23 02:40
    关注
    获得0.60元问题酬金

    结合GPT给出回答如下请题主参考
    首先,需要获取访问令牌,并获取广告账户的 ID。

    import requests
    import json
    
    ACCESS_TOKEN = 'your_access_token'
    AD_ACCOUNT_ID = 'your_ad_account_id'
    
    # 获取广告账户下的所有广告
    url = 'https://graph.facebook.com/v11.0/act_{}/ads'.format(AD_ACCOUNT_ID)
    params = {'access_token': ACCESS_TOKEN}
    response = requests.get(url, params=params)
    ads = json.loads(response.content)['data']
    
    # 用于存储有用的广告
    useful_ads = []
    

    接下来,循环遍历所有的广告,调用广告详情接口,并提取需要的信息。

    for ad in ads:
        ad_id = ad['id']
        # 调用广告详情接口
        ad_url = 'https://graph.facebook.com/v11.0/{}/'.format(ad_id)
        ad_params = {'access_token': ACCESS_TOKEN, 'fields': 'id,name,adset_id,creative'}
        ad_response = requests.get(ad_url, params=ad_params)
        ad_data = json.loads(ad_response.content)
        # 判断是否有用的广告
        if 'creative' in ad_data:
            useful_ads.append(ad_data)
    
    # 打印有用的广告
    print(useful_ads)
    

    在上述代码中,我们通过循环遍历所有广告,并调用广告详情接口获取广告的详细信息。在获取的广告信息中,判断是否有创意信息(creative),如果有,则将该广告存储到 useful_ads 列表中。最后,打印出 useful_ads 列表中的广告信息。

    需要注意的是,Facebook 广告 API 变化较快,以上代码仅供参考。可能需要根据实际情况进行调整。

    评论
  • yy64ll826 2023-09-26 15:24
    关注
    获得0.45元问题酬金
    评论
  • bug菌¹ Java领域优质创作者 2023-09-28 00:34
    关注
    获得1.20元问题酬金

    该回答引用ChatGPT,希望对题主有所帮助,如有帮助,还望采纳。


    想要过滤出存在点击次数的广告,可以在请求接口时通过添加一个过滤条件来实现。

    可以使用字段"insights"来获取广告的统计数据,而点击次数对应的是"clicks"字段。因此,可以添加一个过滤条件,只保留点击次数大于0的广告。具体的过滤条件可以通过在请求接口时添加一个过滤参数完成,如下所示:

    &filtering=[{'field':'insights.clicks','operator':'GREATER_THAN','value':'0'}]

    该过滤条件将只保留具有点击次数的广告。

    完整请求代码如下:

    https://graph.facebook.com/v17.0/act_%7Bad_account_id%7D/ads?fields=id,name,status,creative{image_url},adset{end_time,updated_time},updated_time,effective_status,insights{clicks}&filtering=[{%27field%27:%27insights.clicks%27,%27operator%27:%27GREATER_THAN%27,%27value%27:%270%27}]&level=campaign&access_token={access_token}

    使用上述请求代码,将只返回具有点击次数的广告。

    评论
  • GIS工具开发 2023-09-29 01:06
    关注
    获得0.60元问题酬金

    通过返回结果里面的点击次数字段来判断过滤

    评论
  • 会跑的小鹿 2023-09-29 01:47
    关注
    获得0.30元问题酬金

    用多个账号轮回使用撒

    评论

报告相同问题?

问题事件

  • 系统已结题 9月30日
  • 创建了问题 9月22日

悬赏问题

  • ¥15 shopify网站提速
  • ¥15 深海控制器DSE7320MKII和博世ECU间can通讯知识
  • ¥15 Ru的复折射率用于FDTD 200nm到1200nm
  • ¥15 使用Fiddler抓包,textview的乱码如何解决
  • ¥50 trio连接驱动器报错
  • ¥15 有谁懂nhanes的权重计算啊
  • ¥15 欧姆龙PLC 电机控制 限位
  • ¥30 如何处理shell命令接收到的视频流并实时播放出来
  • ¥15 虚心请教C#的代码优化问题
  • ¥15 有偿求做台风过境全过程模拟仿真