FacebookRequestError при попытке извлечь данные Campaign Insight через API маркетинга Facebook с помощью Python / Django - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь получить Campaign Insights через API маркетинга Facebook, используя Python Business SDK, и получаю ошибку 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 (), проверивесли статус задания не «Задание завершено» и процент выполнения задания меньше 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()

Любая помощь будет принята с благодарностью.Заранее спасибо!

1 Ответ

0 голосов
/ 19 февраля 2019

Мы уже решили это, проблема была с условием while в wait_for_async_job.Должен быть оператор «ИЛИ», а не «И», чтобы цикл повторялся до тех пор, пока хотя бы одно из условий выполнено.Таким образом, мы проверяем, что оба async_status должны быть «Задание выполнено», а процент выполнения должен быть равен 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()
...