Распечатать статью

RSS генератор

Что такое RSS? Если коротко, то это формат обмена контентом, базирующийся на XML. Любой интернет-ресурс, содержащий обновляемый или пополняемый контент, может заиметь у себя RSS ленту, и тогда пользователи этого ресурса получат быстрый и удобный способ получить свежие материалы. Кстати, показывать RSS в удобочитаемом виде может та же Opera, а вот IE выдаёт просто отформатированный XML файл.

 

Итак, задача: написать простой генератор RSS ленты для сайта, содержащего часто пополняемый контент. Решение пишем на PHP. А вы как думали? :) Записи ленты будем хранить в отдельном файле, чтобы было легче выкидывать устаревшие. Кто это предложил «генерировать ленту динамически, выбирая самые свежие записи из MySQL»? Не прокатит, учитывая, что обращаться к базе данных и делать выборку нам придётся каждый раз при просмотре ленты пользователем. В нашем же варианте мы имеем простое кэширование, и регенерация RSS происходит лишь в момент добавления новой записи, причём вообще без обращения к базе.

Схема проста: подгружаем файл с лентой, обрезаем старую запись, если их слишком много, и дописываем новую. Вот кусок кода, пояснения по ходу:

$rss_header_file = "rss/header.inc"; $rss_content_file = "rss/content.inc"; $rss_footer_file = "rss/footer.inc"; $rss_document_file = "rss/export.xml"; $rss_temp_file = "rss/tempfile"; $rss_miss_lines = 8; // Количество строк в одной записи $rss_max_records = 10; // Максимальное количество записей в ленте // Загружаем содержимое $rss_content = file($rss_content_file); // Если записей больше чем нужно, выкидываем самую старую if (count($rss_content) > $rss_miss_lines * $rss_max_records) $rss_content = array_slice($rss_content, $rss_miss_lines); // Добавляем свежую запись // В соответствующих переменных должны содержаться данные // При добавлении/удалении полей поправить $rss_miss_lines array_push( $rss_content, "<item>\n", "<title>".$author."</title>\n", "<link>".$link."</link>\n", "<guid>".$link."</guid>\n", "<description>".$message."</description>\n", "<pubDate>".date("r")."</pubDate>\n", "<author>".$author."</author>\n", "</item>\n" ); $fp = fopen($rss_content_file, "w"); foreach($rss_content as $rss_content_line) { if ($rss_content_line != "\n") fwrite($fp, $rss_content_line); } fclose($fp); // Собираем ленту $rss_document = array_merge( file($rss_header_file), file($rss_content_file), file($rss_footer_file) ); // Используем временный файл, чтобы не возникло конфликтов доступа $rnd = rand(0, 1000); $rss_temp_file = $rss_temp_file.$rnd; $fp = fopen($rss_temp_file, "w"); foreach($rss_document as $rss_document_line) fwrite($fp, $rss_document_line); fclose($fp); unlink($rss_document_file); rename($rss_temp_file, $rss_document_file);

Все файлы для ленты находятся в папке rss. Полезно также положить туда индексный файл, переадресующий нас на export.xml. В файлах header.inc и footer.inc содержатся, соответственно, заголовок и, хм… завершитель ленты. Можно, конечно, было прописывать их в коде явно, но тогда теряется возможность править их без залезания в код. Да, и не забудьте отформатировать добавляемый текст должным образом, например, с помощью htmlspecialchars(nl2br()).

Источник: internet-technologies.ru

Вы можете оставить комментарий, или обратную ссылку на Ваш сайт.

Оставить комментарий

Похожие статьи