2011-01-21 3 views
0

Для профиля пользователя я запрос Twitter Search API с помощью:Twitter API - 406 Не Приемлемый ответ

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

который работал отлично последние недели.

С несколько дней Twitter API получает много запросов от моего сайта, а иногда и ответов с «406 Not Acceptable»

полного сообщения об ошибке:

массива (18) { [0] => строка (27) «HTTP/1.1 406 недопустимо» [1] => строка (35) »Дата: Пт, 21 янв 2011 12:31:06 GMT" [2] => строка (10) «Сервер: hi» [3] => строка (26) «Статус: 406 недопустимо» [4] => строка (15) «Повторить-после: 10» [5] => строка (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] => строка (55)" Cache-Con trol: max-age = 15, must-revalidate, max-age = 300 "[9] => string (38)" Истекает: Чт, 21 Янв. 2011 12:36:06 GMT "[10] => string (21) «Vary: Accept-Encoding» [11] => string (17) «Content-Length: 1» [12] => string (21) «X-Larnish: 1897557299» [13] => string (6) " Возраст: 0 "[14] => строка (16)" Через: 1.1 лак "[15] => строка (45)" X-Cache-Svr: slc1-acm-32-sr1.prod.twitter.com "[ 16] => строка (13) "X-Cache: MISS" [17] => строка (17) "Подключение: закрыть"}

Я не понимаю Twitter Доку об этом:

http://apiwiki.twitter.com/w/page/22554652/HTTP-Response-Codes-and-Errors говорит: «406 недопустимо: возвращено API поиска, когда в запросе указан недопустимый формат».

потому что, когда я повторю попытку через несколько секунд, запрос снова прекратится.

У кого есть идея, как это исправить?

+0

Форматирование вашего кода - 406. ; -P – deceze

ответ

2

Причина:
From the docs, поддерживаемые форматы:

1)
JSON 2) атом

И вы используете rss. Вот почему вы получаете ошибку. Формат должен быть указан как расширение.Как это:

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

Решение:
Используйте атом или JSON формат, например:

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

Полный код должен выглядеть следующим образом:

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

Проблема в том, что иногда это работает, иногда это не с тем же запросом - rss должен работать, тоже смотрите прямо здесь: http://search.twitter.com/search.rss?q=test – Lukas

+0

Они могут удалите поддержку (или при этом). Почему бы не использовать полностью поддерживаемые. JSON - хорошая вещь, и PHP имеет встроенный 'json_decode'. Таким образом, не должно быть никаких проблем с этим. – shamittomar

+0

Я попробую json, спасибо! – Lukas

0

Если он перегружен, это может быть причиной ошибки.

В чем заключает «двое слово»? Если это переменная, она может содержать некорректное кодирование.

+0

перегружен обычно ответами с другими кодами ошибок. - Двойное слово - это просто слово - проблема в том, что иногда это работает, иногда это не с тем же запросом. – Lukas

+0

Да, эта проблема заставила бы меня поверить, что есть проблема с услугой Twitter вместо вашего запроса, как я уже сказал. – Merijn

1

The Twitter API возвращает целую серию 400 и 500 ошибок случайным образом и на низком уровне. Как правило, точный код ошибки не имеет смысла, поскольку он меняется. По моему опыту ложная ошибка происходит около 0,1% времени, когда вы делаете запрос. Единственное решение - повторить запрос.

Если ошибка воспроизводима, проверьте свой код. Если ошибка является случайной и прерывистой, напишите код, который повторяет запрос при возникновении ошибки.