Как сделать RSS на сайте
Пришло время, наконец-то, по-настоящему применить знания по XML на практике. В этой статье я расскажу, как сделать RSS-канал у себя на сайте. Безусловно, помимо небольших знаний по XML, потребуется знания по PHP (в зависимости от Вашего сайта, и MySQL тоже).
Вообще, весь смысл создания RSS-канала на сайте заключается в том, что нужно написать всего одну страницу в XML-формате с нужным кодом. Эту страницу необходимо динамически менять через PHP, добавляя туда свежие материалы из базы (либо от туда, где Вы держите контент). А вот в каком формате нужно добавлять, об этом написано чуть ниже.
Я сейчас сразу приведу пример, в каком виде надо генерировать XML-страницу с RSS-каналом Вашего сайта:
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>Лента сайта MyRusakov.ru</title>
<link>http://myrusakov.ru</link>
<description>Создание и раскрутка сайтов</description>
<item>
<title>Как сделать RSS на сайте</title>
<link>http://myrusakov.ru/xml-rss.html</link>
<description>Описание процесса создания RSS-канала на сайте</description>
</item>
<item>
<title>Как закрыть сайт на реконструкцию</title>
<link>http://myrusakov.ru/php-close-reconstruction.html</link>
<description>Как провести закрытие сайта на реконструкцию?</description>
</item>
</channel>
</rss>
В принципе, структура здесь достаточно прозрачная, однако, на всякий случай, поясню. Ваша задача подправить содержимое элемента channel, в частности, title, link и description надо изменить на название Вашего сайта, его адрес и краткое описание соответственно. Это фиксированная часть, которая не меняется. А вот дальше идут элементы item.
Вот именно содержимое элементов item и необходимо генерировать через PHP. Одна статья - один элемент item. Структура та же: title, link и description, что означает: название статьи, её адрес и краткое описание.
Помимо этих 3-х обязательных элементов есть ещё целая уйма необязательных параметров, полный список которых можно посмотреть здесь: http://cyber.law.harvard.edu/rss/rss.html.
Также обратите внимание, что весь код XML-документа должен быть написан без единой ошибки, иначе RSS-агрегаторы его просто не поймут. Для проверки валидности RSS-страницы используйте сервис W3: http://validator.w3.org/feed/.
На этом всё. Далее Вам необходимо лишь раскручивать данный RSS-канал, чтобы люди на него подписывались, но это уже совсем другая история.
-
- Михаил Русаков
Комментарии (26):
Спасибо, Михаил, за статью! Хоть я уж не дождался и сделал свой первый feed сам) Кстати, валидатор попросил еще послать заголовок: Header("Content-type: application/rss+xml; charset=utf-8"); Ну это ладно, но вот зачем ему понадобилось это, я не понимаю: item should contain a guid element; Missing atom:link with rel="self". Может вы растолкуете?
Ответить
Это совсем необязательно, но если так хочется, то проблема решается так: 1. В атрибутах у элемента rss добавляется ещё один атрибут: xmlns:atom="http://www.w3.org/2005/Atom" 2. Внутри элемента channel надо добавить строчку <atom:link href="path_to_rss" rel="self" type="application/rss+xml" /> Вместо path_to_rss надо поставить ссылку к данному RSS-каналу.
Ответить
А как отправлять сообщения с ленты?
Ответить
Их не отправлять надо, на ленту должны люди самостоятельно подписываться.
Ответить
Я вот создал ленту. Подписался. Как должны приходить сообщение с ленты?
Ответить
В самом браузере теперь должна быть RSS-лента, куда должны приходить уведомления о новых материалах. Так же есть различные программы для чтения RSS-лент, и, наконец, есть сервисы (даже у Google есть), которые уведомляют пользователей по e-mail о новых статьях.
Ответить
Здравствуйте Михаил, Если можно прошу ответить на такой глупый вопрос: как заменить RSS-ленте надписи "All Ads", "Description" и включить в ленту картинки (фото). Теоретически понимаю как это можно сделать, а в каком файле найти не могу. На моем сайте лента автоматически создалась в ADSManagere. Адрес сайта на всякий случай: *** Заранее спасибо.
Ответить
На указанном сайте таких проблем не обнаружил, фото там также имеется.
Ответить
Михаил, простите может я не правильно выразился. Еще раз: будучи на своем сайте я захожу на страницу, где есть RSS (в объявления), жму, Mozilla (например) формирует ленту, открывает в отдельном окне, которое называется "All Ads" (сверху написано), под чертой типа описание - слово "Description". Вопрос 1: Как изменить эти надписи, написать свои, например, вместо "All Ads" имя сайта "Slavutich Board" и т.д.? При этом у меня отображается лента в виде списка новостей без картинок (фото). Вопрос 2: Как сделать, чтобы фото отображались? Спасибо.
Ответить
Заходил через Mozilla, картинки там были. Что касается надписей, то это уже где-то в настройках ADSManager, а если там нет, то обратитесь к их разработчикам. Лезть в их исходный код крайне опасно.
Ответить
Здравствуйте, у меня проблемы с rss(выдается ошибка). Сам код правильный(разные пробовала), но если в базе обычный текст - все отлично выводится, а если много символов, выдается ошибка, например: —(выделено) или тег <p> почему-то выделяется как ошибка. Как мне это исправить, ведь у меня в текстах много символов?
Ответить
Все HTML-теги нужно преобразовывать в сущности, например, < в <. Для этого есть функция htmlspecialchars().
Ответить
Спасибо, попробую!
Ответить
Все получилось! Спасибо!
Ответить
Здравствуйте Михаил,вот мой rss.xml : <?xml version="1.0" encoding="utf-8" ?> <rss version="2.0"> <channel> <title>TV7.MD RSS</title> <link>http://tv7.md/</link> <description>TV7.MD RSS</description> {foreach from=$recs item=item} <item> <title>{$item.Title|escapefquotes}</title> <link>{$item.link}</link> <description>{$item.Description|escapefquotes}</description> <guid>{$item.guid}</guid> <pubDate>{$item.CreateDate|date_format:"%a, %d %b %Y %T %z"}</pubDate> </item> {/foreach} </channel> </rss> Подскажите как вставить фото(видео) к каждой новости ($item). Примерно: <enclosure url="http://tv7.md/?action=image&id={$item.image|escapeofquotes}&size=1"length="11" type="image/jpeg"/> так? Спасибо
Ответить
<![CDATA[<img src="ссылка_на_картинку">]]> добавьте в description
Ответить
спасибо Михаил
Ответить
Здравствуйте Михаил...Извините что так поздно...но я решил сделать у себя ленту...Но мне важно знать безопасность и работоспособность на хостинге...Подскажите правильно я сделал? (на локалке работает) немножко доработал <?php header("Content-Type: text/xml"); echo "<?xml version=\"1.0\" encoding=\"windows-1251\"?>"; ?> <rss version="2.0"> <channel> <title>Канал новостей блога ruseller.info</title> <link>http://test.local/</link> <description>Главная страница сайта</description> <language>ru</language> <?php require_once "blocks/bd.php"; $result = mysql_query("SELECT id,title,description FROM data WHERE secret='0' order by 'id' "); if ($myrow = mysql_fetch_array($result)) { do { echo<<<TXT <item> <title>$myrow[title]</title> <link>http://test.local/post.php?id=$myrow[id]</link> <description>$myrow[description]</description> <author>[email protected]</author> <guid>http://test.local/post.php?id=$myrow[id]</guid> </item> TXT; } while ($myrow = mysql_fetch_array($result)); } ?> </channel> </rss>
Ответить
Выглядит нормально, но всё равно тестировать надо.
Ответить
Спасибо за ответ...Я очень старался но у меня нет хостинга чтобы его протестировать...
Ответить
Здравствуйте Михаил,подскажите пожалуйста как добавить иконку в адресную строку,что-бы человек нажал и перешёл в rss ленту
Ответить
<link rel="alternate" type="application/rss+xml" title="RSS" href="rss.xml" />
Ответить
Здравствуйте, Михаил. Спасибо за пример. А у Вас есть урок генерации <item></item> через php. Сам столкнулся с таким вопросом. Пытался проинклудить в xml php(данные из БД в цикле) Не получается. Подскажите, пожалуйста, куда копать?
Ответить
Нужно изучать DOM, затем с его помощью генерировать XML-документ.
Ответить
Кроме RSS пожалуй и не знаю, где предпочтительнее использовать XML, вроде можно заменить его более простым форматом JSON. Ну единственное, если сохраняете какие-то архисложные конфиги или форматы данных на сервере, то возможно лучше тоже перегонять их в XML и потом только писать. Извините конечно за офтоп.
Ответить
вот создавала свой фид на сайт Кредиты-Москвы и вот.что получилось не знаю или правильно.подскажите,пожалуйста http://feeds.feedburner.com/creditmy/UmVg ?
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.