RSS + PHP + SimpleXML = пишем скрипт публикации новостей за 15 минут

Опубликовано Эдик 27/01/2007 в разделе PHP

RSS + PHP + SimpleXML = пишем скрипт публикации новостей за 15 минут

Попросил меня один очень хороший знакомый написать сценарий, позволяющий публиковать на главной странице его сайта компьютерные новости с сайта 3DNews.ru. При этом он высказал мне следующее пожелание – новости должны автоматически скачиваться с сайта донора и сохраняться на локальном сервере, дабы не замедлять загрузку страницы при каждом обращении к ней. К тому же обновление новостей должно происходить примерно 2 раза в сутки. И напоследок – достаточно публиковать только 5 новостей из всего, что предлагает 3DNews.ru.

И не то, что это было бы сложно сделать, но уж совсем времени свободного на такое жалко. А поскольку знакомый очень уж хороший, то решился я все же ему помочь, однако выбрал самый короткий путь к цели. В результате скрипт написался практически сам собой минут за 15-20.

Судите сами. Для приготовления такого блюда в кратчайшие сроки необходимо иметь следующие ингредиенты:

1. Адрес RSS-канала новостей (это была, кстати, самая сложная задача, так как на самом сайте 3DNews.ru этот адрес не так то и легко было отыскать).

2. PHP5 под управлением сервера Apache.

3. Самый простой инструмент для работы с XML – модуль PHP SimpleXML (в PHP5 входит по умолчанию, о чем многие и не догадываются), удачно написанный в свое время замечательным программистом и превосходным человеком Стерлингом Хьюзом, кстати, если встретите его книгу о PHP, обязательно прикупите – очень советую.

Почему именно PHP5? Ну, во-первых, из-за SimpleXML. Во-вторых, чтобы не очень возиться с файлами при чтении и записи, так как в пятерке PHP есть замечательные функции, которые позволяют выполнять стандартные операции с файлами за один оператор кода (например, file_put_contents()).

Что получилось в результате – предлагаю ознакомиться с полным кодом сценария.

// Трансляция новостей с 3DNews.ru 
// http://www.3dnews.ru/news/rss/ 
// Имя файла для хранения RSS на локальном сервере 
$filename = 'rss/3dnews.xml'; 
// URL RSS потока 
$rss_url = 'http://www.3dnews.ru/news/rss/'; 
// Закачка файлов XML 
// Произвести проверку на то, что файл уже закачен 
if (!file_exists($filename)) { 
  // Закачать и сохранить 
  download($rss_url, $filename); 
} 
// Создание объекта SIMPLEXML и загрузка документа 
$xml = simplexml_load_file($filename); 
$i = 1; 
foreach ($xml->channel->item as $item) { 
  $title = $item->title; 
  $description = $item->description; 
  $link = $item->link; 
  echo iconv("UTF-8", "windows-1251", $title);
  echo iconv("UTF-8","windows-1251", $description);
  echo $link; 
  $i++; 
  if ($i > 5) break; // Не более 5 анонсов новостей 
} 
// Проверка на то, что если файл устарел более, чем на 12 часов - качать и сохранить новый 
if (time() > filemtime($filename) + 60*60*12) { 
  // Закачать и сохранить 
  download($rss_url, $filename);    
} 
############################################################################
function download($url, $filename) { 
  // Закачать файл с указанного URL и сохранить с определенным именем 
  $file = file_get_contents($url); 
  if ($file) file_put_contents($filename, $file); 
}

И главное – не более 15 минут на все : )

Примечание. Будете использовать этот код – убедитесь, что папка rss, которую я указал для хранения xml-документа новостей, имеет права на запись в нее PHP-сценарием.

А информацию о том, что представляет из себя SimpleXML, можно почитать на сайте PHP.

Поделиться в социальных сетях

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *