Что такое RSS канал сайта
Файл RSS (он же «RSS-канал», «RSS-поток», «RSS-лента», «Feed», «фид») — это файл с перечнем публикаций сайта (или их анонсов), отсортированных по времени создания/обновления. Он не должен включать ссылки на страницы со служебной информацией или предназначенные для навигации, например, корзину интернет-магазина или страницы рубрик.
RSS используют читатели, узнавая о новом материале сайта в RSS-ридерах, и агрегаторы (например, Яндекс.Новости), чтобы постоянно не обходить весь сайт.
Символ RSS
<svg viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg" height="80" width="80" style="overflow: hidden;"><circle r="1.5" cx="1.5" cy="8.5" fill="#FF993C"></circle><g fill="none" stroke="#FF993C" stroke-linecap="round" stroke-width="2"><circle r="5.8" cx="0" cy="10"></circle><circle r="9" cx="0" cy="10"></circle></g></svg>
Указывая ширину (width
) и/или высоту (height
) иконки, изображение будет пропорционально изменяться и подстраиваться под любой размер.
Пример RSS
http://shpargalkablog.ru/rss.php
Валидатор RSS
https://validator.w3.org/feed/
Что такое RSS-ридер
RSS-ридер (он же «RSS-агрегатор») — это программа, которая объединяет RSS-файлы нескольких сайтов в одну ленту. Cсылки на новые материалы всех интересующих сайтов собраны в одном месте. Не требуется переходить на каждый сайт в отдельности только для того, чтобы узнать есть ли новые публикации. Просмотренные ссылки помечаются как прочитанные. К непрочитанным можно вернуться в любое удобное время.
Пример RSS-ридера
Как создать rss.php
на PHP и MySQL
Для базы данных table, содержащей такие столбцы:
+----------------+----------------------------+-------------------------------------+-----------------------------+----------------------------+----------------------------------------------------+ | id | url | title | update | meta | description | | smallint(5) | varchar(255) | varchar(255) | timestamp | set('noindex', 'feed', '') | varchar(255) | | UNSIGNED | | | CURRENT_TIMESTAMP | | | | AUTO_INCREMENT | | | ON UPDATE CURRENT_TIMESTAMP | | | +----------------+----------------------------+-------------------------------------+-----------------------------+----------------------------+----------------------------------------------------+ | 1 | 2017/02/rss-php-mysql.html | Как сделать RSS канал | PHP примеры | 2017-02-14 09:07:30 | feed | Что такое RSS-канал, зачем он нужен, пример файла, | | | | | | | как сделать его на PHP и MySQL и если требуется | | | | | | | с помощью .htaccess перенаправить в Feedburner | +----------------+----------------------------+-------------------------------------+-----------------------------+----------------------------+----------------------------------------------------+ | 2 | 2017/02/example.html | Название статьи | 2017-01-26 12:00:00 | | Описание статьи | +----------------+----------------------------+-------------------------------------+-----------------------------+----------------------------+----------------------------------------------------+
Файл db.php
<?php if (defined('dbOn')) { $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); // подключение к серверу MySQL: тут указывается пароль к базе данных if ($mysqli->connect_error) { die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error); } } else { exit(); }
Файл rss.php
<?php // см. стандарт if ($_SERVER['QUERY_STRING'] == '') { // убирать невостребованные страницы с параметрами, например, site.ru/rss.php?p=0, site.ru/rss.php?p=1 и т.д. // подключить файл с паролем от базы данных define('dbOn', ''); require_once 'абсолютный_адрес/db.php'; if (!$mysqli->set_charset("utf8")) { printf("Ошибка при загрузке набора символов utf8: %s\n", $mysqli->error); exit(); } else { if ($result = $mysqli->query("SELECT url, title, update, description FROM table WHERE meta LIKE '%feed%' ORDER BY update DESC LIMIT 10;")) { // ORDER BY осуществляет сортировку строк по дате обновления, условие WHERE meta LIKE '%feed%' — выбор только тех, в ячейках которых на пересечении со столбцом meta есть значение feed (если перед обновлением строки не убрать feed, то читатели увидят дубликат записи), а LIMIT 10 останавливает перебор и вывод после первых 10-и найденных header("Content-Type: application/rss+xml;"); echo '<?xml version="1.0"?> <rss version="2.0"> <channel> <title>Шпаргалка блоггера</title> // своё название RSS-ленты <link>http://shpargalkablog.ru/</link> // свой URL сайта, данные которого транслируются в RSS-ленте <description>Вебмастеру в помощь: SEO, аналитика, HTML, CSS, JS, PHP</description> // своё описание RSS-ленты одним предложением <language>ru</language>'; while ($row = $result->fetch_assoc()) { echo ' <item> <title>'. $row['title'] .'</title> <link>http://shpargalkablog.ru/'. $row['url'] .'</link> <description>'. $row['description'] .'</description> <pubDate>'. date('r', strtotime($row['update'])) .'</pubDate> <guid>http://shpargalkablog.ru/'. $row['url'] .'</guid> </item>'; } echo ' </channel> </rss>'; } } $mysqli->close(); exit(); } else { // 404 ошибка http_response_code(404); include_once 'http://site.ru/404.php'; // подключить файл со своим оформлением 404 ошибки exit(); }
Файл .htaccess
# если нужен редирект с /rss.php на Feedburner (см. страница справки) RewriteEngine On # если запись отсутствует RewriteCond %{HTTP_USER_AGENT} !FeedBurner [NC] RewriteCond %{QUERY_STRING} ^$ [NC] RewriteRule ^rss.php$ http://feeds.feedburner.com/shpargalkablog [R=301,L]
HTML разметка страниц сайта
Не нужно непременно искать адрес RSS-ленты. В RSS-ридер достаточно добавить адрес любой страницы сайта, в исходном коде которой есть запись:
<!DOCTYPE html> <html> <head> <link title="RSS | Шпаргалка блоггера" type="application/rss+xml" rel="alternate" href="/rss.php"/>