Таблица в прямом эфире не обновляется, как предполагается
Я создаю веб-страницу для livestreamers с моего сайта.
но у меня есть некоторые проблемы с этим, я создал таблицу, и я много ерундовал с ней, и у меня были хорошие результаты, но она еще не идеальна, поэтому я все еще застрял
текущий пример http://brokendiamond.org/?q=node/9;
у меня есть 2 проблемы с этим; 1 моя страница загружается примерно через 2 - 3 секунды, которая все еще слишком длинна 2 данные в моей таблице не обновляются, как это должно быть тоже, когда мой поток запускается, он не отображается в моей таблице, даже если XML-файл действительно обновляется, и он не показывает правильное количество просмотров, так что с этим что-то не так,
Буду признателен за любую информацию по этому поводу или помощь по этому вопросу, потому что я действительно хочу закончить эту часть, чтобы я мог двигаться дальше в моем списке задач.
Я слышал, как люди говорят о наличных деньгах, но я понятия не имею, как это сделать, чтобы это могло быть руководством.
XML API можно найти по адресу: http://api.own3d.tv/liveCheck.php?live_id=210230
и текущий код моей веб-страницы:
Hello and welcome to the Livestream page for the broken diamond community here you can find all our content creator's livestream pages to watch them game. you can chat with other members and even them! We always welcome new followers and will love to hear about suggestions for games, in game tips and all those opinions we know you have to share! Enjoy your favorite streamers, and don't forget their schedule can be found under the information block in the menu.
<div id="livetable">
</div>
<script type="text/javascript">
load();
var intervalID;
refresh();
function refresh()
{
intervalID = setInterval(load, 60000);
}
function load()
{
var elem = document.getElementById("livetable");
elem.innerHTML = '<?php loadpage() ?><br>';
}
</script>
<?php
define('ELEMENT_CONTENT_ONLY', true);
define('ELEMENT_PRESERVE_TAGS', false);
function value_in($element_name, $xml, $content_only = true)
{
if ($xml == false)
{
return false;
}
$found = preg_match('#<'.$element_name.'(?:\s+[^>]+)?>(.*?)'.'</'.$element_name.'>#s', $xml, $matches);
if ($found != false)
{
if ($content_only)
{
return $matches[1]; //ignore the enclosing tags
}
else
{
return $matches[0]; //return the full pattern match
}
}
// No match found: return false.
return false;
}
function loadpage()
{
echo "<table cellpadding=\"0\" cellspacing=\"0\" style=\"width: 95%\" >";
echo "<tr class=\"info-row\" bgcolor=#252525 style=\"color:white; height: 15px;\">";
echo "<td style=\"width: 14%; height: 10px; padding-left: 5px;\"><b>Preview</b></td>";
echo "<td style=\"width: 10%; height: 10px; padding-left: 5px;\"><b>Live</b></td>";
echo "<td style=\"width: 36%; height: 10px; padding-left: 5px;\"><b>Stream</b></td>";
echo "<td style=\"width: 10%; height: 10px; padding-left: 5px;\"><b>Viewers</b></td>";
echo "<td style=\"width: 10%; height: 10px; padding-left: 5px;\"><b>Time online</b></td>";
echo "</tr>";
addrow(107473,10,"Osuryn","Osuryn is streaming random games live",false);
addrow(210320,28,"Dennojj","Dennojj is streaming PS3 games",true);
echo "</table>";
}
function addrow($streamID, $streamPage , $streamName , $streamSlogan, $odd)
{
if ($odd)
{
echo "<tr class=\"content-row online\" id=\"958\" bgcolor=#A7A7A7>";
}
else
{
echo "<tr class=\"content-row online\" id=\"958\" bgcolor=#BFBFBF>";
}
echo "<td style=\"width: 14%;\"><img src=\"http://img.hw.own3d.tv/live/live_tn_".$streamID."_.jpg\" style=\"height: 72px;\" \></td>";
echo "<td style=\"width: 10%; padding-left: 5px;\"><br><br><b>".getLiveStatus($streamID)."</b></td>";
echo "<td style=\"width: 36%; vertical-align: top; padding-top: 6px; padding-right: 6px;\">";
echo "<div><br><a href=\"http://brokendiamond.org/?q=node/$streamPage\">$streamName</a></div>";
echo "<div style=\"padding-top: 6px; font-size: 11px;\">$streamSlogan</div>";
echo "</td>";
echo "<td style=\"width: 10%; padding-left: 5px;\"><br><br>".getLiveViews($streamID)."</td>";
echo "<td style=\"width: 10%; padding-left: 5px;\"><br><br>".getOnTime($streamID)." minutes online</td>";
echo "</tr>";
}
function getLiveStatus($streamID)
{
$request = 'http://api.own3d.tv/liveCheck.php?live_id='.$streamID;
$arg = '240';
$session = curl_init($request.$arg);
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($session);
curl_close($session);
if (preg_match("/true/",$response, $result))
{
$streamStatus="Live";
}
else
{
$streamStatus="Offline";
}
return $streamStatus;
}
function getLiveViews($StreamID)
{
$request = 'http://api.own3d.tv/liveCheck.php?live_id='.$StreamID;
$arg = '240';
$session = curl_init($request.$arg);
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($session);
curl_close($session);
$viewStatus =value_in('liveViewers', $response) + "";
return $viewStatus;
}
function getOnTime($StreamID)
{
$request = 'http://api.own3d.tv/liveCheck.php?live_id='.$StreamID;
$arg = '240';
$session = curl_init($request.$arg);
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($session);
curl_close($session);
$onStatus =value_in('LiveDuration', $response) + "";
return $onStatus;
}
?>
1 ответ
Причина не освежает, потому что <?php loadpage() ?>
будет запускаться только при запуске страницы, а не при любом последующем обновлении (похоже, каждую минуту). Вы хотели бы сделать запрос на другую страницу, чтобы получить этот контент каждый раз после того, как он у вас есть.
JQuery:
$.get('yoururl.php', function(data) { /* Do stuff with `data` here */ });
Что касается скорости... Что еще происходит на всей этой странице? Между 3 запросами вы находитесь на ~700 мс, что составляет почти секунду от 2/3, но не совсем. Я полагаю, что-то еще происходит с друпалами?
Кеширование, да, делай это! У вас есть несколько вариантов: http://en.wikipedia.org/wiki/List_of_PHP_accelerators / Memcached являются наиболее надежными в использовании. Существует еще один вариант сохранения ответа в файл и чтения из файла, если он менее минуты, в противном случае выполните запрос и перезапишите его. Это было бы самым простым и удалило бы ~700 мс в веб-запросах.