1

我正在写一个网站,显示来自 Own3d 和 Twitch 的某种直播。我在 own3d 和 twitch api 的 xml 和 json 请求很慢时遇到了一些问题,所以我联系了 Own3d。他们真的很友好,这就是他们的回应:

你好雅各布,

我们的 API 响应时间是正常的,但您可能遇到的问题是因为您每次刷新网站时都在请求信息。

大多数其他网站(例如 clgaming.net)都运行 cron 作业,该作业大约每分钟收集一次在线和离线流的信息,并写入本地数据库,以便在有人加载网站时快速。

问候, own3D.tv 支持团队

所以这就是我所做的,我编写了一个 PHP 脚本,将信息写入我的 Mysql 数据库,稍后当我将网站上线时我会 cronjob,它运行良好,但随着我的数据库变得越来越大,我现在再次遇到问题:我现在有我的数据库中有 65 个流媒体,我想我又遇到了请求时间问题。首先我收到错误消息:

致命错误,超过 30 秒的最大执行时间

我认为没问题让最大执行时间增加。( ini_set('max_execution_time', 300);)

现在发生的是,我收到不工作请求的随机错误。

例如:

警告:file_get_contents(http://api.justin.tv/api/stream/list.json?channel=schabs) [function.file-get-contents]:打开流失败:HTTP 请求失败!第 20 行 D:\wamp\www\Lol Streamportal\database_actualize.php 中的 HTTP/1.1 400 错误请求

它发生在 Own3d 和 twitch 上,正如我所说的那样,它是随机的,哪些流可以工作,哪些不可以。实际上,我认为应该可以让它更好地工作,因为 clgaming f.ex 有超过 1,000 个流,如果在他们的 cronjob 脚本中在线,可能必须检查这些流。

我想在我再次联系 own3d 或 twitch 之前我问你们,因为我真的对 XML 一点经验都没有,对 Json 也没有,也许你们中的一些人有一个如何解决它的想法,或者我不应该编写脚本在PHP中,而是在JDBC左右?

我不想炫耀我的整个代码,但我可以给你导致问题的函数的代码。(如果真的需要,我也可以发布其他代码)

function get_online($stream_id, $typ) {
    // Ownd3d Streams
    if($typ == 'o') {
        $xml = simplexml_load_file('http://api.own3d.tv/liveCheck.php?live_id='.$stream_id);
        $isLive = $xml->liveEvent->isLive;
        if($isLive == 'true') {
            return true;    
        }
        else {
            return false;   
        }
    }
    // Twitch Streams
    else if($typ == 't') {
        $api = "http://api.justin.tv/api/stream/list.json?channel=".$stream_id;
        $json = file_get_contents($api);
        $exist = strpos($json, $stream_id);
        if($exist) {
            return true;
        }
        else{
            return false;  
        }       
    }
    else {
        return false;   
    }
}

正如我所说,当我的数据库较小时,我根本没有问题。但自从我收到超过 50 个条目后,我开始遇到问题。感谢所有的答案。

编辑:我刚刚有了一个想法。也许 twitch.tv 和 Own3d 在一段时间内允许发送的请求数量有限,也许我会联系他们。我可以解决这个问题的一件事是编写 2 或 3 个不同的脚本,它们只发送对数据库中前 30 个条目的请求,第二个脚本用于接下来的 30 个,依此类推。

4

0 回答 0