Как обновлять турнирную таблицу?

seryoga

Создатель
Регистрация
12 Сен 2006
Сообщения
17
Реакции
33
Подскажите пожалуйста каким готовым бесплатным скриптом я могут воспользоваться для решения следующей задачи.

Мне нужно создать страницу, которая постоянно обновляется автоматически, забирая контент с другого сайта.

Поясню конкретней. Мне нужно, чтобы у меня все время была свежая хоккейная турнирная таблица, обновляемая автоматом. Разумеется, старая таблица при этом должна удаляться. В первую очередь интересует можно ли это реализовать для WP, если нет то можно ли для других движков?
 
У меня когда-то такой стоял, работал хорошо.
PHP:
<?
function get_URL_by_socket ($host,$path) {
//Получает URL $path с хоста $host через сокеты.
$fp = fsockopen($host, 80);
if (!$fp) {
  die ("Не могу получить данные с url http://$host/$path");
}
else {
  $out = "GET $path HTTP/1.0\r\n";
  $out .= "Accept: image/gif, application/xhtml+xml, */*\r\n";
  $out .= "Accept-Language: ru\r\n";
  $out .= "Host: $host\r\n";
  //Имитируем браузер Opera Mini:
  $out .= "User-Agent: Opera/8.01 (J2ME/MIDP; ".
  "Opera Mini/2.0.4509/1716; ru; U; ssr)\r\n";
  $out .= "Cache-Control: no-cache\r\n"; //Не кэшировать
  $out .= "Connection: Close\r\n\r\n";
  fwrite($fp, $out);
  $headers = "";
  while ($str = trim(fgets($fp)))
  $headers .= "$str\n";
  $body = "";
  while (!feof($fp))
  $body .= fgets($fp);
  fclose($fp);
}
return $body;
}
function process($str,$start,$end,$include) {
//Парсит полученный файл - здесь-то и пишется главное
//У нас это извлечение содержимого от $start до $end
$str1=strpos ($str,$start);
$str2=strpos ($str,$end);
if (!is_integer($str1)) {
  return "Не найден начальный сегмент: ".htmlspecialchars($start);
}
if (!is_integer($str2)) {
  return "Не найден конечный сегмент: ".htmlspecialchars($end);
}
if ($str1>$str2) {
  return "Конечный сегмент предшествует начальному";
}
if ($include) { //Включать начало и конец
  return substr ($str,$str1,$str2-$str1+strlen($end));
}
else { //Исключить начало и конец
  $str1+=strlen($start);
return substr ($str,$str1,$str2-$str1);
}
}
function parser ($host,$path,$start,$end,$include) {
//Основной вызов парсера:
//$host, $path - хост без http://www. и путь к файлу, начиная с /
//$start, $end - строки начала и конца извлекаемого содержимого
//$include - если true, включать в вывод строки $start и $end
static $first=true;
$str= get_URL_by_socket ($host,$path);
if ($first) {  //Заголовок посылается только при 1-м вызове
}
return process($str,$start,$end,$include);
}
$str=parser ("fc-elets.ru","/index.php/tournament/ranking/1-chernozemje",
"<!-- content -->","<!-- matchdays pageNav -->",false);
$str = iconv("UTF-8", "CP1251" , $str);
echo('<table width=500 border=1><th><td>')  ;
print $str;
echo ('</td></th></table>')
?>
 
PHP:
<?php
function getPage( $url )
  {global $id;
  $ch = curl_init();
  curl_setopt ($ch, CURLOPT_URL,$url);
  curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"); //агент которым мы представимся
  curl_setopt ($ch, CURLOPT_TIMEOUT, 15 ); // таймаут
  curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0);
  curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  $result = curl_exec ($ch);
  curl_close($ch);
  //если с кодировкой проблемы
    if (preg_match('//u', $result))//проверяем кодировку файла, если utf-8 то меняем кодировку
    {$result=iconv("utf-8", "cp1251", $result);
    $result = str_replace ('charset=windows-1251','',$result);}
 
  return $result; //возвращаем  полученную страницу
  }
$getPage = getPage ($id);
 
?>

дальше искать позиции элементов С которых и ДО которых вывести данные, например:
PHP:
$pos1 = strpos ($getPage,'<div id="12345">');//все что до него оставить
$pos2 = strpos ($getPage,'</div>',$pos1);//все что после него - вырезать
echo substr ($getPage,$pos1,$pos2);//вывести результат
 

Спасибо за интересный вариант, а каким образом можно всё это награбленое сохранять в файл, откуда информацию (турнирную таблицу ту же) будет брать другой простенький скрипт уже со странички сайта, хотя бы даже через include?
Чтобы при наличии cron не перегружать сайт.
 
Спасибо за интересный вариант, а каким образом можно всё это награбленое сохранять в файл, откуда информацию (турнирную таблицу ту же) будет брать другой простенький скрипт уже со странички сайта, хотя бы даже через include?
Чтобы при наличии cron не перегружать сайт.
В предыдущем коде строчку:
PHP:
echo substr ($getPage,$pos1,$pos2);//вывести результат
на:
PHP:
$getPage = substr ($getPage,$pos1,$pos2);

потом добавить:
PHP:
  $file = fopen ("table.txt","r+");//открыть для чтения и записи file.txt
  if ( !$file )
  {
    echo("Ошибка открытия файла");
  }
  else
  {
    fwrite ( $file, $getPage);//запись того, что спарсено
  }
  fclose ($file);

можно дополнительно и этот скрипт поставить на крон, а не инкулидить, чтобы каждый раз при перезагрузки страницы файл "table.txt" не обновлялся.
Либо добавить проверку на дату создания файла и обновлять тока раз в день...
 
Назад
Сверху