FacebookRequestError在尝试使用Python/Django通过Facebook营销API检索活动洞察数据时出错
我正在尝试使用Python Business SDK通过Facebook的营销API获取活动见解,但我收到了一个FacebookRequestError:FacebookRequestError在尝试使用Python/Django通过Facebook营销API检索活动洞察数据时出错,python,django,facebook-marketing-api,facebook-python-business-sdk,Python,Django,Facebook Marketing Api,Facebook Python Business Sdk,我正在尝试使用Python Business SDK通过Facebook的营销API获取活动见解,但我收到了一个FacebookRequestError: Message: Call was not successful Method: GET Path: https://graph.facebook.com/v3.1/2603111949730990/insights Params: {} Status: 400 Response: {
Message: Call was not successful
Method: GET
Path: https://graph.facebook.com/v3.1/2603111949730990/insights
Params: {}
Status: 400
Response:
{
"error": {
"message": "Error accessing adreport job.",
"type": "OAuthException",
"code": 2601,
"error_subcode": 1815107,
"is_transient": true,
"error_user_title": "Loading Async Ads Report Failed",
"error_user_msg": "Sorry, the report cannot be loaded successfully. Please check if your job status is completed instead of failed or running before fetching the data.",
"fbtrace_id": "BQJsdi3g5tX"
}
}
我已经尝试修改wait_for_async_job()函数的代码,方法是检查作业状态是否为“job Completed”,作业完成百分比是否小于100,但问题仍然存在
def wait_for_async_job(async_job):
async_job.remote_read()
while async_job[AdReportRun.Field.async_status] != 'Job Completed' and async_job[AdReportRun.Field.async_percent_completion] < 100:
time.sleep(1)
async_job.remote_read()
def wait_for_async_作业(async_作业):
异步\u作业。远程\u读取()
而异步_作业[AdReportRun.Field.async_status]!='“作业已完成”和异步\u作业[AdReportRun.Field.async\u完成百分比]<100:
时间。睡眠(1)
异步\u作业。远程\u读取()
任何帮助都将不胜感激。提前谢谢你 我们已经解决了这个问题,问题是wait\u for\u async\u作业中的while条件。应该有“OR”操作符而不是“and”,这样只要至少有一个条件为真,循环就会迭代。这样,我们检查异步_状态是否应为“作业已完成”,完成百分比是否应为100。我把答案留在这里,以防有人觉得有用
def wait_for_async_job(async_job):
async_job.remote_read()
while async_job[AdReportRun.Field.async_status] != 'Job Completed' or async_job[AdReportRun.Field.async_percent_completion] < 100:
time.sleep(1)
async_job.remote_read()
def wait_for_async_作业(async_作业):
异步\u作业。远程\u读取()
而异步_作业[AdReportRun.Field.async_status]!='“作业已完成”或异步\u作业[地址运行.Field.async\u完成百分比]<100:
时间。睡眠(1)
异步\u作业。远程\u读取()
我们已经解决了这个问题,问题在于wait\u for\u async\u作业中的while条件。应该有“OR”操作符而不是“and”,这样只要至少有一个条件为真,循环就会迭代。这样,我们检查异步_状态是否应为“作业已完成”,完成百分比是否应为100。我把答案留在这里,以防有人觉得有用
def wait_for_async_job(async_job):
async_job.remote_read()
while async_job[AdReportRun.Field.async_status] != 'Job Completed' or async_job[AdReportRun.Field.async_percent_completion] < 100:
time.sleep(1)
async_job.remote_read()
def wait_for_async_作业(async_作业):
异步\u作业。远程\u读取()
而异步_作业[AdReportRun.Field.async_status]!='“作业已完成”或异步\u作业[地址运行.Field.async\u完成百分比]<100:
时间。睡眠(1)
异步\u作业。远程\u读取()
我的猜测是删除函数中的第一行。并删除对作业完成百分比的检查。另外,将远程_读数从循环中取出。这就是导致错误的原因。仅在作业完成后运行它。因此,while循环外的下一行应该是远程读取。这只是我自己的猜测。@Bobort谢谢你的建议,但不幸的是它没有起作用。当我从循环中取出远程_读数时,进程被卡在一个无限循环中。在调试器中,我看到async_作业[AdReportRun.Field.async_percent_completion]在每次迭代中都是0。同时,我在Graph Explorer中检查了作业ID,异步作业的状态为Finished,百分比为100。所以async_job.remote_read()必须更新百分比,当我取出它时,会有一个无限循环。我明白了。我对这个产品不太熟悉。这里有一些文档可以帮助您。您不需要检查状态,但要检查百分比。我的猜测是删除函数中的第一行。并删除对作业完成百分比的检查。另外,将远程_读数从循环中取出。这就是导致错误的原因。仅在作业完成后运行它。因此,while循环外的下一行应该是远程读取。这只是我自己的猜测。@Bobort谢谢你的建议,但不幸的是它没有起作用。当我从循环中取出远程_读数时,进程被卡在一个无限循环中。在调试器中,我看到async_作业[AdReportRun.Field.async_percent_completion]在每次迭代中都是0。同时,我在Graph Explorer中检查了作业ID,异步作业的状态为Finished,百分比为100。所以async_job.remote_read()必须更新百分比,当我取出它时,会有一个无限循环。我明白了。我对这个产品不太熟悉。这里有一些文档可以帮助您。您不需要检查状态,但要检查百分比。我很高兴你解决了这个问题,但我仍然认为你不需要检查“工作完成”,因为你已经检查了百分比。通过将和
更改为或
,您的答案表明。嘿,感谢您的检查:)在我们的日志中,有些情况下作业完成百分比为100,但状态为“作业正在运行”,并且出现了中断。在检查了两者之后,AdReportRuns现在似乎工作正常。我想这是有道理的。它可能是100%,只是完成了一些小事情。呃,我决不会制作一个API,其中100%不意味着作业已完成……似乎remote\u read()
正遭到弃用。将async\u job.remote\u read()
替换为async\u job.api\u get()
也可以。此方法不包括作业失败的情况。在这种情况下,循环将不确定地运行我很高兴你解决了它,但我仍然认为你不需要检查“作业完成”,因为你已经检查了百分比。通过将和
更改为或
,您的答案表明。嘿,感谢您的检查:)在我们的日志中,有些情况下作业完成百分比为100,但状态为“作业正在运行”,并且出现了中断。在检查了两者之后,AdReportRuns现在似乎工作正常。我想这是有道理的。它可能是100%,只是完成了一些小事情。呃,我决不会制作一个API,其中100%不意味着作业已完成……似乎remote\u read()
正遭到弃用。将async\u job.remote\u read()
替换为async\u job.api\u get()
也可以。此方法不包括作业失败的情况。在这种情况下,循环将不受限制地运行