0

タイトルで述べたように、必要なストリームの情報を取得するために、twitch tv と own3d tv の json API を php 経由で使用しています。

この問題は、ページの読み込みが速くないことです。実際には、30 秒以上の機能のために php サーバーが停止することがあります。エラー: 致命的なエラー: 最大実行時間の 30 秒を超えました

私はオンラインインジケーターを使用しています:

 function status($stream_id, $type){
if($type == 't'){

    $chan = "http://api.justin.tv/api/stream/list.json?channel=" . $stream_id;
    $json = file_get_contents($chan);
    $exist = strpos($json, $stream_id);
    if($exist) {
        return true;
    }else{
        return false;   
    }


}else if($type == 'o'){

    $url = 'http://api.own3d.tv/liveCheck.php?live_id=' . $stream_id;
    $xml = simplexml_load_file($url);

    $isLive=$xml->liveEvent->isLive;

    if ($isLive == "true") {
        return true;
    }else{
        return false;   
    }

}
}

そして、ストリームから情報を取得する関数を使用しています:

function api_stream_data($stream_id, $type){
$stream_id = sanitize($stream_id);
$type = sanitize($type);

if($type == 't'){

    $streamData = json_decode(file_get_contents("http://api.justin.tv/api/stream/list.json?channel=$stream_id"),true);

    $data = array(
        'image'=>$streamData[0]['channel']['image_url_medium'],
        'title'=>$streamData[0]['title'],
        'limage'=>$streamData[0]['channel']['screen_cap_url_huge'],
        'game'=>$streamData[0]['meta_game']
    );
}else if($type == 'o'){
    $streamData = json_decode(file_get_contents("http://api.own3d.tv/rest/live/list.json?liveid=$stream_id"),true);
    $data = array(
        'image'=>$streamData[0]['thumbnail_small'],
        'title'=>$streamData[0]['live_name'],
        'limage'=>$streamData[0]['thumbnail_large'],
        'game'=>$streamData[0]['game_name']
    );
}

return $data;

}

すべての機能は完璧に機能しますが、問題は実行にかかる時間です....

それをより速く行う方法はありますか?? www.solomid.netwww.clgaming.netのように、非常に高速にロードされる他のサイトの例を見てきました。

助けてくれてありがとう!

編集: *解決済み*ご協力いただきありがとうございます。データをデータベースに保存する cronjob を使用してから、それらを要求するクエリを作成しました。5 分ごとに更新されますが、何もないよりはましです。

4

3 に答える 3

3

ユーザーごとに 1 つの http 要求を実行しているため、コードが遅くなります。通常、1 回の http リクエストに約 200 ミリ秒から 400 ミリ秒かかります。PHP は非同期ではありません。これは、own3d または twitch からの応答を取得するまでコードの実行を停止することを意味します。

私は own3d api に慣れていませんが、Twitch では必要なすべてのユーザー ID を送信でき、1 つの http 要求ですべての詳細を取得できます。

これは、自分のサイトで twitchtv ライブ ストリームをフェッチする方法です。

例:

$response = $client->get('', '', 'http://api.justin.tv/api/stream/list.json?channel='.implode(',', $users));

これにより、次の URL が生成されます: http://api.justin.tv/api/stream/list.json?channel=IPLLoL,tsm_theoddone,KungenTV

このようにして、単一の http リクエストですべてのユーザーのストリームを取得できます。

ストリームが属するストリーム プロバイダーを既に特定しているため、http 要求を実行する代わりに、ストリーム プロバイダーごとに 1 つの配列を作成し、対応するストリームにストリームを追加することをお勧めします。

最後に、own3d 配列のすべてのストリームに対して 1 つ、twitchtv 配列のすべてのストリームに対して 1 つの http 要求を作成します。これで、たった 2 つの HTTP リクエストですべてのユーザー ストリームを取得できます。

ああ、別のこと。サイトをレンダリングしているときに、このストリーム フェッチを行わないでください。このストリームはすべて ajax でフェッチしているため、ページが最初に読み込まれ、サイトがレンダリングされた後に http 要求の実行が開始されます。

また、twitch と own3d が送信する応答をキャッシュすることもお勧めします。そうすれば、サイトにアクセスするすべてのユーザーで own3d と twitch のデータを取得する必要がなくなります。これは、トラフィックが多い場合に特に優れています。

これで本当に速度が向上するはずです。これが役立つことを願っています。

于 2012-12-15T17:33:26.117 に答える
0

API の結果をサーバーにキャッシュしている可能性があります。それが私がHonstreams.comで行ったことです。サーバーは毎分 API をポーリングして新しい情報を取得し、それを保存するため、ストリームは Web サイトの他の部分と同じくらい速く表示されます。

于 2012-11-03T00:44:35.567 に答える
0

I use jQuery's ajax to make the request asynchronous:

<script>
$(document).ready(function() {
    $.ajax({
        url: 'your_php_which_do_the_request.php?stream=STREAMNAME',
        success: function(data) {
            if(data=="output of php") {
                // Stream is online
            } else {
                // Stream is offline
            }
        }
    });
});
</script>
于 2013-09-30T07:20:12.857 に答える