0

我正在使用 PHP 来显示来自用户的最新推文。这是在 Wordpress 中。这在大多数情况下都有效 - 但有时,我会收到此错误:

file_get_contents( http://api.twitter.com/1/statuses/user_timeline/[username].json ) [function.file-get-contents]:打开流失败:HTTP 请求失败![...]/twitter.php 第 47 行中的 HTTP/1.1 400 错误请求

我绝对确定我不会超过 Twitter API 限制,因为即使我的缓存代码有缺陷,其他人也无法看到这一点——它是在本地托管的——而且我无法在一小时内查看该页面 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

4 回答 4

2

首先,您不应该使用 file_get_contents 通过网络检索“文件”。你应该使用卷曲。可能只是系统响应延迟,或者 twitter 发出重定向以进行负载平衡。file_get_contents 不遵循重定向,基本上会立即超时。如果未指定超时,则可以将 Curl 设置为遵循重定向并遵守网络超时(我认为是 1 分钟)。最重要的是,curl 可以说明它失败的原因。

于 2010-07-10T21:43:42.697 回答
1

您多久调用一次该函数?如果我没记错的话,推特最近将每小时的最大通话量从 150~ 改为每小时 75 次。您可能希望缓存结果,以免用完您的津贴。

看到这个 slashdot 故事:Twitter Throttling 击中 3rd 方应用程序

于 2010-07-10T21:40:04.673 回答
0

你为什么不使用WordPress HTTP API?这正是它的设计目的 - 一个使用标准 WordPress 函数处理 HTTP 的包装器,无论平台或设置如何。

于 2010-07-10T23:47:54.903 回答
0

我写了一个像你所拥有的东西,它像每 3 个请求一样不断失败,解决方案是建立一个小缓存系统和 @'s 在 file_get_contents 上以避免 php 将错误返回给用户。

当 twitter 失败时,它会失败很多,你只需从之前构建的缓存中获取数据。

我也不建议你只添加这个,由于 twitter 问题,它可能会减慢整个页面的构建速度。

于 2010-07-11T00:07:14.257 回答