Twitter API – 406 Resposta Não Aceitável

Para um perfil de usuário, consultai a API de pesquisa do Twitter através de:

curl_setopt($ch, CURLOPT_URL, "http://search.twitter.com/search.rss?q=".urlencode($username."+-badword").""); 

que funcionou de forma excelente nas últimas semanas.

Desde alguns dias, a API do Twitter obtém muitos pedidos do meu site e às vezes respostas com um “406 Not Aceptable”

A mensagem de erro completa é:

array (18) {[0] => string (27) “HTTP / 1.1 406 Not Acceptable” [1] => string (35) “Date: Fri, 21 Jan 2011 12:31:06 GMT” [2] = > string (10) “Servidor: oi” [3] => string (26) “Status: 406 Não Aceitável” [4] => string (15) “Repetir-Depois: 10” [5] => string (30 ) “X-Served-From: slc1-aah-25-sr1” [6] => string (38) “Content-Type: text / html; charset = utf-8″ [7] => string (45) ” X-Served-By: slc1-acm-32-sr1.prod.twitter.com “[8] => string (55)” Cache-Control: max-age = 15, deve-revalidar, max-age = 300 ” [9] => string (38) “Expira: Sex, 21 Jan 2011 12:36:06 GMT” [10] => string (21) “Variar: Accept-Encoding” [11] => string (17) ” Conteúdo-Comprimento: 1 “[12] => string (21)” X-Varnish: 1897557299 “[13] => string (6)” Age: 0 “[14] => string (16)” Via: 1.1 verniz “[15] => string (45)” X-Cache-Svr: slc1-acm-32-sr1.prod.twitter.com “[16] => string (13)” X-Cache: MISS “[17] => string (17) “Conexão: fechar”}

Eu não entendo o Twitter Doku sobre isso:

http://apiwiki.twitter.com/w/page/22554652/HTTP-Response-Codes-and-Errors diz “406 não aceitável: Devolvido pela API de pesquisa quando um formato inválido é especificado na solicitação”.

porque, quando eu tentar novamente depois de alguns segundos, o pedido funciona bem novamente.

Quem tem uma idéia de como corrigir isso?

Razão:
Dos documentos , os formatos suportados são:

1) json
2) átomo

E você está usando rss . É por isso que você está recebendo o erro. O formato deve ser especificado como a extensão. Como isso:

 http://search.twitter.com/search.format 

Solução:
Use o formato átomo ou json, assim:

 http://search.twitter.com/search.json?q=twitter 

O código completo deve ser:

 curl_setopt($ch, CURLOPT_URL, "http://search.twitter.com/search.json?q=".urlencode($username."+-badword").""); 

A API do Twitter retorna uma série inteira de 400 e 500 erros aleatoriamente e em um nível baixo. Geralmente, o código de erro exato não tem sentido, uma vez que varia. Da minha experiência, um erro falso ocorre cerca de 0,1% do tempo quando você faz uma solicitação. A única solução é repetir o pedido.

Se o erro for reprodutível, verifique seu código. Se o erro for random e intermitente, escreva o código que repete a solicitação quando ocorre um erro.

Se ele for sobrecarregado, esse pode ser o motivo do erro.

O que contém ‘badword’? Se for variável, pode conter algo incorretamente codificado.