通过分页功能从 FB 广告 API 检索异步广告洞察结果

问题描述 投票:0回答:4

我正在使用 facebook-python-ads-sdk 对 FB Insights API 进行异步调用,如所述

params = {
    "time_increment": 1,
    "level": "ad",
    "date_preset": "last_28d",
    "breakdowns": "hourly_stats_aggregated_by_advertiser_time_zone",
    "limit": 1000
}

job = AdAccount("id").get_insights_async(params=params)
result_cursor = wait_for_async_job(job)
results = [item for item in result_cursor]

def wait_for_async_job(job):
    for _ in range(TIMEOUT):
        time.sleep(1)
        job = job.remote_read()
        status = job[AdReportRun.Field.async_status]
        if status == "Job Completed":
            return job.get_result()

因此,检索 last_28d 的见解的工作会在几分钟内完成,但是,对结果进行分页可能需要长达一个小时!

这是对异步作业进行分页的正确方法吗?

python facebook facebook-ads-api
4个回答
10
投票

我发布答案,以便它可以帮助其他遇到相同问题的开发人员。

修改:

return job.get_result()

至:

return job.get_result(params={"limit": 1000})

这将以 1000 次跳转对结果进行分页,而不是默认的 25 次。

上述更改为我们节省了 30 分钟的跑步时间。


0
投票

今天我遇到了同样的问题,这段代码对我有用

from facebook_business.adobjects.campaign import Campaign
from facebook_business.adobjects.adreportrun import AdReportRun
from facebook_business.adobjects.adsinsights import AdsInsights
import time

campaign = Campaign(<CAMPAIGN_ID>)

params = {
    'level': AdsInsights.Level.campaign,
}
async_job = campaign.get_insights(params=params, is_async=True)
async_job.api_get()
while while async_job[AdReportRun.Field.async_status]!= 'Job Completed':
     time.sleep(1)
     async_job.api_get()
time.sleep(1)
print(async_job.get_result())

0
投票

更换

return job.get_result(params={"limit": 1000})

list(async_job.get_result())

始终获得所有回复。

get_result()
是一个迭代器。


0
投票

嘿,当我使用上面的代码时,它有时无法获取诸如action_values之类的见解,某些帐户的视频相关见解。在 20 个对 Dashboard ui 有这些见解的帐户中,只有 5 个帐户获取 api。还有其他人面临这个问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.