【问题标题】:Filtering statistics from facebook ads api using the python sdk使用 python sdk 从 facebook ads api 过滤统计信息
【发布时间】:2014-11-04 11:06:28
【问题描述】:

我正在尝试使用 Facebook 的 ads-api 在指定时间范围内获取有关广告帐户/活动/等的数据。

到目前为止,我设法使用官方 python sdk 获得了总体信息(添加在下面), 但我不知道如何插入时间过滤条件。

答案可能在“过滤结果”下,但我不明白如何将他们在那里所做的事情翻译成python...... https://developers.facebook.com/docs/reference/ads-api/adstatistics/v2.2

非常感谢您能提供的任何帮助,

谢谢!


这是来自官方python sdk项目的相关模块(我认为): https://github.com/facebook/facebook-python-ads-sdk/blob/master/facebookads/objects.py

我当前的代码是:

from facebookads.session import FacebookSession
from facebookads.api import FacebookAdsApi
from facebookads import objects
from facebookads.objects import (
AdUser,
AdCampaign,
)

my_app_id = 'APP_ID'
my_app_secret = 'AP_SECRET'
my_access_token = 'ACCESS_TOKEN'
my_session = FacebookSession(my_app_id, my_app_secret, my_access_token)
my_api = FacebookAdsApi(my_session)
FacebookAdsApi.set_default_api(my_api)

me = objects.AdUser(fbid='me')
my_accounts = list(me.get_ad_accounts())


my_account=my_accounts[1]

print(">>> Campaign Stats")
for campaign in my_account.get_ad_campaigns(fields=[AdCampaign.Field.name]):
    for stat in campaign.get_stats(fields=[
        'impressions',
        'clicks',
        'spent',
        'unique_clicks',
        'actions',
    ]):
        print(campaign[campaign.Field.name])
    for statfield in stat:
        print("\t%s:\t\t%s" % (statfield, stat[statfield]))    

我得到的输出是(所有大写字母和 xxxx 都是我的):

Campaign Stats
CAMPAIGN_NAME1
    impressions:        xxxx
    unique_clicks:      xxxx
    clicks:     xxxx
    actions:        {u'mobile_app_install': xxxx, u'app_custom_event': xxxx,   u'app_custom_event.fb_mobile_activate_app': xxx}
    spent:      xxxx
CAMPAIGN_NAME2
    impressions:        xxxx
    unique_clicks:      xxxx
    clicks:     xxxx
    actions:        {XXXX}
    spent:      xxxx

【问题讨论】:

    标签: python facebook facebook-graph-api facebook-ads-api


    【解决方案1】:

    get_stats() 方法有一个名为params 的附加参数,您可以在其中传入start_time 和/或end_time

    params_data = {
        'start_time': 1415134405,
    }
    
    stats = campaign.get_stats(
        params=params_data,
        fields=[
            'impressions',
            'clicks',
            ...
        ]
    )
    
    for stat in stats:
        ...
    

    API 接受此处记录的许多不同参数:https://developers.facebook.com/docs/reference/ads-api/adstatistics

    更多可选阅读

    params 参数和fields 参数的原因需要一些解释。如果您不感兴趣,请随意忽略这一点。 :)

    params 参数的实现基本上只是为 API 调用构造查询字符串:

    params['start_time'] = 1415134405
    

    创建:

    ?start_time=1415134405
    

    广告 API 端点通常接受 fields 参数来定义您要返回的数据:

    ?fields=impressions,clicks&start_time=1415134405
    

    你已经正确定义了,但是因为它只是查询字符串中的fields,你也可以在技术上这样做:

    params['fields'] = 'impressions,clicks'
    

    get_stats()(和其他读取方法)中的 fields 参数是定义该 fields 参数的简单方法。实现看起来像这样:

    def remote_read(self, params=[], fields=[]):
        ...
        params['fields'] = fields
        ...
    

    【讨论】:

    • 嗨~你知道start_time返回的action是什么意思吗?这是否意味着行动发生在 start_time 之后,谢谢
    【解决方案2】:

    “get_stats”方法在 API V2.4 版本中已弃用。

    应该使用“get_insights”方法。该方法的参数列在下面的页面上: https://developers.facebook.com/docs/marketing-api/insights/v2.5

    从上面的页面中,“start_time”和“end_time”的替换是“time_ranges”属性。示例:

    "time_ranges": {'since': '2015-01-01', 'until': '2015-01-31'}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多