Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我在twitch和own3d电视上使用json api,我的页面速度非常慢_Php_Json_Api_Performance - Fatal编程技术网

Php 我在twitch和own3d电视上使用json api,我的页面速度非常慢

Php 我在twitch和own3d电视上使用json api,我的页面速度非常慢,php,json,api,performance,Php,Json,Api,Performance,正如我在标题中所说,我正在通过php使用twitch tv和own3d tv的json api来获取我想要的流的信息 问题是页面加载速度不快,事实上,有时php服务器会因为30秒或更长时间的功能而停止。 错误:致命错误:中超过了30秒的最大执行时间 我正在使用在线指示器: function status($stream_id, $type){ if($type == 't'){ $chan = "http://api.justin.tv/api/stream/list.json?ch

正如我在标题中所说,我正在通过php使用twitch tv和own3d tv的json api来获取我想要的流的信息

问题是页面加载速度不快,事实上,有时php服务器会因为30秒或更长时间的功能而停止。 错误:致命错误:中超过了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;

}
所有功能都可以完美运行,但问题是它们何时会变得异常

有没有什么可能的方法可以更快地做到这一点?? 我已经看到了一些其他加载速度非常快的站点示例,如和

提前感谢您的帮助


编辑:*已解决*感谢各位的帮助!我使用了一个cronjob将数据存储到数据库中,然后我只是做了一个查询来请求它们,它每5分钟更新一次,但是,哦,总比没有好。

他们可能正在服务器上缓存API结果。我就是这么做的。服务器每分钟轮询API以获取新信息并将其存储,因此流显示速度与网站的其他部分一样快。

它们可能正在服务器上缓存API结果。我就是这么做的。服务器每分钟轮询API以获取新信息并将其存储,因此流显示速度与网站的其他部分一样快。

您的代码很慢,因为您为每个用户执行一个http请求。仅一个http请求通常需要大约200ms-400ms的时间。PHP不是异步的,这意味着它将停止代码的执行,直到收到own3d或twitch的响应

我不熟悉own3d api,但在Twitch中,您可以发送所有需要的用户id,它将在一个http请求中获取所有详细信息

这就是我在我的网站上获取twitchtv直播流的方式

例如:

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

这将生成以下url:

通过这种方式,您可以在一个http请求中获取所有用户的流

我建议,因为您已经在识别流属于哪个流提供者,所以不要执行http请求,而是为每个流提供者创建一个数组,并将流添加到相应的数组中

最后,发出一个http请求,一个用于own3d阵列上的所有流,另一个用于twitchtv阵列中的所有流。现在,您将拥有所有用户流,只有两个http请求

哦,还有一件事。当你呈现你的站点时,不要做这些流获取的事情,我有所有这些流获取的东西在ajax中,这样,我的页面将首先加载,然后在我的站点呈现后开始执行http请求

另外,缓存twitch和own3d发送给您的响应也是一个好主意。这样,您就不会为访问您站点的每个用户获取own3d和twitch的数据。这是伟大的,特别是如果你有一些坚实的交通


这真的可以提高速度。我希望这会有所帮助。

您的代码很慢,因为您正在为每个用户执行一个http请求。仅一个http请求通常需要大约200ms-400ms的时间。PHP不是异步的,这意味着它将停止代码的执行,直到收到own3d或twitch的响应

我不熟悉own3d api,但在Twitch中,您可以发送所有需要的用户id,它将在一个http请求中获取所有详细信息

这就是我在我的网站上获取twitchtv直播流的方式

例如:

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

这将生成以下url:

通过这种方式,您可以在一个http请求中获取所有用户的流

我建议,因为您已经在识别流属于哪个流提供者,所以不要执行http请求,而是为每个流提供者创建一个数组,并将流添加到相应的数组中

最后,发出一个http请求,一个用于own3d阵列上的所有流,另一个用于twitchtv阵列中的所有流。现在,您将拥有所有用户流,只有两个http请求

哦,还有一件事。当你呈现你的站点时,不要做这些流获取的事情,我有所有这些流获取的东西在ajax中,这样,我的页面将首先加载,然后在我的站点呈现后开始执行http请求

另外,缓存twitch和own3d发送给您的响应也是一个好主意。这样,您就不会为访问您站点的每个用户获取own3d和twitch的数据。这是伟大的,特别是如果你有一些坚实的交通


这真的可以提高速度。我希望这会有所帮助。

我使用jQuery的ajax使请求异步:

<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>

$(文档).ready(函数(){
$.ajax({
url:'your_php_哪个_做_请求。php?stream=STREAMNAME',
成功:功能(数据){
如果(数据==“php的输出”){
//流是在线的
}否则{
//流处于脱机状态
}
}
});
});

我使用jQuery的ajax使请求异步:

<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>

$(文档).ready(函数(){
$.ajax({
url:'your_php_哪个_做_请求。php?stream=STREAMNAME',
成功:功能(数据){
如果(数据==“php的输出”){
//流是在线的
}否则{
//流处于脱机状态
}
}
});
});

这不再有效。我在API文档中找不到现代的替代品。你知道吗?这已经不管用了。我在API文档中找不到现代的替代品。你知道吗?