2012-02-11 67 views
0

我是PHP的新手,我想知道什么是执行此操作的更好方法? PHP使用own3d.tv和justin.tv提供的2个API来检查流的状态,无论它是在线还是离线。我实现它的方式非常糟糕,因为如果加载页面,它会逐个检查PHP中的每个流,然后仅显示页面和结果。我的问题是,如何加载页面或者a)更快或者b)使用jquery或者其他的东西来首先显示页面,但是通过每个流它会说“正在加载...”,并且当它被实际检查时,显示结果如下所示。PHP如何更快地执行这些检查/或更快地加载页面?

这里的所有中提到的PHP。

<html> 
<body> 
<title>Streams</title> 

<?php 

function pageTime() 
{ 
static $_pt; 
    if($_pt == 0) $_pt = microtime(true); 
    else return (string)(round(microtime(true)-$_pt ,3)); 
} 

pageTime(); 

//justin.tv 
echo '<b>Justin.tv: </b> <br>'; 

//eg.demon 
$json_file = file_get_contents("http://api.justin.tv/api/stream/list.json?channel=dotademon", 0, null, null); 
$json_array = json_decode($json_file, true); 

if ($json_array[0]['name'] == 'live_user_dotademon') { 
echo 'EG.Demon <sup><b>Popular</b></sup> - <font color="green"><b>Online</b></font> - Viewers: '; echo ($json_array[0]['channel_count']); echo ' - <a href="http://www.justin.tv/dotademon/">Watch now!</a> <br>'; 
} 
else { 
echo 'EG.Demon <sup><b>Popular</b></sup> - <font color="red"><b>Offline</b></font> <br>'; 
} 

//mouz.trixi 
$json_file = file_get_contents("http://api.justin.tv/api/stream/list.json?channel=trixilulz", 0, null, null); 
$json_array = json_decode($json_file, true); 

if ($json_array[0]['name'] == 'live_user_trixilulz') { 
echo 'Mouz.Trixi - <font color="green"><b>Online</b></font> - Viewers: '; echo ($json_array[0]['channel_count']); echo ' - <a href="http://www.justin.tv/trixilulz/">Watch now!</a> <br>'; 
} 
else { 
echo 'Mouz.Trixi - <font color="red"><b>Offline</b></font> <br>'; 
} 

//teamdignitascomewithme 
$json_file = file_get_contents("http://api.justin.tv/api/stream/list.json?channel=leceweme", 0, null, null); 
$json_array = json_decode($json_file, true); 

if ($json_array[0]['name'] == 'live_user_leceweme') { 
echo 'Dignitas.ComeWithMe - <font color="green"><b>Online</b></font> - Viewers: '; echo ($json_array[0]['channel_count']); echo ' - <a href="http://www.justin.tv/leceweme/">Watch now!</a> <br>'; 
} 
else { 
echo 'Dignitas.ComeWithMe - <font color="red"><b>Offline</b></font> <br>'; 
} 

//thepremierleague 
$json_file = file_get_contents("http://api.justin.tv/api/stream/list.json?channel=thepremierleague", 0, null, null); 
$json_array = json_decode($json_file, true); 

if ($json_array[0]['name'] == 'live_user_thepremierleague') { 
echo 'The Premier League - <font color="green"><b>Online</b></font> - Viewers: '; echo ($json_array[0]['channel_count']); echo ' - <a href="http://www.justin.tv/thepremierleague/">Watch now!</a> <br>'; 
} 
else { 
echo 'The Premier League - <font color="red"><b>Offline</b></font> <br>'; 
} 

//own3d.tv 
echo ' <br>'; 
echo '<b>Own3d.tv: </b> <br>'; 

//joindota with tobi wan 
$xml = simplexml_load_file("http://api.own3d.tv/liveCheck.php?live_id=10588"); 
$resultlive = $xml->xpath("/own3dReply/liveEvent/isLive"); 
$resultviewers = $xml->xpath("/own3dReply/liveEvent/liveViewers"); 

