2010-07-10 7 views
0

Я использую PHP для отображения последнего твита от пользователя. Это в Wordpress. Это работает большую часть времени, - но иногда, я получаю эту ошибку:Неисправность вызова API API Twitter

file_get_contents(http://api.twitter.com/1/statuses/user_timeline/[username].json) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in [...]/twitter.php on line 47

Я абсолютно уверен, что я не буду сверх лимита API Twitter, потому что даже если мой код кэширования несовершенна, не один иначе это можно увидеть - он размещен локально - и я не видел страницу 150 раз в час. Я тестировал, что имена пользователей и базы данных действительно извлекаются. Это мой код:

<?php 
function twitter($username) { 
$tweet = ''; 
echo $username; 
if (!get_option('twitter_last_updated')) { 
    $format='json'; 
    $tweet_raw=file_get_contents("http://api.twitter.com/1/statuses/user_timeline/{$username}.{$format}"); 
    $tweet = json_decode($tweet_raw); 
    add_option('twitter_last_updated', time(), "", "yes"); 
    add_option('twitter_last_updated_author', $username, "", "yes"); 
    add_option('twitter_last_updated_data', $tweet_raw, "", "yes"); 
} elseif (time() - get_option('twitter_last_updated') > 30 || get_option('twitter_last_updated_author') != $username) { 
    $format='json'; 
$tweet_raw=file_get_contents("http://api.twitter.com/1/statuses/user_timeline/{$username}.{$format}"); 
    $tweet = json_decode($tweet_raw); 
    update_option('twitter_last_updated', time()); 
    update_option('twitter_last_updated_author', $username); 
    update_option('twitter_last_updated_data', $tweet_raw); 
} else { 
$tweet = json_decode(get_option('twitter_last_updated_data')); 
} ?> 
<!-- display the tweet --> 
<?php } ?> 

Я бы очень признателен за помощь в этом. Я чувствую себя полностью в тупике.

+5

По моему опыту, все, что касается Twitter, прерывается с перерывами. – JAL

ответ

2

Во-первых, вы не должны использовать file_get_contents, чтобы получить «файлы» по сети. Вы должны использовать завиток. Это может быть просто задержка системного ответа или твиттер, выдающий перенаправление для балансировки нагрузки. file_get_contents не выполняет перенаправления и в основном отключается немедленно. Curl может быть настроен так, чтобы следовать переадресации и придерживаться сетевого таймаута (1 минута, я думаю), если не указано время ожидания. Самое главное, завиток может объяснить, почему это не удалось.

+0

Является ли Curl установленным с PHP по умолчанию? Понимаете, я делаю премиальную тему Wordpress, поэтому мне нужно быть уверенным, что все, что я использую, будет установлено на любом сервере, который использует клиент. – Debashis

+0

Я еще не нашел место без cURL, а удаленные 'file_get_contents' отключены на некоторых хостах (в частности, совместно с ними). – ceejayoz

+0

Большое спасибо, я получил его работу с cURL. – Debashis

1

Как часто вы вызываете функцию? Если я правильно помню, twitter недавно изменил максимальное количество звонков в час с 150 до 75 в час. Возможно, вы захотите кэшировать результаты, чтобы не использовать свое пособие.

Смотрите эту Slashdot историю: Twitter Throttling hits 3rd party apps

+0

Да, я тоже этим занимался. Моя версия использует javascript на стороне клиента, но при отладке других проблем я заметил, что мои твиттер-каналы не работают, и мне потребовалось некоторое время, чтобы понять, почему ... –

+0

Сомневаюсь, что я звоню более 20 раз в час, так как Я сказал, это только я. – Debashis

0

Почему вы не пользуетесь WordPress HTTP API? Это именно то, для чего он был разработан - обертка для работы с HTTP с использованием стандартных функций WordPress, независимо от платформы или настройки.

0

Я написал что-то вроде того, что у вас есть, и он продолжает терпеть неудачу, как и каждые 3 запроса. Решение создало небольшую систему кеша и @ на файле file_get_contents, чтобы избежать ошибок при отправке ошибок пользователям.

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

Я также не рекомендую вам добавлять этот onfly, это может замедлить работу всей страницы из-за проблем с Twitter.

 Смежные вопросы

  • Нет связанных вопросов^_^