0

Twitterは現在ダウンしており、私のサイトのホームページの1つは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を介してフェッチを実行し、Webページにキャッシュされたデータを使用させることですが、これはを使用してタイムアウトを設定する例です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()、およびコンテキストオプションとパラメータを参照してください。

于 2012-06-22T18:00:14.363 に答える