FacebookRequestError при попытке извлечь данные Campaign Insight через API маркетинга Facebook с помощью Python/Django
Я пытаюсь получить 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 ответ
Решение
Мы уже решили это, проблема была с условием 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()