使用Python通过Facebook广告API批量创建活动?

2024-06-16 12:27:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图构建一个API工具,一次创建100多个活动,但到目前为止,我一直遇到超时错误。我有一种感觉,这是因为我并不是作为批处理/异步请求来执行的,但是我似乎找不到专门用于在Python中创建活动的直接指令。任何帮助将不胜感激!在

我已经准备好了所有的活动细节并准备好放在Google表单中,然后我的脚本读取(使用pygsheets)并尝试创建活动。以下是目前为止的情况:

from facebookads.adobjects.campaign import Campaign
from facebookads.adobjects.adaccount import AdAccount
from facebookads.api import FacebookAdsApi
from facebookads.exceptions import FacebookRequestError
import time
import pygsheets

FacebookAdsApi.init(access_token=xxx)
gc = pygsheets.authorize(service_file='xxx/client_secret.json')

sheet = gc.open('Campaign Prep')
tab1 = sheet.worksheet_by_title('Input')
tab2 = sheet.worksheet_by_title('Output')
# gets range size, offsetting it by 1 to account for the range starting on row 2
row_range = len(tab1.get_values('A1', 'A', returnas='matrix', majdim='ROWS', include_empty=False))+1
# finds first empty row in the output sheet
start_row = len(tab2.get_values('A1', 'A', returnas='matrix', majdim='ROWS', include_empty=False))

def create_campaigns(row):
    campaign = Campaign(parent_id=row[6])
    campaign.update({
        Campaign.Field.name: row[7],
        Campaign.Field.objective: row[9],
        Campaign.Field.buying_type: row[10],
        })
    c = campaign.remote_create(params={'status': Campaign.Status.active})
    camp_name = c['name']
    camp_id = 'cg:'+c['id']
    return camp_name, camp_id

r = start_row
# there's a header so I have the range starting at 2
for x in range(2, int(row_range)):
        r += 1
        row = tab1.get_row(x)
        camp_name, camp_id = create_campaigns(row)
        # pastes the generated campaign ID, campaign name and account id back into the sheet
        tab2.update_cells('A'+str(r)+':C'+str(r).format(r),[[camp_id, camp_name, row[6].rsplit('_',1)[1]]])

我试着把它放在一个try循环中,如果它遇到FacebookRequestError,就这样做时间。睡觉(5) 然后继续尝试,但我仍然会遇到超时错误,每循环5-10行。当它不超时时,它确实起作用了,我想我只需要想办法让它更有效地处理大批量的活动。在

有什么想法吗?我是Facebook API的新手,在Python上我还是个新手,但我觉得这些东西太有趣了!如果有人对如何更好地使用这个脚本有任何建议(以及一般的Python建议),我很乐意听到!:)


Tags: thenamefromimportidbyrangetab1
1条回答
网友
1楼 · 发布于 2024-06-16 12:27:40

你能发布实际的错误信息吗?在

听起来你所描述的是在打了一定数量的电话后,你达到了速率限制。如果是这样的话,时间。睡觉(5) 还不够。速率分数随时间衰减,5分钟后将重置https://developers.facebook.com/docs/marketing-api/api-rate-limiting。如果那样的话,我建议你在每次打电话的时候睡一觉。不过,更好的选择是升级API状态。如果你这么快就达到了速率限制,我想你是开发人员级别。尝试先升级到基本版,然后再升级到标准版,这样就不会有这些问题了。https://developers.facebook.com/docs/marketing-api/access

另外,正如您所提到的,利用Facebook的批处理请求API可能是个好主意。https://developers.facebook.com/docs/marketing-api/asyncrequests/v2.11

下面是一个线程,其中包含使用pythonsdk的批处理API的示例:https://github.com/facebook/facebook-python-ads-sdk/issues/116

相关问题 更多 >