RSS каналы в настоящее время используются повсеместно, на них подписываются, их используют в качестве обмена новостями между сайтами, а также их парсят различные роботы, например, ЯППБ (поиск по блогам Яндекса).
Каждый уважающий себя сайт, который имеет регулярно обновляемый контент (это могут быть новости, статьи, фотографии, дневники и т.д.), просто обязан иметь RSS фиды, так как люди, заинтересованные в свежей информации на сайте, первым делом ищут, как подписаться на эти самые обновления. К тому же, имея RSS на своем сайте, можно регистрировать его в различных, специально предназначенных для этого, каталогах и, таким образом, получать обратные ссылки и главное — траффик!
То, что рсс потоки важны, мы выяснили, теперь разберемся, как установить на свой сайт (например, прикрепить к новостям) этот самый RSS, если сам движок сайта не делает этого автоматически.
PHP скрипт для установки RSS на сайт
Прежде всего, надо уяснить, что на выходе мы должны получить XML файл определенной структуры (об этом можно почитать в википедии). Для удобного манипулирования с RSS каналами у меня имеется хороший PHP класс (class.RSSFeed.zip [1.25KB]).
Для того, чтобы установить себе на сайт RSS канал, проделайте следующие шаги: 1. загрузите класс RSSFeed себе на сервер; 2. создайте файл rss.php, в который поместите строки, приведенные ниже в примере (с вашими конфигурационными настройками).
- <?
- # отключаем вывод замечаний
- # устанавливаем макс. время работы скрипта 30 сек.
- # подключаем класс (в каталоге lib)
- require_once("lib/class.RSSFeed.php");
- # задаем параметры базы данных
- # другие настройки
- define("RSS_DESCR", "Самая свежая информация с сайта site.ru: события, игры, путешествия, конкурсы и многое другое!"); // описание RSS канала
- # соединяемся с СУБД
В приведенном PHP коде необходимо настроить константы (задаются функцией define). Обратите особое внимание на NEWS_TABLE и DATE_COLUMN, это имя таблицы новостей (или статей и т.д.) и имя колонки с датой, если последней в таблице нет, то её надо добавить (записи RSS фида обязательно должны содержать дату публикации).
Мы определили константы и подключились к БД, теперь необходимо вывести все записи в XML формате. Для этого используем следующие строки кода (добавляем их ниже предыдущих не изменяя).
- # формируем запрос
- $query = "
- SELECT *
- FROM `%s`
- ORDER BY `%s` DESC
- LIMIT 0, %d
- ";
- # посылаем запрос к базе данных
- # создаем rss объект
- $rss = new RSSFeed(HTTP_URL, RSS_TITLE, RSS_DESCR);
- # формируем Item в RSS для каждой записи
- {
- $rss->AddItem(
- $row['title'],
- $row['body'],
- $row[DATE_COLUMN]
- );
- }
- # публикуем рузельтирующий RSS 2.0
- $rss->Publish();
- ?>
Единственное, что можно редактировать в вышеприведенном коде, это названия полей в базе данных для URL страницы ($row['url']), заголовка ($row['title']) и описания ($row['body']). То есть, если у вас эти параметры формируются по другому принципу (например URL) или исходя из других названий полей, то необходимо сделать соответствующие правки.
Файл готов, что теперь?
Теперь необходимо проверить, работает ли то, что мы написали!?
Ваш новые RSS канал будет находиться по адресу http://site.ru/rss.php. Проверьте, отдается ли что-нибудь по этому адресу и если нет, то что-то не учли и надо искать причину (вероятнее всего в конфиге).
Также используйте валидаторы для проверки валидности самих XML фидов. Это можно сделать с помощью Feed Validator или W3C Feed Validator. Если все прошло отлично, поздравляю, вы успешно поставили себе на сайт RSS!
Неужели это все, что касается установки?
Да, на этом можно закончить установку RSS, однако адрес вида /rss.php не очень юзабелен, лучше с помощью .htaccess (если используется apache) сделать URL вида /latest-news.xml, этот вариант будет понятней для подписчиков. Файл .htaccess должен содержать примерно следующее:
- RewriteEngine On
- RewriteCond %{SCRIPT_FILENAME} !-d
- RewriteCond %{SCRIPT_FILENAME} !-f
- RewriteRule ^latest-news\.xml$ /rss.php [NE,QSA,L]
Теперь вы можете использовать http://site.ru/latest-news.xml в качестве адреса для своего нового RSS канала, или же зарегистрировать его в FeedBurner, и отдавать читателям и ботам адрес фидбернера. Преимущество последнего варианта в том, что при создании на сайте новой новости она помимо того, что автоматически помещается в фид, фидбернер ещё пингует множество сервисов и поисковых систем, чтобы они были в курсе ваших обновлений.
На этом процесс установки завершен, осталось поставить на сайт какую-нибудь иконку, чтобы люди кликали и подписывались. Если есть вопросы или предложения, с удовольствием можно обсудить в комментариях.
Успехов с RSS!


