Solicitações de insight da API de lotes do Facebook
Para um projeto eu tenho que pegar os insights de uma página durante um longo período de tempo (por exemplo, 1-2 anos) do facebook.
Eu tentei primeiro fazer um único pedido, mas descobriu-se que apenas solicitando
/PAGE_ID/insights?since=xxx&until=xxx
não retorna todos os dados que eu quero (de alguma forma suprime os dados como se houvesse algum limite para o tamanho da resposta).
Eu tentei dividir o intervalo de datas (por exemplo, 01.04.2011-01.04.2011 -> 01.04.2011-01.08.2011-01.12.2011-01.04.2011) que também não funcionou como eu queria que ele .
Minha próxima abordagem foi solicitar apenas os valores de insight de que preciso, como "page_stories, page_impressions, ...". Os pedidos pareciam com isso
/PAGE_ID/insights/page_impressions/day?since=xxx&until=xxx
Isso realmente funcionou, mas não com ajax. Às vezes, parecia deixar cair algumas solicitações (especialmente se eu mudei a guia do navegador no google chrome) e eu preciso ter certeza de que todas as solicitações retornam uma resposta. Uma solução synchronus levaria muito tempo, considerando que uma solicitação requer pelo menos 2 segundos e com um intervalo de datas de 2 anos, eu posso ter cerca de 300 solicitações únicas, isso leva muito tempo para ser concluído.
Por fim, tropecei na capacidade do Facebook de fazer solicitações em lote, o que é exatamente o que preciso. Pode embalar até 50 solicitações em uma chamada, o que reduz significativamente a largura de banda. E aqui é onde eu estou preso. O facebook api dá alguns exemplos de como usá-lo, mas nenhum deles funcionou quando eu os testei no Graph Explorer e através do php facebook api sdk. Eu tentei embalar este pedido
PAGE_ID/insights/page_fan_adds/day?since=1332486000&until=1333695600
em uma solicitação em lote, mas falhou.
Parece que a API está com um bug. Está sempre me dando esse erro quando estou usando um ponto de interrogação '?' no campo 'relative_url'.
{
"error": {
"message": "batch parameter must be a JSON array",
"type": "GraphBatchException"
}
}
Aqui está o que eu tentei:
Estes dão o erro "deve ser um array JSON":
?batch=[{"method":"GET","relative_url":"/PAGE_ID/insights/page_fan_adds/day?since=1332486000&until=1333695600"}]
Esses dois realmente retornam dados, mas estão ignorando os parâmetros:
?batch=[{"method":"GET","relative_url":"/PAGE_ID/insights/page_fan_adds/day","body":"since=1332486000 until=1333695600"}]
?batch=[{"method":"GET","relative_url":"/PAGE_ID/insights/page_fan_adds/day","body":"since=1332486000,until=1333695600"}]
?batch=[{"method":"GET","relative_url":"/PAGE_ID/insights/page_fan_adds/day","body":{"since":"1332486000","until":"1333695600"}}]
E este me diz que esta é uma "solicitação de postagem sem suporte":
?batch=[{"method":"POST","relative_url":"/PAGE_ID/insights/page_fan_adds/day","body":"since=1332486000 until=1333695600"}]
Alguém pode ajudar?