【发布时间】:2021-08-17 15:27:16
【问题描述】:
我正在尝试构建一个 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 让它执行 time.sleep(5) 然后继续尝试,但我仍然每隔 5 到 10 行就会遇到超时错误,它循环通过.当它不超时时它确实有效,我想我只需要找出一种方法来让它更有效地处理大批量的广告系列。
有什么想法吗?我是 Facebook API 的新手,我仍然是 Python 的新手,但我发现这些东西非常有趣!如果有人对这个脚本如何变得更好有任何建议(以及一般的 Python 建议),我很想听听! :)
【问题讨论】:
-
旁注:如果你分解出你的工作函数,你可以将它包装到
backoff(寻找这个包)装饰器中,它会重试每个步骤几次(在尝试之间休眠)。跨度> -
感谢太空潜水员!我肯定会考虑退避。你有理由重试吗?当我用谷歌搜索退避时,我最终在重试时发现了很多东西,所以我只是好奇这两者之间有什么区别。
标签: python python-3.x facebook-ads-api facebook-marketing-api