Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FacebookRequestError在尝试使用Python/Django通过Facebook营销API检索活动洞察数据时出错_Python_Django_Facebook Marketing Api_Facebook Python Business Sdk - Fatal编程技术网

FacebookRequestError在尝试使用Python/Django通过Facebook营销API检索活动洞察数据时出错

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: {

我正在尝试使用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:
    {
      "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()
也可以。此方法不包括作业失败的情况。在这种情况下,循环将不受限制地运行