if ($resultlive[0] == 'true'){ 
echo 'joinDOTA with Tobi Wan <sup><b>Popular</b></sup> - <font color="green"><b>Online</b></font> - Viewers: '; echo ($resultviewers[0]); echo ' - <a href="http://www.own3d.tv/live/10588/">Watch now!</a> <br>'; 
} 
else { 
echo 'joinDOTA with Tobi Wan <sup><b>Popular</b></sup> - <font color="red"><b>Offline</b></font> <br>'; 
} 

//navidendi 
$xml = simplexml_load_file("http://api.own3d.tv/liveCheck.php?live_id=106735"); 
$resultlive = $xml->xpath("/own3dReply/liveEvent/isLive"); 
$resultviewers = $xml->xpath("/own3dReply/liveEvent/liveViewers"); 

if ($resultlive[0] == 'true'){ 
echo 'Na`Vi.Dendi <sup><b>Popular</b></sup> - <font color="green"><b>Online</b></font> - Viewers: '; echo ($resultviewers[0]); echo ' - <a href="http://www.own3d.tv/live/106735/">Watch now!</a> <br>'; 
} 
else { 
echo 'Na`Vi.Dendi <sup><b>Popular</b></sup> - <font color="red"><b>Offline</b></font> <br>'; 
} 

//ddlink 
$xml = simplexml_load_file("http://api.own3d.tv/liveCheck.php?live_id=117967"); 
$resultlive = $xml->xpath("/own3dReply/liveEvent/isLive"); 
$resultviewers = $xml->xpath("/own3dReply/liveEvent/liveViewers"); 

if ($resultlive[0] == 'true'){ 
echo 'DD.Link <sup><b>Popular</b></sup> - <font color="green"><b>Online</b></font> - Viewers: '; echo ($resultviewers[0]); echo ' - <a href="http://www.own3d.tv/live/117967">Watch now!</a> <br>'; 
} 
else { 
echo 'SK.Link <sup><b>Popular</b></sup> - <font color="red"><b>Offline</b></font> <br>'; 
} 

//gosugamers 
$xml = simplexml_load_file("http://api.own3d.tv/liveCheck.php?live_id=155074"); 
$resultlive = $xml->xpath("/own3dReply/liveEvent/isLive"); 
$resultviewers = $xml->xpath("/own3dReply/liveEvent/liveViewers"); 

if ($resultlive[0] == 'true'){ 
echo 'GosuGamers - <font color="green"><b>Online</b></font> - Viewers: '; echo ($resultviewers[0]); echo ' - <a href="http://www.own3d.tv/live/155074/">Watch now!</a> <br>'; 
} 
else { 
echo 'GosuGamers - <font color="red"><b>Offline</b></font> <br>'; 
} 

//mtwsynderen 
$xml = simplexml_load_file("http://api.own3d.tv/liveCheck.php?live_id=179879"); 
$resultlive = $xml->xpath("/own3dReply/liveEvent/isLive"); 
$resultviewers = $xml->xpath("/own3dReply/liveEvent/liveViewers"); 

if ($resultlive[0] == 'true'){ 
echo 'mTw.Synderen - <font color="green"><b>Online</b></font> - Viewers: '; echo ($resultviewers[0]); echo ' - <a href="http://www.own3d.tv/live/179879">Watch now!</a> <br>'; 
} 
else { 
echo 'mTw.Synderen - <font color="red"><b>Offline</b></font> <br>'; 
} 

//gosugamers with purge 
$xml = simplexml_load_file("http://api.own3d.tv/liveCheck.php?live_id=155073"); 
$resultlive = $xml->xpath("/own3dReply/liveEvent/isLive"); 
$resultviewers = $xml->xpath("/own3dReply/liveEvent/liveViewers"); 