Комментарии
Дмитрий
Май 27, 2009 at 13:23
1Сейчас большинство cms включают rss представление данных и вебмастерам не нужно заморачиваться с установкой дополнительных скриптов.
Хотя статья полезна тем, кто использует самописные движки.
IHHI
Май 28, 2009 at 16:00
2Лучше в .htaccess сделать редирект фида на feedburner, а на страницах отдавать ссылку на реальный адрес. В TxP для этого я использую плагин. Решение пришло после того, как Google начал двигать фиды – проще поменять адрес в админке в одном месте, чем в двух-трёх местах в шаблоне.
Сергей, это статья “как нужно в теории”, или это всё было проделано собственноручно на этом блоге?
Devaka
Май 28, 2009 at 22:46
3IHHI, этот блог на txp. Но собственноручно было проделано подобное неоднократно и не только для себя. Я ведь web-разработчик по совместительству )
Kinatope
Май 29, 2009 at 10:31
4Извиняюсь за нубский вопрос. Для просмотра RSS я использую закладки на ленты новостей FireFox. Если подписаться на ваш блог с помощью кнопки rss в адресной строке FireFox, то в закладках напротив прочитанных постов будет появляться фавикон блога. Поэтому на поиск непрочитанных постов уходят секунды. Но у ленты некоторых блогов фавикон не появляется. С чем это связано и что нужно сделать, чтобы отображался фавикон?
Devaka
Май 29, 2009 at 10:55
5Kinatope, проблема скорей всего с неправильным прописанием favicon в HTML (про то, как правильно установить иконку фавикон на свой сайт читайте тут).
Kinatope
Май 29, 2009 at 12:06
6На самих блогах фавиконы отображаются. И если просто добавить такой блог в закладки, то фавикон у ссылки будет (блог Димка), а вот в ленте новостей FF нет . В RSS у таких блогов посты имеют адреса: http://feedproxy.google.com/…
В вашей ленте у постов свои настоящие адреса. Но если подписаться на ваш RSS с помощью ссылки на самом блоге, то адреса постов тоже будут иметь вид http://feedproxy.google.com/… и фавикон отображаться не будет. Видимо, здесь важно где расположен сам фид? Если подписываться из адресной строки FF, то его адрес: http://devaka.ru/rss/ или http://devaka.ru/atom/, а если вторым способом то здесь: http://feeds2.feedburner.com/devaka?format=xml
А у блога Димка в обоих случаях он на http://feeds.feedburner.com/… и фавикон в закладках на ленты новостей FF не отображается.
Управленец
Май 29, 2009 at 14:42
7Вообще как иконка rss “попадает” в адресную строку? <link rel=“alternate” … ?
Devaka
Июнь 12, 2009 at 23:55
8Управленец, да, rss иконка в адресную строку попадает из тега link.
Igrik
Июль 3, 2009 at 21:35
9Пытаюсь установит rss по вашей методике на php-fusion, однако при проверке валидности пишет, что файл не является xml. Помогите пожалуйста разобраться. Дополнительную информацию, которая необходима могу сбросить на e-mail.
tatum
Июль 31, 2009 at 00:54
10оп получилось спс;)
Hum
Август 29, 2009 at 16:51
11А можно ли форматировать текст в рсс, например использовать тэги <p> <br> <div>?
Devaka
Август 29, 2009 at 17:02
12@Hum: Форматировать можно, без проблем.
Для этого в теге описания текст нужно вставлять между тегами:
<![CDATA[ и ]]>
Подробней читайте тут.
@Igrik: Проблему решили?
Дизайнер СПб
Сентябрь 13, 2009 at 16:19
13Я – чайник, у меня сайт в xhtml, я дизайнер по интерьерам, не веб-мастер, но на свой сайт, для раскрутки хотелось бы поместить rss ленту. Вот хоть кто нибудь объяснил бы как и что надо делать для установки в обычный xhml сайт человеку, который не понимает в php. Есть ли добрые люди? HELP! что сделать надо ПО ШАГАМ? Да прибудет с вами удача! ;)
Ирокез
Сентябрь 27, 2009 at 07:15
14Подскажите, ЕСЛИ КТО В КУРСЕ, можно ли у себя в РСС ленте размещать новости с других сайтов, но чтоб автоматически подгружались только новости отсортированные по КЛЮЧЕВЫМ СЛОВАМ?!!
Заранее thnx
webb
Октябрь 11, 2009 at 18:17
15Ирокез, меня тоже этот вопрос интересует, как узнал?
Андрей-2
Октябрь 11, 2009 at 19:13
16Можно, написав скрипт на php или другом языке )
Артемий
Декабрь 5, 2009 at 20:06
17Здравствуйте. А скажите, пожалуйста, есть ли возможность сделать следующее изобретение для сайта в бесплатном хостинге народ.ру:
БЛОГ (blogspor, wordpress или другой). В него записывают новости и они автоматически переводятся в тамошний RSS-канал.
САЙТ НАРОДОВСКИЙ.
На нём есть
1. файл сайт/rss.xml, который сам по себе ничего не содержитэ, но в него автоматически пересылаются посты из канала в блоге.
2. файл сайт/news.html, внутри которого стоит сценарий на JavaScript, который импортирует данные из канала в блоге и представляет их на странице в виде HTML.
Заранее спасибо.
Сергей
Январь 2, 2010 at 00:49
18я так понял, что для того, чтобы юзать рсс, обязательно нужно иметь в бд соответствующую структуру данных. а что делать, если есть не все? ну, например, нету дат или других колонок. эти данные обязательны для рсс?
AIvPetrov
Май 2, 2010 at 09:15
19Попробуем.. А то яндекс по ВЧ выдает страницу ?feed=rss, а ее и не было никогда.
Илья
Июнь 28, 2010 at 13:12
20А какой формат поля DATE_COLUMN в Базе Данных?
А то я всё запустил, уже Фид зажёг, а дата-то в нулях вся…
у меня в MySQL формат: date
Иван
Август 16, 2010 at 08:05
21set_time_limit(60 * 30) – а это разве не час?
Жека
Август 31, 2010 at 19:22
22Все получилось, кроме картинок. Они не выводятся.
Я так понял, это из-за того то в файле rss.php при “# формировании Item в RSS для каждой записи” присутствуют только поля заголовок, описание и дата. При этом добавить поле с картинкой не получается – пишет “Cannot modify header information”
Подскажите, плз, что не так)
smsReal
Октябрь 24, 2010 at 19:36
23Вот нифига немогу найти мануал или пояснения возможностей или исключения оного для сайтов с хостом не имеющим потдержки PHP. Хотел добавить для народного сайта такую фичу, но как это сделать, и вообще возможно ли, нигде не нашел. Кто поможет, или с уверенностью может сказать, что это невозможно в данном случае?
Denis
Февраль 4, 2011 at 13:54
24Здравствуйте. Очень полезная статья, и очень помогла. Только столкнулся с такой проблемой почемуто в Опере и Safari отображается только одна последняя новость, в IE и Мазиле и Maxthon норма, последние 15.
Может кто что подскажет как решить сию неприятность?
Алексей
Март 6, 2011 at 14:37
25у меня такая проблема , после установки фида , получив подписчиков 20 я заметил , что мой блог не набирает рейтинг в Я. каталоге,надпись , что фид устарел, что с этим делать???Потому что ни чесло подписчиков не меняеться в рейтинге , ни поднимаюсь в нем самом. Поставил Плагин RDS на Мозилу , при анализе сайта пишет , что фид склеен
Евгений
Март 29, 2011 at 21:57
26Наконец сделал…спасибо
Серега
Июнь 3, 2011 at 17:19
27Здравствуйте, а как сделать трансляцию новостей из других источников, НО, чтобы заголовки не были активны, те не уводили посетителя на сайт донор ???
Может какая статейка есть ?
Комментирование этой статьи закрыто.