- → Программирование
- → PHP
- → Статьи
RSS на PHP: Создание RSS ленты на PHP
Сейчас мы научимся создавать rss-канал на PHP. Создание RSS ленты на PHP доступно несколькими способами. Но прежде немного слов о самом rss формате.Что такое RSS?
RSS (Really Simple Syndication) – это тип данных языка XML, с помощью которого сайт может обмениваться информацией с несколькими сайтами (новости) в автоматическом режиме или для презентации новостей пользователю. Каждая RSS лента (RSS файл) должна соответствовать стандарту XML 1.0.
Преимущества RSS ленты
1) Экономия трафика для пользователей сайта.
2) Информирование пользователей о новых добавлениях.
3) Продвижение сайта с помощью rss каталогов.
4) Приток посетителей с rss-ленты.
Структура RSS ленты
Перед написанием RSS ленты на PHP, необходимо ознакомиться с ее структурой. Ниже предоставлена структура RSS ленты у версии формата RSS 2.0.
<?xml version="1.0"?> <rss version="2.0"> <channel> <title>Название RSS ленты</title> <link>Ссылка на сайт ленты (ваш сайт)</link> <description>Краткое описание ленты (3-4 предложения)</description> <item> <title>Название новости</title> <link>Ссылка на новость в интернете</link> <description>Сокращенный текст (описание) статьи, новости</description> <author>Имя автора</author> <pubDate>Дата публикации новости</pubDate> </item> ... <item> <title>Название статьи </title> <link>Ссылка на статью, новость в интернете</link> <description>Описание</description> <author>Имя автора</author> <pubDate>Дата публикации</pubDate> </item> </channel> </rss>
Вот примерная структура RSS ленты. Заметьте, что элементы item это ваши посты, новости, статьи, материалы или что там еще у вас может на сайте быть. Данных элементов в ленте может быть 10-20, по вашему желанию. Также необходимо помнить что pubDate (формат даты) должен быть в виде: Sat, 07 Sep 2011 17:45:01 GMT, подробнее о данном формате узнаете далее.
Элементы RSS ленты
Обязательные элементы канала | |
---|---|
title | Имя RSS канала. Оно, например, может совпадать с названием сайта. |
description | Краткое описание RSS канала. |
link | Ссылка на сайт, с которым связан канал. |
Необязательные элементы канала (channel) | |
language | Язык канала (en-us - Английский; ru - Русский). |
copyright | Копирайт или сведения об авторстве на RSS ленту. |
managingEditor | Email адрес ответственного за контент канала. |
webMaster | Email адрес ответственного за техническую часть публикации канала. |
pubDate | Дата публикации канала, в соответствии с Date and Time Specification of RFC 822. |
lastBuildDate | Время последней модификации канала в соответствии с Date and Time Specification of RFC 822. |
category | Одна или несколько категорий, к которым принадлежит канал. |
generator | Название программы, использованной для генерирования RSS канала. |
docs | Ссылка на файл документации подвида RSS, который был использован для создания канала. |
ttl | Ttl расшифровывается как ‘time to live’. Это число минут, в течение которых канал сохраняет свою актуальность. |
image | Используется для подключения графического файла (GIF, JPEG, или PNG), который будет показан вместе с RSS каналом. Имеет следующие параметры: title - обычно тот же текст, что и в RSS title; description - описание графического файла, которое будет показано, если файл не доступен; link - ссылка на страницу, с которой связан канал; url - URL на файл формата JPEG, GIF или PNG, который связан с RSS каналом; width - ширина рисунка. height - высота рисунка. |
skipHours | Число часов, в течение которых RSS ридеры могут не проверять канал на обновления. |
skipDays | Число дней, в течение которых RSS ридеры могут не проверять канал на обновления. |
Обязательные элементы итема (item) | |
title | Имя итема (новости, сообщения) RSS канала. |
description | Краткое описание итема. |
link | ссылка на страницу, содержащую полное описание события. |
Необязательные элементы итема (item) | |
author | Email адрес автора сообщения. |
category | Категория итема. |
comments | Ссылка на страницу с комментариями по итему. |
enclosure | Описывает медиа-объект, присоединенный к итему. Имеет следующие параметры: url - ссылка на файл объекта; length - размер файла в байтах; type - тип файла, в соответствии со спецификацией MIME. |
guid | Уникальная строка, используемая для идентификации итема. |
pubDate | Дата публикации итема, в соответствии с Date and Time Specification of RFC 822. |
Способы создания RSS ленты на PHP
1.Написание RSS ленты вручную, средствами PHP.
Ниже предоставлен прямолинейный PHP код вывода RSS ленты, так будет проще для понимания. При вашем желании можно данный код усовершенствовать и поместить у функции, классы…
<?php echo '<?xml version="1.0"?> <rss version="2.0"> <channel> <title>Название RSS-канала</title> <link>ссылка на сайт канала</link> <description>Описание канала (кратко)</description>'; $result=MYSQL_QUERY("SELECT id, title, text, date, author FROM article ORDER BY date DESC LIMIT 10"); while ($row=MYSQL_FETCH_ARRAY($result)) { $id=$row['id']; $title=$row['title']; $text=$row['text']; $date=$row['date']; $author=$row['author']; echo '<item> <title>$title</title> <link>ссылка на статью</link> <description>$text</description> <author>$author</author> <pubDate>$date</pubDate> <guid>ссылка на статью</guid> </item>'; } echo '</channel> </rss>'; ?>
Как правило, дата хранится в другом формате, у меня например в таком виде: 2011-12-29 12:47:00.
Для перевода в формат RFC 822 можно пользоваться следующей строкой:
$date=date("D, j M Y G:i:s", strtotime("2006-10-29 12:47:00")). " GMT";
Как видите реализовать RSS на PHP не так уж и сложно. Теперь давайте проверим результат работы, для этого в Опере я ввожу путь к файлу (http://sitear.ru/rss.php). Также можно представить браузеру RSS ленту, для этого в блок head вставляем следующую строку:
<link rel="alternate" type="application/rss+xml" title="RSS" href="/rss.php" />
Вот и все, мы написали полноценную RSS ленту на PHP.
2. Использование готовых PHP скриптов для создания RSS ленты.
Скрипт на PHP для вывода на сайте RSS 2.0 - новостей
Основной особенностью этого скрипта является использование регулярных выражений, то есть работа скрипта обходиться без DOM-функций. Для вывода будем использовать лишь заголовки, ссылки на публикации и краткие описания публикаций новостной ленты. Для того чтобы не запрашивать все время данные RSS-канала, будем их кэшировать. Поэтому для каталога, где будет сохраняться кэш-файл, нужно будет установить права доступа 777. Для нормальной работы скрипта нужен PHP не ниже версии 5.1.
Пример использования RSS-скрипта
<?php include_once("write_rss.php");//подключаем файл с функцией вывода RSS-новостей //адресс новостей (URL-адрес RSS потока) $url_rss="http://sitear.ru/rss.php"; //количество выводимых новостей $kol_print_news=10; //имя файла для хранения RSS-новостей на локальном сервере (то есть кэш-файл) $file_rss="cache_rss.xml"; //время обновления, в часах $hclock=1; print_rss($url_rss,$file_rss,$hclock,$kol_print_news); //вызываем функцию вывода RSS-новостей ?>
А вот собственно сам файл write_rss.php:
<?php function print_rss($url_rss,$file_rss,$hclock,$kol_print_news) { //$url_rss - URL-адрес RSS потока //$file_rss - адресс файла для хранения RSS-новостей //$hclock - время обновления, в часах //$kol_print_news - количество выводимых новостей if (!file_exists($file_rss) || ( filemtime($file_rss) + $hclock*60*60 < time() ) )//если файл не сохраняли, то сохраняем на локальном сервере или если существует, то проверяем устарел ли файл (не более Х часов назад он записан) { if (@!copy ($url_rss,$file_rss)) return (false); $text_rss=file($file_rss); $text_rss=implode("",$text_rss); //преобразуем кодировку данных //если не нежно конвертировать кодировку, то комментируем ниже идущее условие или редактируем if (preg_match('/<?xml[^>]+encoding[\s]*=[\s]*("|\')windows-1251("|\')[^>]+?>/i', $text_rss)) { $text_rss = iconv("cp1251", "utf-8", $text_rss); file_put_contents($file_rss, $text_rss);//пишем данные обратно в файл } } $text_rss=file($file_rss); $text_rss=implode("",$text_rss); $url_image = ""; $image_is=preg_match("#<image>(.*?)</image>#is",$text_rss,$image_m); if ( $image_is ) { $image_url_is = preg_match("#<url>(.*?)</url>#is",$image_m[0],$image_t); if ( $image_url_is ) $url_image = $image_t[1]; } $mas_item=array(); preg_match_all("#<item>.*?</item>#is",$text_rss,$mas_item); $one_item=array(); $t=""; $t.=( $url_image ? "<div><img src='".$url_image."' ></div>" :""); $kol=0; if (sizeof($mas_item)>0) { foreach ($mas_item[0] as $one_item) { $date = ""; $kol++; $t_is=preg_match("#<title>(.*?)</title>#is",$one_item,$title); $l_is=preg_match("#<link>(.*?)</link>#is",$one_item,$link); $d_is=preg_match("#<description>(.*?)</description>#is",$one_item,$description); $date_is=preg_match("#<pubDate>(.*?)</pubDate>#is",$one_item,$date_t); if ($t_is && $l_is) { $title[1]=preg_replace("#<\!\[CDATA\[(.*?)\]\]>#eis","'\\1'",$title[1]); $link[1]=preg_replace("#<\!\[CDATA\[(.*?)\]\]>#eis","'\\1'",$link[1]); $description[1]=preg_replace("#<\!\[CDATA\[(.*?)\]\]>#eis","'\\1'",$description[1]); if ( $date_is ) $date = strtotime($date_t[1]); $t.="<div><a href='".$link[1]."' target='_blank'>".$title[1]."</a> <br>" .$description[1] .( $date ? "<br>".date("d.n.Y",$date) : "" ) ."</div>"; } if ($kol >= $kol_print_news) break; } } echo ($t); return (true); } ?>
Вот мы и разобрались с RSS лентой, теперь можете наслаждаться RSS на своем сайте. Если у вас есть варианты или пожелания по поводу RSS на PHP, можете высказаться в комментариях.
Дальше: Поисковые системы в общем










Development — Taras Moroz