Интеграция соответствия рабочего места Facebook - код ошибки 960
Я пишу Compliance Integration с использованием Python и API Graph Facebook для поиска по всему пользовательскому контенту в нашем сообществе Workplace по заданным ключевым словам. У меня есть кое-что, что раньше работало каждый раз, однако недавно (за последние пару дней) один из запросов, отправленных на Facebook, вернет исключение FacebookApiException с кодом ошибки 960 с сообщением "Запрос отменен. Это может произойти, если зависимый запрос не выполнен или весь запрос истек." после того, как уже успешно получил тысячи успешных запросов. Это не происходит все время, но чаще всего это терпит неудачу.
{
"error": {
"message": "Request aborted. This could happen if a dependent request failed or the entire request timed out.",
"code": 960,
"type": "FacebookApiException",
"fbtrace_id": "B72L8jiCFZy"
}
}
Для простоты я не использовал зависимости в своих запросах, поэтому я могу только думать, что время истекло. Мой вопрос - какой период ожидания для API Графика Facebook? Время истекло, потому что я слишком долго отправляю запрос, или время истекло, потому что сервер Facebook слишком долго отвечает на мой запрос? Можно ли как-то увеличить время ожидания, чтобы остановить появление сообщения об ошибке?
ТИА
0 ответов
Этот вопрос более старый, но на тот случай, если кто-то еще ищет ответ.
Я не могу ответить, каков период тайм-аута для Facebook Graph Api, но могу указать обходной путь для тех, кто сталкивается с ошибками тайм-аута.
У Facebook есть документация о том, как бороться с таймаутами:https://developers.facebook.com/docs/graph-api/making-multiple-requests/
Большие или сложные пакеты могут истечь по таймауту, если выполнение всех запросов в пакете занимает слишком много времени. В таких обстоятельствах результатом является частично укомплектованная партия. В частично завершенных пакетах ответы от успешно завершенных операций будут выглядеть нормально (см. Предыдущие примеры), тогда как ответы на незавершенные операции будут нулевыми.
Порядок ответов соответствует порядку операций в запросе, поэтому разработчики должны обрабатывать ответы соответствующим образом, чтобы определить, какие операции были успешными, а какие следует повторить в последующей операции.
Итак, согласно их документации, ответ на пакетный запрос, срок действия которого истек, должен выглядеть примерно так:
[
{ "code": 200,
"headers": [
{ "name":"Content-Type",
"value":"text/javascript; charset=UTF-8"}
],
"body":"{\"id\":\"…\"}"
},
null,null,null
]
Используя их пример, вам просто нужно повторно поставить в очередь элементы в массиве пакетных запросов, которые соответствуют пустым ответам.