如何CURL并避免超时死亡(Twitter Down)

时间:2012-06-21 17:15:25

标签: php twitter cron memcached

Twitter现在已经关闭,我网站的一个主页依赖于从Twitter获取数据(依赖于问题 - 它应该是一个附件功能,因为它只显示来自其Feed的跟踪计数)。

以下是相关代码:

function socials_Twitter_GetFollowerCount($username) {
    $method = function () use ($username) { return file_get_contents('https://api.twitter.com/1/users/show.json?screen_name='.$username.'&include_entities=true'); };
    $json = cache('bmdtwitter', 3600, $method, false);
    $json = json_decode($json, true);

    return intval($json['followers_count']);
}

如果Twitter失败(或者在一段合理的时间内没有响应),这样做的好方法是什么,我们的网站似乎没有停机(我认为超时可能默认为30-60秒或更多)。

1 个答案:

答案 0 :(得分:1)

您可以向file_get_contents请求添加上下文并指定超时,以便在请求未在该时间内完成时挽救。如果您直接在页面加载上进行轮询,您可能需要考虑一个非常低的超时,例如2-3秒左右,因为大多数请求应该在此时间限制内完成。

更好的选择是通过cron进行提取并让您的网页使用缓存数据,但这里是使用file_get_contents设置超时的示例。

function socials_Twitter_GetFollowerCount($username) {
    $method = function () use ($username) {
        $opts = array('http' =>
            array(
                'timeout' => 3
            )
        );
        $context = stream_context_create($opts);

        return file_get_contents('https://api.twitter.com/1/users/show.json?screen_name='.$username.'&include_entities=true', false, $context);
    };

    $json = cache('bmdtwitter', 3600, $method, false);
    $json = json_decode($json, true);

    return intval($json['followers_count']);
}

请参阅file_get_contents()stream_context_create()Context options and parameters