Сбой вызова API Twitter с перерывами - PullRequest
0 голосов
/ 11 июля 2010

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

file_get_contents (http://api.twitter.com/1/statuses/user_timeline/[username].json) [function.file-get-contents]: не удалось открыть поток: сбой HTTP-запроса! HTTP / 1.1 400 Неправильный запрос в [...] / twitter.php в строке 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 } ?>

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

Ответы [ 4 ]

2 голосов
/ 11 июля 2010

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

1 голос
/ 11 июля 2010

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

Посмотрите эту историю с slashdot: Twitter Throttling поражает сторонние приложения

0 голосов
/ 11 июля 2010

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

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

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

0 голосов
/ 11 июля 2010

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

...