我正在开发一个项目,需要从 Facebook Insights API 获取“scheduled_total”指标以用于统计目的。但是,我注意到通过 API 获得的结果与 Facebook Business 界面中显示的结果不匹配。我目前正在使用 Python 向 API 发出请求。以下是我当前使用的代码以及其他指标:
` 导入时间 从 facebook_business.api 导入 FacebookAdsApi 从 facebook_business.adobjects.adaccount 导入 AdAccount 从 facebook_business.adobjects.adreportrun 导入 AdReportRun
def get_async_insights(ad_account, fields, params):
async_job = ad_account.get_insights(fields=fields, params=params, is_async=True)
async_job.api_get()
# Wait for the async job to complete
while async_job[AdReportRun.Field.async_status] != "Job Completed":
time.sleep(1)
print("> Running extraction...")
async_job.api_get()
return async_job.get_result()
def cast_variable(variable, type):
if type == "int":
return int(variable)
elif type == "float":
return float(variable)
def get_ad_action(ad, action_name, val_type):
if "actions" in ad:
result = 0
for action in ad["actions"]:
if action["action_type"] == action_name:
result += cast_variable(action["value"], val_type)
return result
else:
return 0
if __name__ == "__main__":
# Credentials
access_token = "REDACTED"
app_id = "REDACTED"
app_secret = "REDACTED"
ad_account_id = "REDACTED"
# Perform request
date = "2024-01-01"
FacebookAdsApi.init(app_id, app_secret, access_token, api_version="v20.0")
fields = [
"date_start",
"date_stop",
"ad_id",
"ad_name",
"campaign_id",
"campaign_name",
"impressions",
"clicks",
"actions",
"action_values"
]
params = {
"level": "ad",
"time_range": {"since": date, "until": date},
"breakdowns": ["device_platform"],
"limit": 1000,
"action_attribution_windows": ['1d_click', "7d_click", "1d_view"]
}
# Data extraction
ad_account = AdAccount(ad_account_id)
data = get_async_insights(ad_account=ad_account, fields=fields, params=params)
# Process the data
# See https://developers.facebook.com/docs/marketing-api/reference/ads-insights
# Actions and Action values should be a list<AdsActionStats>:
# See https://developers.facebook.com/docs/marketing-api/reference/ads-action-stats
data_list = []
for ad in data:
row = {
"date": ad["date_start"],
"ad_id": ad["ad_id"],
"ad_name": ad["ad_name"],
"campaign_id": ad["campaign_id"],
"campaign_name": ad["campaign_name"],
"device": ad["device_platform"],
"impressions": int(ad.get("impressions", 0)),
"clicks": int(ad.get("clicks", 0)),
"scheduled_appointments": get_ad_action(ad, "schedule_total", "int")
}
data_list.append(row)
print(data_list)
`
具体来说,我得到的结果是0,这不应该是这样的。有没有人遇到过类似的问题并找到解决方案? 此外,这种差异是否是由于需要在 Facebook 应用程序设置中启用一些额外的配置造成的?
好吧,我们终于知道为什么了,那就是营业地点的问题。
如果我们查看本指南中变量“预定约会”的解释:https://www.facebook.com/business/help/512698555829471
有一个小告示,上面写着: 与消息传递功能以及自然消息传递功能相关的一些指标和广告活动将不适用于目的地或起源地为欧洲或日本的企业或广告。
让我们点击出现的有关指标的链接,该链接应将我们带到此处:https://www.facebook.com/business/help/384262082655927
我强调以下信息: 由于欧洲和日本的新隐私法规,某些消息指标可能不可用。 当然,这并没有说明全部,但我们试图提取的一个在我们的案例中受到了影响。 让我们关注该通知,以及哪些功能受到影响,其中之一是“通过 API 的消息传递功能”。这意味着即使数据出现在仪表板上,我们也无法通过 API 获取它。
如果我们转到“元广告报告和广告管理器”部分并将其展开,我们将看到受影响的变量之一是“已安排的预约”。
这就是为什么,即使它出现在要提取的指标中:https://developers.facebook.com/docs/marketing-api/reference/ads-action-stats,我们也无法获取它以任何方式变化