【问题标题】:Twitter API Call Failing IntermittentlyTwitter API 调用间歇性失败
【发布时间】:2010-07-10 21:28:11
【问题描述】:

我正在使用 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 } ?>

我非常感谢您对此的帮助。我觉得完全被难住了。

【问题讨论】:

  • 根据我的经验,关于 Twitter 的一切都会间歇性地失败。

标签: php wordpress twitter http-get


【解决方案1】:

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

【讨论】:

  • Curl是否默认安装PHP?你看,我正在制作一个高级 Wordpress 主题,所以我需要确保我使用的任何东西都会安装在客户使用的任何服务器上。
  • 我还没有找到没有 cURL 的地方,并且远程 file_get_contents 在某些主机(尤其是共享主机)上被禁用。
【解决方案2】:

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

看到这个斜线故事:Twitter Throttling hits 3rd party apps

【讨论】:

  • 是的,我也被这个咬过。我的版本使用客户端 javascript,但在调试其他问题时,我注意到我的 twitter 提要关闭了,我花了一段时间才弄清楚为什么......
  • 我怀疑我每小时调用它超过 20 次,正如我所说,它只是我。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-05-25
      • 2019-04-18
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      相关资源
      最近更新 更多