0

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

这是有问题的代码:

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 秒或更多)。

4

1 回答 1

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

于 2012-06-22T18:00:14.363 回答