2012-02-11 62 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分鐘左右的時間,並保存線上線下的用戶在本地數據庫。這將是最快的方式,因爲查詢本地數據庫比依賴第三方站點做出響應快得多。