if ($resultlive[0] == 'true'){ 
echo 'GosuGamers with Purge - <font color="green"><b>Online</b></font> - Viewers: '; echo ($resultviewers[0]); echo ' - <a href="http://www.own3d.tv/live/155073">Watch now!</a> <br>'; 
} 
else { 
echo 'GosuGamers with Purge - <font color="red"><b>Offline</b></font> <br>'; 
}  

//dotaoommentarieswithluminous 
$xml = simplexml_load_file("http://api.own3d.tv/liveCheck.php?live_id=160379"); 
$resultlive = $xml->xpath("/own3dReply/liveEvent/isLive"); 
$resultviewers = $xml->xpath("/own3dReply/liveEvent/liveViewers"); 

if ($resultlive[0] == 'true'){ 
echo 'DotA Commentaries with Luminous - <font color="green"><b>Online</b></font> - Viewers: '; echo ($resultviewers[0]); echo ' - <a href="http://www.own3d.tv/live/160379">Watch now!</a> <br>'; 
} 
else { 
echo 'DotA Commentaries with Luminous - <font color="red"><b>Offline</b></font> <br>'; 
} 

//teamdignitascomewithme 
$xml = simplexml_load_file("http://api.own3d.tv/liveCheck.php?live_id=40553"); 
$resultlive = $xml->xpath("/own3dReply/liveEvent/isLive"); 
$resultviewers = $xml->xpath("/own3dReply/liveEvent/liveViewers"); 

if ($resultlive[0] == 'true'){ 
echo 'Dignitas.ComeWithMe - <font color="green"><b>Online</b></font> - Viewers: '; echo ($resultviewers[0]); echo ' - <a href="http://www.own3d.tv/live/40553">Watch now!</a> <br>'; 
} 
else { 
echo 'Dignitas.ComeWithMe - <font color="red"><b>Offline</b></font> <br>'; 
} 

//loda 
$xml = simplexml_load_file("http://api.own3d.tv/liveCheck.php?live_id=73096"); 
$resultlive = $xml->xpath("/own3dReply/liveEvent/isLive"); 
$resultviewers = $xml->xpath("/own3dReply/liveEvent/liveViewers"); 

if ($resultlive[0] == 'true'){ 
echo 'Loda - <font color="green"><b>Online</b></font> - Viewers: '; echo ($resultviewers[0]); echo ' - <a href="http://www.own3d.tv/live/73096">Watch now!</a> <br>'; 
} 
else { 
echo 'Loda - <font color="red"><b>Offline</b></font> <br>'; 
} 
echo ' <br/>'; 
echo "The statuses were primitively checked in ". pageTime()." seconds."; 
?> 
</body> 
</html> 
+1

这可能更适合于[Codereview](http://codereview.stackexchange.com) – Grexis 2012-02-11 10:40:29

+0

如果您需要帮助,您需要更多解释 – 2012-02-11 10:41:17

回答

2

这绝对是个最简单的例子,使用AJAX和jQuery

jQuery的主页上:

$(document).ready(function() { 
    $("#stream1").load("stream1.php"); 
    $("#stream2").load("stream2.php"); 
    ... 
}); 

HTML主页上:

<div id="stream1">Loading...</div> 
<div id="stream2">Loading...</div> 
... 

stream1.phpstream2.php是使用您为每个人发布的代码的文件al流。

考虑使用jQuery中的$就法并用的方式,使之更加实用玩了。应该让你开始。

+0

感谢您的回复队友,此作品完美并且绝对可以在此之上工作! – user1104783 2012-02-11 10:51:27

0

您可以通过使用jQuery的ajax method这样做。此方法有一个称为成功的回调,您可以根据结果将“加载...”替换为“在线”或“离线”。

0

为了使这甚至更快,我建议让你的脚本,它是如何运行一个cronjob每5分钟左右的时间,并保存线上线下的用户在本地数据库。这将是最快的方式,因为查询本地数据库比依赖第三方站点做出响应快得多。